child command
This commit is contained in:
parent
e67713ad97
commit
9a69d15a1e
57
src/index.ts
57
src/index.ts
|
@ -11,6 +11,7 @@ config();
|
||||||
type Db = {
|
type Db = {
|
||||||
probation: string[];
|
probation: string[];
|
||||||
blocked: { [key: string]: { blocked: boolean, kick: boolean } };
|
blocked: { [key: string]: { blocked: boolean, kick: boolean } };
|
||||||
|
children: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
type CommandFlag = {
|
type CommandFlag = {
|
||||||
|
@ -36,7 +37,7 @@ const CommandFlags: CommandFlag[] = [
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const PREFIX_WORD = '/kibby';
|
const PREFIX_WORD = process.env.PREFIX_WORD || '/kibby';
|
||||||
const RE_COMMAND_ARGS = /(?<!\\)"[^(?<!\\)"\n]*"|[\S]+/g;
|
const RE_COMMAND_ARGS = /(?<!\\)"[^(?<!\\)"\n]*"|[\S]+/g;
|
||||||
const RE_COMMAND_ARG_QUOTED = /^".*(?<!\\)"$/g;
|
const RE_COMMAND_ARG_QUOTED = /^".*(?<!\\)"$/g;
|
||||||
const RE_QUOTE_BACKSLASH = /\\"/g;
|
const RE_QUOTE_BACKSLASH = /\\"/g;
|
||||||
|
@ -55,6 +56,8 @@ const COMMANDS = {
|
||||||
'unapprove': 'Send users to probation',
|
'unapprove': 'Send users to probation',
|
||||||
'block': 'Troll a user',
|
'block': 'Troll a user',
|
||||||
'unblock': 'Untroll a user',
|
'unblock': 'Untroll a user',
|
||||||
|
'child': 'Mark a user as child',
|
||||||
|
'notchild': 'Remove user\'s child status',
|
||||||
'sherlock': 'Run a sherlock scan on a username',
|
'sherlock': 'Run a sherlock scan on a username',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,9 +71,10 @@ const client = new Client({ });
|
||||||
client.loginBot(process.env.TOKEN);
|
client.loginBot(process.env.TOKEN);
|
||||||
|
|
||||||
db.read().then(() => {
|
db.read().then(() => {
|
||||||
db.data ||= { probation: [], blocked: {} };
|
db.data ||= { probation: [], blocked: {}, children: [] };
|
||||||
db.data.probation ||= [];
|
db.data.probation ||= [];
|
||||||
db.data.blocked ||= {};
|
db.data.blocked ||= {};
|
||||||
|
db.data.children ||= [];
|
||||||
|
|
||||||
if (Array.isArray(db.data.blocked)) {
|
if (Array.isArray(db.data.blocked)) {
|
||||||
console.log('Running migration: db.blocked');
|
console.log('Running migration: db.blocked');
|
||||||
|
@ -252,6 +256,21 @@ const setProbation = async (member: Member, probation: boolean) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const setChild = async (member: Member, child: boolean) => {
|
||||||
|
if (child) {
|
||||||
|
if (member.roles?.includes(process.env.NSFW_ROLE!)) {
|
||||||
|
await member?.edit({ roles: member.roles.filter(r => r != process.env.NSFW_ROLE) });
|
||||||
|
}
|
||||||
|
if (!db.data?.children.includes(member._id.user)) {
|
||||||
|
db.data?.children.push(member._id.user);
|
||||||
|
await db.write();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (db.data?.children.includes(member._id.user)) db.data.children = db.data.children.filter((id) => id != member._id.user);
|
||||||
|
await db.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
client.on('message', async (message) => {
|
client.on('message', async (message) => {
|
||||||
try {
|
try {
|
||||||
if (!message.content || typeof message.content != 'string') return;
|
if (!message.content || typeof message.content != 'string') return;
|
||||||
|
@ -508,6 +527,40 @@ client.on('message', async (message) => {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'child': {
|
||||||
|
const members = getMembers(message.channel!.server_id);
|
||||||
|
const users = await extractUsers(message, args);
|
||||||
|
if (!users) return message.reply({ embeds: [
|
||||||
|
embed("No users provided", undefined, "ERROR"),
|
||||||
|
] });
|
||||||
|
for (const user of users) {
|
||||||
|
const member = members.find(m => m._id.user == user._id);
|
||||||
|
await setChild(member!, true);
|
||||||
|
}
|
||||||
|
await message.reply({ embeds: [
|
||||||
|
embed(`The selected user${users.length != 1 ? 's' : ''} have been marked as child.`),
|
||||||
|
] });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'adult':
|
||||||
|
case 'unchild':
|
||||||
|
case 'notchild': {
|
||||||
|
const members = getMembers(message.channel!.server_id);
|
||||||
|
const users = await extractUsers(message, args);
|
||||||
|
if (!users) return message.reply({ embeds: [
|
||||||
|
embed("No users provided", undefined, "ERROR"),
|
||||||
|
] });
|
||||||
|
for (const user of users) {
|
||||||
|
const member = members.find(m => m._id.user == user._id);
|
||||||
|
await setChild(member!, false);
|
||||||
|
}
|
||||||
|
await message.reply({ embeds: [
|
||||||
|
embed(`The selected user${users.length != 1 ? 's' : ''} have been removed from the child list.`),
|
||||||
|
] });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'type': {
|
case 'type': {
|
||||||
if (message.channel?.typing_ids.has(client.user!._id)) {
|
if (message.channel?.typing_ids.has(client.user!._id)) {
|
||||||
message.channel.stopTyping();
|
message.channel.stopTyping();
|
||||||
|
|
Loading…
Reference in a new issue