Merge branch 'dev'
commit
c3ffffa27d
|
@ -2,7 +2,7 @@ import eris from 'eris';
|
||||||
import mongoose from 'mongoose';
|
import mongoose from 'mongoose';
|
||||||
import { promises as fs } from 'fs';
|
import { promises as fs } from 'fs';
|
||||||
import { Collection, Command, Util } from '.';
|
import { Collection, Command, Util } from '.';
|
||||||
import { Moderation, ModerationInterface } from '../models';
|
import { Member, MemberInterface, Moderation, ModerationInterface } from '../models';
|
||||||
|
|
||||||
export default class Client extends eris.Client {
|
export default class Client extends eris.Client {
|
||||||
public config: { token: string, prefix: string, guildID: string, mongoDB: string };
|
public config: { token: string, prefix: string, guildID: string, mongoDB: string };
|
||||||
|
@ -13,14 +13,14 @@ export default class Client extends eris.Client {
|
||||||
|
|
||||||
public util: Util;
|
public util: Util;
|
||||||
|
|
||||||
public db: { moderation: mongoose.Model<ModerationInterface> };
|
public db: { member: mongoose.Model<MemberInterface>, moderation: mongoose.Model<ModerationInterface> };
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
|
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
|
||||||
constructor(token: string, options?: eris.ClientOptions) {
|
constructor(token: string, options?: eris.ClientOptions) {
|
||||||
super(token, options);
|
super(token, options);
|
||||||
this.commands = new Collection<Command>();
|
this.commands = new Collection<Command>();
|
||||||
this.intervals = new Collection<NodeJS.Timeout>();
|
this.intervals = new Collection<NodeJS.Timeout>();
|
||||||
this.db = { moderation: Moderation };
|
this.db = { member: Member, moderation: Moderation };
|
||||||
}
|
}
|
||||||
|
|
||||||
public async loadDatabase() {
|
public async loadDatabase() {
|
||||||
|
|
|
@ -68,8 +68,10 @@ export default class Command {
|
||||||
case 4:
|
case 4:
|
||||||
return member.roles.some((r) => ['701454780828221450', '701454855952138300', '662163685439045632'].includes(r));
|
return member.roles.some((r) => ['701454780828221450', '701454855952138300', '662163685439045632'].includes(r));
|
||||||
case 5:
|
case 5:
|
||||||
return member.roles.some((r) => ['701454855952138300', '662163685439045632'].includes(r));
|
return member.roles.some((r) => ['455972169449734144', '701454780828221450', '701454855952138300', '662163685439045632'].includes(r));
|
||||||
case 6:
|
case 6:
|
||||||
|
return member.roles.some((r) => ['701454855952138300', '662163685439045632'].includes(r));
|
||||||
|
case 7:
|
||||||
return member.roles.includes('662163685439045632');
|
return member.roles.includes('662163685439045632');
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -119,11 +119,7 @@ export default class Util {
|
||||||
}
|
}
|
||||||
|
|
||||||
public decimalToHex(int: number): string {
|
public decimalToHex(int: number): string {
|
||||||
const red = (int && 0x0000ff) << 16;
|
const hex = int.toString(16);
|
||||||
const green = int && 0x00ff00;
|
return '#000000'.substring(0, 7 - hex.length) + hex;
|
||||||
const blue = (int && 0xff0000) >>> 16;
|
|
||||||
const number = red | green | blue;
|
|
||||||
const asHex = number.toString(16);
|
|
||||||
return '#000000'.substring(0, 7 - asHex.length) + asHex;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
import { Message } from 'eris';
|
||||||
|
import { Client, Command, RichEmbed } from '../class';
|
||||||
|
|
||||||
|
export default class AddItem extends Command {
|
||||||
|
constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this.name = 'additem';
|
||||||
|
this.description = 'Adds information to your whois embed.';
|
||||||
|
this.usage = 'additem [code]';
|
||||||
|
this.permissions = 0;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async run(message: Message, args: string[]) {
|
||||||
|
try {
|
||||||
|
if (args.length < 1) {
|
||||||
|
const embed = new RichEmbed();
|
||||||
|
embed.setTitle('Whois Data Codes');
|
||||||
|
embed.addField('Languages', '**Assembly Language:** lang-asm\n**C/C++:** lang-cfam\n**C#:** lang-csharp\n**Go:** lang-go\n**Java:** lang-java\n**JavaScript:** lang-js\n**Kotlin:** lang-kt\n**Python:** lang-py\n**Ruby:** lang-rb\n**Rust:** lang-rs\n**Swift:** lang-swift\n**TypeScript:** lang-ts');
|
||||||
|
embed.setFooter(this.client.user.username, this.client.user.avatarURL);
|
||||||
|
embed.setTimestamp();
|
||||||
|
return message.channel.createMessage({ embed });
|
||||||
|
}
|
||||||
|
if (['js', 'py', 'rb', 'ts', 'rs', 'go', 'cfam', 'csharp', 'swift', 'java', 'kt', 'asm'].includes(args[0].split('-')[1])) {
|
||||||
|
const account = await this.client.db.member.findOne({ userID: message.member.id });
|
||||||
|
if (!account) {
|
||||||
|
// eslint-disable-next-line new-cap
|
||||||
|
const newAccount = new this.client.db.member({
|
||||||
|
userID: message.member.id,
|
||||||
|
additional: {
|
||||||
|
langs: [args[0].split('-')[1]],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await newAccount.save();
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.SUCCESS} Added langauge code ${args[0]} to profile.***`);
|
||||||
|
}
|
||||||
|
await account.updateOne({ $addToSet: { 'additional.langs': args[0].split('-')[1] } });
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.SUCCESS} Added langauge code ${args[0]} to profile.***`);
|
||||||
|
}
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.ERROR} Invalid language code.***`);
|
||||||
|
} catch (err) {
|
||||||
|
return this.client.util.handleError(err, message, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
import { Message } from 'eris';
|
||||||
|
import { Client, Command, RichEmbed } from '../class';
|
||||||
|
|
||||||
|
export default class DelItem extends Command {
|
||||||
|
constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this.name = 'delitem';
|
||||||
|
this.description = 'Removes information to your whois embed.';
|
||||||
|
this.usage = 'delitem [code]';
|
||||||
|
this.permissions = 0;
|
||||||
|
this.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async run(message: Message, args: string[]) {
|
||||||
|
try {
|
||||||
|
if (args.length < 1) {
|
||||||
|
const embed = new RichEmbed();
|
||||||
|
embed.setTitle('Whois Data Codes');
|
||||||
|
embed.addField('Languages', '**Assembly Language:** lang-asm\n**C/C++:** lang-cfam\n**C#:** lang-csharp\n**Go:** lang-go\n**Java:** lang-java\n**JavaScript:** lang-js\n**Kotlin:** lang-kt\n**Python:** lang-py\n**Ruby:** lang-rb\n**Rust:** lang-rs\n**Swift:** lang-swift\n**TypeScript:** lang-ts');
|
||||||
|
embed.setFooter(this.client.user.username, this.client.user.avatarURL);
|
||||||
|
embed.setTimestamp();
|
||||||
|
return message.channel.createMessage({ embed });
|
||||||
|
}
|
||||||
|
if (['js', 'py', 'rb', 'ts', 'rs', 'go', 'cfam', 'csharp', 'swift', 'java', 'kt', 'asm'].includes(args[0].split('-')[1])) {
|
||||||
|
const account = await this.client.db.member.findOne({ userID: message.member.id });
|
||||||
|
if (!account || !account?.additional.langs || account?.additional.langs.length < 1) {
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.ERROR} You don't have any languages to remove.***`);
|
||||||
|
}
|
||||||
|
await account.updateOne({ $pull: { 'additional.langs': args[0].split('-')[1] } });
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.SUCCESS} Removed langauge code ${args[0]} to profile.***`);
|
||||||
|
}
|
||||||
|
return message.channel.createMessage(`***${this.client.util.emojis.ERROR} Invalid language code.***`);
|
||||||
|
} catch (err) {
|
||||||
|
return this.client.util.handleError(err, message, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,7 +15,7 @@ export default class Roleinfo extends Command {
|
||||||
|
|
||||||
public async run(message: Message, args: string[]) {
|
public async run(message: Message, args: string[]) {
|
||||||
try {
|
try {
|
||||||
if (!args[0]) return this.error(message.channel, 'You need to specifiy a role ID or a role name.');
|
if (!args[0]) return this.error(message.channel, 'You need to specify a role ID or a role name.');
|
||||||
|
|
||||||
let role: Role = this.client.guilds.get(this.client.config.guildID).roles.find((r: Role) => r.id === args[0]);
|
let role: Role = this.client.guilds.get(this.client.config.guildID).roles.find((r: Role) => r.id === args[0]);
|
||||||
if (!role) { // if it's a role name
|
if (!role) { // if it's a role name
|
||||||
|
|
|
@ -68,6 +68,15 @@ export default class Whois extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
embed.addField('Status', `${member.status[0].toUpperCase()}${member.status.slice(1)}`, true);
|
embed.addField('Status', `${member.status[0].toUpperCase()}${member.status.slice(1)}`, true);
|
||||||
|
if (member.bot) {
|
||||||
|
embed.addField('Platform', 'API/WebSocket', true);
|
||||||
|
} else if (member.clientStatus.web === 'online' || member.clientStatus.web === 'idle' || member.clientStatus.web === 'dnd') {
|
||||||
|
embed.addField('Platform', 'Web', true);
|
||||||
|
} else if (member.clientStatus.desktop === 'online' || member.clientStatus.desktop === 'idle' || member.clientStatus.desktop === 'dnd') {
|
||||||
|
embed.addField('Platform', 'Desktop', true);
|
||||||
|
} else if (member.clientStatus.mobile === 'online' || member.clientStatus.mobile === 'idle' || member.clientStatus.mobile === 'dnd') {
|
||||||
|
embed.addField('Platform', 'Mobile', true);
|
||||||
|
}
|
||||||
embed.addField('Joined At', `${moment(new Date(member.joinedAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
embed.addField('Joined At', `${moment(new Date(member.joinedAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
||||||
embed.addField('Created At', `${moment(new Date(member.user.createdAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
embed.addField('Created At', `${moment(new Date(member.user.createdAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true);
|
||||||
if (member.roles.length > 0) {
|
if (member.roles.length > 0) {
|
||||||
|
@ -86,6 +95,50 @@ export default class Whois extends Command {
|
||||||
if ((bit | 1073741824) === bit) permissions.push('Manage Emojis');
|
if ((bit | 1073741824) === bit) permissions.push('Manage Emojis');
|
||||||
if ((bit | 4) === bit) permissions.push('Ban Members');
|
if ((bit | 4) === bit) permissions.push('Ban Members');
|
||||||
if ((bit | 2) === bit) permissions.push('Kick Members');
|
if ((bit | 2) === bit) permissions.push('Kick Members');
|
||||||
|
const account = await this.client.db.member.findOne({ userID: member.id });
|
||||||
|
if (account?.additional?.langs.length > 0) {
|
||||||
|
const langs: string[] = [];
|
||||||
|
for (const lang of account.additional.langs) {
|
||||||
|
switch (lang) {
|
||||||
|
case 'asm':
|
||||||
|
langs.push('<:AssemblyLanguage:703448714248716442> Assembly Language');
|
||||||
|
break;
|
||||||
|
case 'cfam':
|
||||||
|
langs.push('<:clang:553684262193332278> C/C++');
|
||||||
|
break;
|
||||||
|
case 'go':
|
||||||
|
langs.push('<:Go:703449475405971466> Go');
|
||||||
|
break;
|
||||||
|
case 'java':
|
||||||
|
langs.push('<:Java:703449725181100135> Java');
|
||||||
|
break;
|
||||||
|
case 'js':
|
||||||
|
langs.push('<:JavaScriptECMA:703449987916496946> JavaScript');
|
||||||
|
break;
|
||||||
|
case 'kt':
|
||||||
|
langs.push('<:Kotlin:703450201838321684> Kotlin');
|
||||||
|
break;
|
||||||
|
case 'py':
|
||||||
|
langs.push('<:python:553682965482176513> Python');
|
||||||
|
break;
|
||||||
|
case 'rb':
|
||||||
|
langs.push('<:ruby:604812470451699712> Ruby');
|
||||||
|
break;
|
||||||
|
case 'rs':
|
||||||
|
langs.push('<:Rust:703450901960196206> Rust');
|
||||||
|
break;
|
||||||
|
case 'swift':
|
||||||
|
langs.push('<:Swift:703451096093294672> Swift');
|
||||||
|
break;
|
||||||
|
case 'ts':
|
||||||
|
langs.push('<:TypeScript:703451285789343774> TypeScript');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
embed.addField('Known Languages', langs.join(', '));
|
||||||
|
}
|
||||||
if (permissions.length > 0) {
|
if (permissions.length > 0) {
|
||||||
embed.addField('Permissions', permissions.join(', '));
|
embed.addField('Permissions', permissions.join(', '));
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,12 +97,19 @@
|
||||||
{
|
{
|
||||||
"name": "Hector",
|
"name": "Hector",
|
||||||
"id": "377781496292835339",
|
"id": "377781496292835339",
|
||||||
"title": "Core Team",
|
"title": "Associate",
|
||||||
"emailAddress": "hector@staff.libraryofcode.org",
|
"emailAddress": "hector@staff.libraryofcode.org",
|
||||||
"gitlab": "https://gitlab.libraryofcode.org/Hector",
|
"gitlab": "https://gitlab.libraryofcode.org/Hector",
|
||||||
"github": "https://github.com/Hector6704",
|
"github": "https://github.com/Hector6704",
|
||||||
"bio": "Hi there, I'm the developer of Delta, the Discord bot. I'm a free-time French JavaScript developer. I hope you'll enjoy LOC!"
|
"bio": "Hi there, I'm the developer of Delta, the Discord bot. I'm a free-time French JavaScript developer. I hope you'll enjoy LOC!"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Realitus",
|
||||||
|
"id": "156450671338586112",
|
||||||
|
"title": "Associate",
|
||||||
|
"github": "https://github.com/Realitus",
|
||||||
|
"bio": "A hobbyist software developer with some rather strange ideas, and even stranger implementations."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "KhaaZ",
|
"name": "KhaaZ",
|
||||||
"id": "179908288337412096",
|
"id": "179908288337412096",
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { Document, Schema, model } from 'mongoose';
|
||||||
|
|
||||||
|
export interface MemberInterface extends Document {
|
||||||
|
userID: string
|
||||||
|
additional: {
|
||||||
|
langs: ['js', 'py', 'rb', 'ts', 'rs', 'go', 'cfam', 'csharp', 'swift', 'java', 'kt', 'asm'],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const Member: Schema = new Schema({
|
||||||
|
userID: String,
|
||||||
|
additional: {
|
||||||
|
langs: Array,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default model<MemberInterface>('Member', Member);
|
|
@ -1 +1,2 @@
|
||||||
|
export { default as Member, MemberInterface } from './Member';
|
||||||
export { default as Moderation, ModerationInterface } from './Moderation';
|
export { default as Moderation, ModerationInterface } from './Moderation';
|
||||||
|
|
Loading…
Reference in New Issue