tree-wide: await all the await-able functions
This commit is contained in:
parent
10f80bf1bc
commit
0c3a42e5c7
|
@ -26,9 +26,9 @@ console.info('Generating module loader ...');
|
||||||
let modules = collectModules('commands', '.ts');
|
let modules = collectModules('commands', '.ts');
|
||||||
let loader_content = header;
|
let loader_content = header;
|
||||||
for (let mod of modules) {
|
for (let mod of modules) {
|
||||||
loader_content += `import * as ${mod} from "./${mod}";\n`;
|
loader_content += `import * as ${mod} from './${mod}';\n`;
|
||||||
}
|
}
|
||||||
let loader_map = modules.map((moduleName) => `${moduleName.toLowerCase()}: ${moduleName}`).join(', ');
|
let loader_map = modules.map((moduleName) => moduleName.toLowerCase() === moduleName ? moduleName : `${moduleName.toLowerCase()}: ${moduleName}`).join(', ');
|
||||||
loader_content += `\nexport default { ${loader_map} };\n`;
|
loader_content += `\nexport default { ${loader_map} };\n`;
|
||||||
fs.writeFileSync("./src/commands/_.ts", loader_content);
|
fs.writeFileSync("./src/commands/_.ts", loader_content);
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ import { ban } from '../common';
|
||||||
import * as discord from 'discord.js';
|
import * as discord from 'discord.js';
|
||||||
|
|
||||||
export const roles = ['Admins', 'Moderators', 'CitraBot'];
|
export const roles = ['Admins', 'Moderators', 'CitraBot'];
|
||||||
export function command (message: discord.Message) {
|
export async function command (message: discord.Message) {
|
||||||
message.mentions.users.map(async (user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
await ban(user, message.author, message.guild);
|
await ban(user, message.author, message.guild);
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@ import logger from '../logging';
|
||||||
import * as discord from 'discord.js';
|
import * as discord from 'discord.js';
|
||||||
|
|
||||||
export const roles = ['Admins', 'Moderators'];
|
export const roles = ['Admins', 'Moderators'];
|
||||||
export function command (message: discord.Message) {
|
export async function command (message: discord.Message) {
|
||||||
message.mentions.users.map(async (user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
const count = state.warnings.filter(x => x.id === user.id && !x.cleared);
|
const count = state.warnings.filter(x => x.id === user.id && !x.cleared);
|
||||||
if (count != null && count.length > 0) {
|
if (count != null && count.length > 0) {
|
||||||
count.forEach(warning => { warning.cleared = true; });
|
count.forEach(warning => { warning.cleared = true; });
|
||||||
|
@ -15,7 +15,7 @@ export function command (message: discord.Message) {
|
||||||
await message.channel.send(`${user.toString()}, you have no warnings to clear.`);
|
await message.channel.send(`${user.toString()}, you have no warnings to clear.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(`${message.author.username} has cleared all warnings for ${user} ${user.username} [${count?.length}].`);
|
logger.info(`${message.author.username} has cleared all warnings for ${user.toString()} ${user.username} [${count?.length}].`);
|
||||||
await state.logChannel?.send(`${message.author.toString()} has cleared all warnings for ${user.toString()} [${count?.length}].`);
|
await state.logChannel?.send(`${message.author.toString()} has cleared all warnings for ${user.toString()} [${count?.length}].`);
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ export async function command(message: discord.Message) {
|
||||||
throw e;
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
// We don't need this message anymore
|
// We don't need this message anymore
|
||||||
waitMessage.then(async waitMessageResult => await waitMessageResult.delete());
|
await waitMessage.then(async waitMessageResult => await waitMessageResult.delete());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,16 @@ import logger from '../logging';
|
||||||
import * as discord from 'discord.js';
|
import * as discord from 'discord.js';
|
||||||
|
|
||||||
export const roles = ['Admins', 'Moderators', 'CitraBot'];
|
export const roles = ['Admins', 'Moderators', 'CitraBot'];
|
||||||
export function command (message: discord.Message) {
|
export async function command (message: discord.Message) {
|
||||||
const role = process.env.DISCORD_DEVELOPER_ROLE;
|
const role = process.env.DISCORD_DEVELOPER_ROLE;
|
||||||
|
|
||||||
if (!role) {
|
if (!role) {
|
||||||
logger.error('DISCORD_DEVELOPER_ROLE suddenly became undefined?!');
|
logger.error('DISCORD_DEVELOPER_ROLE suddenly became undefined?!');
|
||||||
return;
|
return Promise.resolve([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
message.mentions.users.map((user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
message.guild?.members.fetch(user).then((member) => {
|
return message.guild?.members.fetch(user).then((member) => {
|
||||||
const alreadyJoined = member.roles.cache.has(role);
|
const alreadyJoined = member.roles.cache.has(role);
|
||||||
|
|
||||||
if (alreadyJoined) {
|
if (alreadyJoined) {
|
||||||
|
@ -20,18 +20,18 @@ export function command (message: discord.Message) {
|
||||||
await message.channel.send(`${user.toString()}'s speech has been revoked in the #development channel.`);
|
await message.channel.send(`${user.toString()}'s speech has been revoked in the #development channel.`);
|
||||||
}).catch(async () => {
|
}).catch(async () => {
|
||||||
await state.logChannel?.send(`Error revoking ${user.toString()}'s developer speech...`);
|
await state.logChannel?.send(`Error revoking ${user.toString()}'s developer speech...`);
|
||||||
logger.error(`Error revoking ${user} ${user.username}'s developer speech...`);
|
logger.error(`Error revoking ${user.toString()} ${user.username}'s developer speech...`);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
member.roles.add(role).then(async () => {
|
member.roles.add(role).then(async () => {
|
||||||
await message.channel.send(`${user.toString()} has been granted speech in the #development channel.`);
|
await message.channel.send(`${user.toString()} has been granted speech in the #development channel.`);
|
||||||
}).catch(async () => {
|
}).catch(async () => {
|
||||||
await state.logChannel?.send(`Error granting ${user.toString()}'s developer speech...`);
|
await state.logChannel?.send(`Error granting ${user.toString()}'s developer speech...`);
|
||||||
logger.error(`Error granting ${user} ${user.username}'s developer speech...`);
|
logger.error(`Error granting ${user.toString()} ${user.username}'s developer speech...`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).catch(async () => {
|
}).catch(async () => {
|
||||||
await message.channel.send(`User ${user.toString()} was not found in the channel.`);
|
await message.channel.send(`User ${user.toString()} was not found in the channel.`);
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,15 +6,15 @@ import * as discord from 'discord.js';
|
||||||
export const roles = ['Admins', 'Moderators'];
|
export const roles = ['Admins', 'Moderators'];
|
||||||
|
|
||||||
function formatWarnings (warnings: UserWarning[]) {
|
function formatWarnings (warnings: UserWarning[]) {
|
||||||
return warnings.map(x => `[${x.date}] ${x.warnedByUsername} warned ${x.username} [${x.priorWarnings} + 1]. ${x.silent ? '(silent)' : ''} ${x.cleared ? '(cleared)' : ''}`);
|
return warnings.map(x => `[${x.date.toISOString()}] ${x.warnedByUsername} warned ${x.username} [${x.priorWarnings} + 1]. ${x.silent ? '(silent)' : ''} ${x.cleared ? '(cleared)' : ''}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatBans (bans: UserBan[]) {
|
function formatBans (bans: UserBan[]) {
|
||||||
return bans.map(x => `[${x.date}] ${x.warnedByUsername} banned ${x.username} [${x.priorWarnings} + 1].`);
|
return bans.map(x => `[${x.date.toISOString()}] ${x.warnedByUsername} banned ${x.username} [${x.priorWarnings} + 1].`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function command (message: discord.Message) {
|
export async function command (message: discord.Message) {
|
||||||
message.mentions.users.map(async (user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
const totalWarnings = state.warnings.filter(x => x.id === user.id && x.cleared === false).length;
|
const totalWarnings = state.warnings.filter(x => x.id === user.id && x.cleared === false).length;
|
||||||
const warns = state.warnings.filter(x => x.id === user.id);
|
const warns = state.warnings.filter(x => x.id === user.id);
|
||||||
const bans = state.bans.filter(x => x.id === user.id);
|
const bans = state.bans.filter(x => x.id === user.id);
|
||||||
|
@ -23,5 +23,5 @@ export async function command (message: discord.Message) {
|
||||||
const bansString = `Bans: \`\`\`${formatBans(bans).join('\n')}\`\`\``;
|
const bansString = `Bans: \`\`\`${formatBans(bans).join('\n')}\`\`\``;
|
||||||
|
|
||||||
await message.channel.send(`\`${user.username} (${totalWarnings}) information:\`${warns.length !== 0 ? warnsString : '\n<No warnings>\n'}${bans.length !== 0 ? bansString : '<Not banned>'}`);
|
await message.channel.send(`\`${user.username} (${totalWarnings}) information:\`${warns.length !== 0 ? warnsString : '\n<No warnings>\n'}${bans.length !== 0 ? bansString : '<Not banned>'}`);
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ export async function command (message: discord.Message, reply: string | undefin
|
||||||
if (reply == null) {
|
if (reply == null) {
|
||||||
replyMessage = message.content.substr(message.content.indexOf(' ') + 1);
|
replyMessage = message.content.substr(message.content.indexOf(' ') + 1);
|
||||||
} else {
|
} else {
|
||||||
replyMessage = `${message.mentions.users.map(user => `${user.toString()}`)} ${reply}`;
|
replyMessage = `${message.mentions.users.map(user => `${user.toString()}`).join(' ')} ${reply}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
await message.channel.send(replyMessage);
|
await message.channel.send(replyMessage);
|
||||||
|
|
|
@ -7,16 +7,16 @@ const fetchOptions = {
|
||||||
const repo = process.env.GITHUB_REPOSITORY || 'citra-emu/citra';
|
const repo = process.env.GITHUB_REPOSITORY || 'citra-emu/citra';
|
||||||
|
|
||||||
export const roles = ['Admins', 'Moderators', 'Developer'];
|
export const roles = ['Admins', 'Moderators', 'Developer'];
|
||||||
export function command(message: discord.Message) {
|
export async function command(message: discord.Message) {
|
||||||
const pr_number = message.content.substr(message.content.indexOf(' ') + 1).replace(/\n/g, '');
|
const prNumber = message.content.substr(message.content.indexOf(' ') + 1).replace(/\n/g, '');
|
||||||
const url = `https://api.github.com/repos/${repo}/pulls/${pr_number}`;
|
const url = `https://api.github.com/repos/${repo}/pulls/${prNumber}`;
|
||||||
fetch(url, fetchOptions).then(response => response.json()).then((pr: any) => {
|
return fetch(url, fetchOptions).then(response => response.json()).then((pr: any) => {
|
||||||
if (!pr || pr.documentation_url || !pr.head) throw new Error('PR not found');
|
if (!pr || pr.documentation_url || !pr.head) throw new Error('PR not found');
|
||||||
const headSHA = pr.head.sha;
|
const headSHA = pr.head.sha;
|
||||||
// use the new GitHub checks API
|
// use the new GitHub checks API
|
||||||
fetch(`https://api.github.com/repos/${repo}/commits/${headSHA}/check-runs`, fetchOptions).then(response => response.json()).then(async (statuses: any) => {
|
fetch(`https://api.github.com/repos/${repo}/commits/${headSHA}/check-runs`, fetchOptions).then(response => response.json()).then(async (statuses: any) => {
|
||||||
if (!statuses.check_runs || statuses.total_count < 1) throw new Error('No check runs');
|
if (!statuses.check_runs || statuses.total_count < 1) throw new Error('No check runs');
|
||||||
const msg = new discord.EmbedBuilder().setTitle(`Status for PR #${pr_number}`).setURL(pr.html_url);
|
const msg = new discord.EmbedBuilder().setTitle(`Status for PR #${prNumber}`).setURL(pr.html_url);
|
||||||
let color = 'GREEN' as discord.ColorResolvable;
|
let color = 'GREEN' as discord.ColorResolvable;
|
||||||
statuses.check_runs.forEach((run: any) => {
|
statuses.check_runs.forEach((run: any) => {
|
||||||
msg.addFields({ name: run.name, value: `**[${run.status} ${run.conclusion}](${run.html_url})**` });
|
msg.addFields({ name: run.name, value: `**[${run.status} ${run.conclusion}](${run.html_url})**` });
|
||||||
|
|
|
@ -5,13 +5,13 @@ import UserWarning from '../models/UserWarning';
|
||||||
import * as discord from 'discord.js';
|
import * as discord from 'discord.js';
|
||||||
|
|
||||||
export const roles = ['Admins', 'Moderators'];
|
export const roles = ['Admins', 'Moderators'];
|
||||||
export function command(message: discord.Message) {
|
export async function command(message: discord.Message) {
|
||||||
const silent = message.content.includes('silent');
|
const silent = message.content.includes('silent');
|
||||||
|
|
||||||
message.mentions.users.map(async (user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
const count = state.warnings.filter(x => x.id === user.id && !x.cleared).length || 0;
|
const count = state.warnings.filter(x => x.id === user.id && !x.cleared).length || 0;
|
||||||
|
|
||||||
if (silent === false) {
|
if (!silent) {
|
||||||
await message.channel.send(`${user.toString()} You have been warned. Additional infractions may result in a ban.`);
|
await message.channel.send(`${user.toString()} You have been warned. Additional infractions may result in a ban.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,5 +20,5 @@ export function command(message: discord.Message) {
|
||||||
|
|
||||||
state.warnings.push(new UserWarning(user.id, user.username, message.author.id, message.author.username, count, silent));
|
state.warnings.push(new UserWarning(user.id, user.username, message.author.id, message.author.username, count, silent));
|
||||||
data.flushWarnings();
|
data.flushWarnings();
|
||||||
});
|
}));
|
||||||
};
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import state from '../state';
|
import state from '../state';
|
||||||
import * as discord from 'discord.js';
|
import * as discord from 'discord.js';
|
||||||
|
|
||||||
export function command(message: discord.Message) {
|
export async function command(message: discord.Message) {
|
||||||
message.mentions.users.map(async (user) => {
|
return Promise.all(message.mentions.users.map(async (user) => {
|
||||||
const warnings = state.warnings.filter(x => x.id === user.id && !x.cleared);
|
const warnings = state.warnings.filter(x => x.id === user.id && !x.cleared);
|
||||||
await message.channel.send(`${user.toString()}, you have ${warnings.length} total warnings.`);
|
await message.channel.send(`${user.toString()}, you have ${warnings.length} total warnings.`);
|
||||||
});
|
}));
|
||||||
};
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ export interface IResponses {
|
||||||
|
|
||||||
export interface IModule {
|
export interface IModule {
|
||||||
readonly roles?: string[],
|
readonly roles?: string[],
|
||||||
command: (message: Message, args?: string) => void | Promise<void>
|
command: (message: Message, args?: string) => Promise<void> | Promise<void[]>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITrigger {
|
export interface ITrigger {
|
||||||
|
|
|
@ -31,8 +31,8 @@ if (!rulesRole) {
|
||||||
throw new Error('DISCORD_RULES_ROLE somehow became undefined.');
|
throw new Error('DISCORD_RULES_ROLE somehow became undefined.');
|
||||||
}
|
}
|
||||||
|
|
||||||
function findArray(haystack: string | any[], arr: any[]) {
|
function findArray(haystack: string | string[], arr: string[]) {
|
||||||
return arr.some((v: any) => haystack.indexOf(v) >= 0);
|
return arr.some((v: string) => haystack.indexOf(v) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function IsIgnoredCategory(categoryName: string) {
|
function IsIgnoredCategory(categoryName: string) {
|
||||||
|
@ -158,7 +158,7 @@ client.on('messageCreate', async (message) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!findArray(authorRoles, AllowedMediaRoles)) {
|
if (!findArray(authorRoles, AllowedMediaRoles)) {
|
||||||
const urlRegex = new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_+.~#?&\/=]*)/gi);
|
const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)/gi;
|
||||||
if (message.attachments.size > 0 || message.content.match(urlRegex)) {
|
if (message.attachments.size > 0 || message.content.match(urlRegex)) {
|
||||||
mediaUsers.set(message.author.id, true);
|
mediaUsers.set(message.author.id, true);
|
||||||
} else if (mediaUsers.get(message.author.id)) {
|
} else if (mediaUsers.get(message.author.id)) {
|
||||||
|
@ -214,16 +214,18 @@ client.on('messageCreate', async (message) => {
|
||||||
} catch (err) { logger.error(err); }
|
} catch (err) { logger.error(err); }
|
||||||
} else if (message.author.bot === false) {
|
} else if (message.author.bot === false) {
|
||||||
// This is a normal channel message.
|
// This is a normal channel message.
|
||||||
cachedTriggers.forEach(async function (trigger) {
|
await Promise.all(
|
||||||
if (!trigger.roles || authorRoles && findArray(authorRoles, trigger.roles)) {
|
cachedTriggers.map(async function (trigger) {
|
||||||
if (trigger.trigger(message) === true) {
|
if (!trigger.roles || (authorRoles && findArray(authorRoles, trigger.roles))) {
|
||||||
|
if (trigger.trigger(message)) {
|
||||||
logger.debug(`${message.author.username} ${message.author} [Channel: ${message.channel}] triggered: ${message.content}`);
|
logger.debug(`${message.author.username} ${message.author} [Channel: ${message.channel}] triggered: ${message.content}`);
|
||||||
try {
|
try {
|
||||||
await trigger.execute(message);
|
await trigger.execute(message);
|
||||||
} catch (err) { logger.error(err); }
|
} catch (err) { logger.error(err); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,6 @@ export function trigger (message: discord.Message) {
|
||||||
export async function execute (message: discord.Message) {
|
export async function execute (message: discord.Message) {
|
||||||
const count = message.mentions.users.size;
|
const count = message.mentions.users.size;
|
||||||
logger.info(`${message.author.toString()} tagged ${count} users in ${message.channel.toString()}`);
|
logger.info(`${message.author.toString()} tagged ${count} users in ${message.channel.toString()}`);
|
||||||
state.logChannel?.send(`Ping bomb detected in ${message.channel.toString()} by ${message.author.toString()}`);
|
await state.logChannel?.send(`Ping bomb detected in ${message.channel.toString()} by ${message.author.toString()}`);
|
||||||
await ban(message.author, message.author, message.guild);
|
await ban(message.author, message.author, message.guild);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue