Skip to content

Commit

Permalink
feat: working test example
Browse files Browse the repository at this point in the history
  • Loading branch information
zaida04 committed Mar 27, 2024
1 parent 6b8ad85 commit a8ebaa2
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 34 deletions.
Binary file modified bun.lockb
Binary file not shown.
9 changes: 0 additions & 9 deletions packages/gil/__tests__/bot/index.ts

This file was deleted.

File renamed without changes.
21 changes: 21 additions & 0 deletions packages/gil/__tests__/bot_mongo/db/Server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import mongoose, { Schema, Document } from "mongoose";

// This is for typescript
export interface IServer extends Document {
server_id: string;
prefix: string;
premium_level: string;
staff_roles: string[];
}

// This is for mongodb to know what we are storing
const ServerSchema: Schema = new Schema({
server_id: { type: String, required: true },
prefix: { type: String, required: false },
premium_level: { type: String, required: false, default: null },
staff_roles: { type: Array, required: false, default: [] },
});

const Server = mongoose.model<IServer>("Server", ServerSchema);

export default Server;
15 changes: 15 additions & 0 deletions packages/gil/__tests__/bot_mongo/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
version: '3'
services:
mongo:
image: mongo:4.2.5
ports:
- '27017:27017'
environment:
MONGO_INITDB_ROOT_USERNAME: guildedjs
MONGO_INITDB_ROOT_PASSWORD: testpass
MONGO_INITDB_DATABASE: guildedjs
volumes:
- mongo-vol:/data/db

volumes:
mongo-vol:
28 changes: 28 additions & 0 deletions packages/gil/__tests__/bot_mongo/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { join } from "path";
import "dotenv/config";
import { GilClient } from "../../lib/GilClient";
import { MongoAdapter } from "../../lib/adapters/db/MongoAdapter";

import mongoose from "mongoose";
import Server from "./db/Server";

mongoose.connect("mongodb://guildedjs:testpass@localhost:27017/", {
connectTimeoutMS: 5000,
retryWrites: true,
retryReads: true,
waitQueueTimeoutMS: 5000,
socketTimeoutMS: 5000,
});

const YokiBot = new GilClient({
token: process.env.TOKEN!,
commandDirectory: join(__dirname, "commands"),
listenerDirectory: join(__dirname, "listeners"),
databaseAdapter: new MongoAdapter({
serverModel: Server,
serverIdKey: "server_id",
serverStaffRolesKey: "staff_roles",
}),
});

YokiBot.start();
1 change: 1 addition & 0 deletions packages/gil/lib/adapters/db/DatabaseAdapter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export abstract class DatabaseAdapter {
public abstract getServer(serverId: string): Promise<StoredServer | null>;
public abstract createServer(serverId: string): Promise<StoredServer>;
public abstract getRoles(serverId: string): Promise<StoredRole[]>;
}

Expand Down
42 changes: 23 additions & 19 deletions packages/gil/lib/adapters/db/MongoAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,45 @@ import type mongoose from "mongoose";
import { DatabaseAdapter, StoredRole, StoredServer } from "./DatabaseAdapter";

export class MongoAdapter extends DatabaseAdapter {
serverModel: mongoose.Document;
serverIdKey: string;
serverStaffRolesKey: string;

public constructor(options: {
serverModel: mongoose.Document;
serverIdKey: string;
serverStaffRolesKey: string;
}) {
public constructor(
readonly options: {
serverModel: typeof mongoose.Model<mongoose.Document>;
serverIdKey: string;
serverStaffRolesKey: string;
},
) {
super();

this.serverModel = options.serverModel;
this.serverIdKey = options.serverIdKey;
this.serverStaffRolesKey = options.serverStaffRolesKey;
}

public async getServer(serverId: string): Promise<StoredServer | null> {
const server = await this.serverModel.findOne({
[this.serverIdKey]: serverId,
const server = await this.options.serverModel.findOne({
[this.options.serverIdKey]: serverId,
});
if (!server) return null;

return {
server_id: server[this.serverIdKey],
server_id: server[this.options.serverIdKey],
prefix: server.prefix,
premium_level: server.premium_level,
};
}

public async createServer(serverId: string): Promise<StoredServer> {
const server = await this.options.serverModel.create({
[this.options.serverIdKey]: serverId,
prefix: null,
premium_level: null,
});

return server;
}

public async getRoles(serverId: string): Promise<StoredRole[]> {
const server = await this.serverModel.findOne({ [this.serverIdKey]: serverId });
const server = await this.options.serverModel.findOne({ [this.options.serverIdKey]: serverId });
if (!server) return [];

if (!(this.serverStaffRolesKey in server)) return [];
const roles = server[this.serverStaffRolesKey as keyof typeof server] as StoredRole[];
if (!(this.options.serverStaffRolesKey in server)) return [];
const roles = server[this.options.serverStaffRolesKey as keyof typeof server] as StoredRole[];

return roles;
}
Expand Down
6 changes: 3 additions & 3 deletions packages/gil/lib/defaults/MessageListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ export default class MessageListener extends Listener {
return;
}

const server = await this.gil.db.getServer(message.serverId);
let server = await this.gil.db.getServer(message.serverId);
if (!server) {
this.gil.logger.debug("Server was not found", message.id);
return;
this.gil.logger.debug("Server was not found, creating...", message.id);
server = await this.gil.db.createServer(message.serverId);
}

const member = await this.gil.client.members.fetch(message.serverId, message.authorId);
Expand Down
2 changes: 2 additions & 0 deletions packages/gil/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ export * from "./structures/Task";
export * from "./structures/Manager";
export * from "./adapters/logging/ConsoleAdapter";
export * from "./adapters/logging/LoggerAdapter";
export * from "./adapters/db/DatabaseAdapter";
export * from "./adapters/db/MongoAdapter";
// export * from "./adapters/logging/WinstonAdapter";
// export * from "./adapters/logging/PinoAdapter";
5 changes: 2 additions & 3 deletions packages/gil/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
"release": "npm publish"
},
"devDependencies": {
"@types/mongoose": "^5.11.97",
"dotenv": "^16.0.3",
"mongoose": "^8.2.3",
"typescript": "5.0.4"
},
"dependencies": {
Expand All @@ -25,9 +27,6 @@
"lexure": "^0.17.0",
"typed-emitter": "^2.1.0"
},
"peerDependencies": {
"mongoose": "8.2.3"
},
"contributors": [
{
"name": "Zaid \"Nico\"",
Expand Down

0 comments on commit a8ebaa2

Please sign in to comment.