aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commands/config/autoPublishChannel.ts2
-rw-r--r--src/commands/config/joinRoles.ts19
-rw-r--r--src/commands/info/guildInfo.ts6
-rw-r--r--src/commands/info/pronouns.ts5
-rw-r--r--src/commands/info/snowflakeInfo.ts4
-rw-r--r--src/commands/info/userInfo.ts6
-rw-r--r--src/commands/moderation/removeReactionEmoji.ts8
-rw-r--r--src/commands/utilities/calculator.ts3
-rw-r--r--src/commands/utilities/wolframAlpha.ts59
-rw-r--r--src/config/example-options.ts3
-rw-r--r--src/context-menu-commands/user/userInfo.ts1
-rw-r--r--src/lib/extensions/discord-akairo/BushClientUtil.ts3
-rw-r--r--src/lib/utils/Config.ts4
-rw-r--r--src/listeners/guild/guildCreate.ts2
-rw-r--r--src/listeners/guild/guildDelete.ts2
-rw-r--r--src/listeners/guild/guildMemberAdd.ts4
-rw-r--r--src/listeners/message/supportThreads.ts5
17 files changed, 98 insertions, 38 deletions
diff --git a/src/commands/config/autoPublishChannel.ts b/src/commands/config/autoPublishChannel.ts
index 10c4ab6..a58f32f 100644
--- a/src/commands/config/autoPublishChannel.ts
+++ b/src/commands/config/autoPublishChannel.ts
@@ -51,7 +51,7 @@ export default class AutoPublishChannelCommand extends BushCommand {
client.logger.debugRaw(autoPublishChannels.includes(channel.id));
return await message.util.reply({
content: `${util.emojis.success} Successfully ${
- autoPublishChannels.includes(channel.id) ? 'disabled' : 'enabled'
+ autoPublishChannels.includes(channel.id) ? 'enabled' : 'disabled'
} auto publishing in <#${channel.id}>.`,
allowedMentions: AllowedMentions.none()
});
diff --git a/src/commands/config/joinRoles.ts b/src/commands/config/joinRoles.ts
index ee2ce75..89a2421 100644
--- a/src/commands/config/joinRoles.ts
+++ b/src/commands/config/joinRoles.ts
@@ -1,5 +1,5 @@
import { AllowedMentions, BushCommand, BushMessage, BushSlashMessage } from '@lib';
-import { Channel } from 'discord.js';
+import { Role } from 'discord.js';
export default class JoinRolesCommand extends BushCommand {
public constructor() {
@@ -36,18 +36,15 @@ export default class JoinRolesCommand extends BushCommand {
userPermissions: ['SEND_MESSAGES', 'MANAGE_GUILD']
});
}
- public override async exec(message: BushMessage | BushSlashMessage, { channel }: { channel: Channel }): Promise<unknown> {
- const autoPublishChannels = await message.guild!.getSetting('joinRoles');
- const newValue = util.addOrRemoveFromArray(
- autoPublishChannels.includes(channel.id) ? 'remove' : 'add',
- autoPublishChannels,
- channel.id
- );
+
+ public override async exec(message: BushMessage | BushSlashMessage, { role }: { role: Role }): Promise<unknown> {
+ const joinRoles = await message.guild!.getSetting('joinRoles');
+ const newValue = util.addOrRemoveFromArray(joinRoles.includes(role.id) ? 'remove' : 'add', joinRoles, role.id);
await message.guild!.setSetting('joinRoles', newValue);
return await message.util.reply({
- content: `${util.emojis.success} Successfully ${
- autoPublishChannels.includes(channel.id) ? 'disabled' : 'enabled'
- } auto publishing in <#${channel.id}>.`,
+ content: `${util.emojis.success} Successfully ${joinRoles.includes(role.id) ? 'removed' : 'added'} <@&${
+ role.id
+ }> from being assigned to members when they join the server.`,
allowedMentions: AllowedMentions.none()
});
}
diff --git a/src/commands/info/guildInfo.ts b/src/commands/info/guildInfo.ts
index 431b8bd..0aa5fc0 100644
--- a/src/commands/info/guildInfo.ts
+++ b/src/commands/info/guildInfo.ts
@@ -14,7 +14,7 @@ export default class GuildInfoCommand extends BushCommand {
args: [
{
id: 'guild',
- customType: util.arg.union('guild', 'bigint'),
+ customType: util.arg.union('guild', 'snowflake'),
prompt: {
start: 'What server would you like to find information about?',
retry: '{error} Choose a valid server to find information about.',
@@ -38,7 +38,7 @@ export default class GuildInfoCommand extends BushCommand {
public override async exec(
message: BushMessage | BushSlashMessage,
- args: { guild: Guild | bigint | GuildPreview }
+ args: { guild: Guild | Snowflake | GuildPreview }
): Promise<unknown> {
if (!args?.guild && !message.guild) {
return await message.util.reply(
@@ -46,7 +46,7 @@ export default class GuildInfoCommand extends BushCommand {
);
}
let isPreview = false;
- if (['bigint', 'number', 'string'].includes(typeof args?.guild)) {
+ if (['number', 'string'].includes(typeof args?.guild)) {
const preview = await client.fetchGuildPreview(`${args.guild}` as Snowflake).catch(() => {});
if (preview) {
args.guild = preview;
diff --git a/src/commands/info/pronouns.ts b/src/commands/info/pronouns.ts
index 96040c0..ea20d41 100644
--- a/src/commands/info/pronouns.ts
+++ b/src/commands/info/pronouns.ts
@@ -1,4 +1,5 @@
import { BushCommand, BushMessage, BushSlashMessage } from '@lib';
+import { Snowflake } from 'discord-api-types';
import { MessageEmbed, User } from 'discord.js';
import got, { HTTPError } from 'got';
@@ -40,7 +41,7 @@ export default class PronounsCommand extends BushCommand {
args: [
{
id: 'user',
- customType: util.arg.union('user', 'bigint'),
+ customType: util.arg.union('user', 'snowflake'),
prompt: {
start: 'Who would you like to view the pronouns of?',
retry: '{error} Choose a valid user to view the pronouns of.',
@@ -60,7 +61,7 @@ export default class PronounsCommand extends BushCommand {
slash: true
});
}
- override async exec(message: BushMessage | BushSlashMessage, args: { user?: User | string }): Promise<unknown> {
+ override async exec(message: BushMessage | BushSlashMessage, args: { user?: User | Snowflake }): Promise<unknown> {
const user =
args?.user === undefined || args?.user === null
? message.author
diff --git a/src/commands/info/snowflakeInfo.ts b/src/commands/info/snowflakeInfo.ts
index 02c8d39..603993a 100644
--- a/src/commands/info/snowflakeInfo.ts
+++ b/src/commands/info/snowflakeInfo.ts
@@ -32,7 +32,7 @@ export default class SnowflakeInfoCommand extends BushCommand {
args: [
{
id: 'snowflake',
- type: 'bigint',
+ type: 'snowflake',
prompt: {
start: 'Enter the snowflake you would like to get information about.',
retry: '{error} Choose a valid snowflake.',
@@ -52,7 +52,7 @@ export default class SnowflakeInfoCommand extends BushCommand {
]
});
}
- public override async exec(message: BushMessage | BushSlashMessage, args: { snowflake: bigint }): Promise<unknown> {
+ public override async exec(message: BushMessage | BushSlashMessage, args: { snowflake: Snowflake }): Promise<unknown> {
const snowflake = `${args.snowflake}` as Snowflake;
const snowflakeEmbed = new MessageEmbed().setTitle('Unknown :snowflake:').setColor(util.colors.default);
diff --git a/src/commands/info/userInfo.ts b/src/commands/info/userInfo.ts
index 7b8d7d8..ae204f7 100644
--- a/src/commands/info/userInfo.ts
+++ b/src/commands/info/userInfo.ts
@@ -1,5 +1,5 @@
import { BushCommand, BushMessage, BushSlashMessage, BushUser } from '@lib';
-import { MessageEmbed } from 'discord.js';
+import { MessageEmbed, Snowflake } from 'discord.js';
// TODO: Add bot information
export default class UserInfoCommand extends BushCommand {
@@ -15,7 +15,7 @@ export default class UserInfoCommand extends BushCommand {
args: [
{
id: 'user',
- customType: util.arg.union('user', 'bigint'),
+ customType: util.arg.union('user', 'snowflake'),
prompt: {
start: 'What user would you like to find information about?',
retry: '{error} Choose a valid user to find information about.',
@@ -38,7 +38,7 @@ export default class UserInfoCommand extends BushCommand {
});
}
- public override async exec(message: BushMessage | BushSlashMessage, args: { user: BushUser | bigint }): Promise<unknown> {
+ public override async exec(message: BushMessage | BushSlashMessage, args: { user: BushUser | Snowflake }): Promise<unknown> {
const user =
args?.user === undefined || args?.user === null
? message.author
diff --git a/src/commands/moderation/removeReactionEmoji.ts b/src/commands/moderation/removeReactionEmoji.ts
index 4dfd074..34073e6 100644
--- a/src/commands/moderation/removeReactionEmoji.ts
+++ b/src/commands/moderation/removeReactionEmoji.ts
@@ -1,5 +1,5 @@
import { BushCommand, BushMessage } from '@lib';
-import { Emoji } from 'discord.js';
+import { Emoji, Snowflake } from 'discord.js';
export default class RemoveReactionEmojiCommand extends BushCommand {
public constructor() {
@@ -24,7 +24,7 @@ export default class RemoveReactionEmojiCommand extends BushCommand {
},
{
id: 'emoji',
- customType: util.arg.union('emoji', 'bigint'),
+ customType: util.arg.union('emoji', 'snowflake'),
match: 'restContent',
prompt: {
start: 'What emoji would you like to remove?',
@@ -38,9 +38,9 @@ export default class RemoveReactionEmojiCommand extends BushCommand {
public override async exec(
message: BushMessage,
- { messageToRemoveFrom, emoji }: { messageToRemoveFrom: BushMessage; emoji: Emoji | BigInt }
+ { messageToRemoveFrom, emoji }: { messageToRemoveFrom: BushMessage; emoji: Emoji | Snowflake }
): Promise<unknown> {
- const id = !['bigint', 'string'].includes(typeof emoji);
+ const id = !['string'].includes(typeof emoji);
const emojiID = !id ? `${emoji}` : (emoji as Emoji).id;
const success = await messageToRemoveFrom.reactions.cache
?.get(emojiID!)
diff --git a/src/commands/utilities/calculator.ts b/src/commands/utilities/calculator.ts
index d845aaa..a2c91e4 100644
--- a/src/commands/utilities/calculator.ts
+++ b/src/commands/utilities/calculator.ts
@@ -10,7 +10,7 @@ export default class CalculatorCommand extends BushCommand {
description: {
content: 'Calculates math expressions.',
usage: 'calculator <expression>',
- examples: ['calculator ']
+ examples: ['calculator 9+10']
},
args: [
{
@@ -33,7 +33,6 @@ export default class CalculatorCommand extends BushCommand {
required: true
}
],
- hidden: true,
clientPermissions: ['SEND_MESSAGES'],
userPermissions: ['SEND_MESSAGES']
});
diff --git a/src/commands/utilities/wolframAlpha.ts b/src/commands/utilities/wolframAlpha.ts
new file mode 100644
index 0000000..c18646c
--- /dev/null
+++ b/src/commands/utilities/wolframAlpha.ts
@@ -0,0 +1,59 @@
+import { AllowedMentions, BushCommand, BushMessage, BushSlashMessage } from '@lib';
+import { MessageEmbed } from 'discord.js';
+// @ts-expect-error: no types :(
+import WolframAlphaAPI from 'wolfram-alpha-api';
+
+export default class WolframAlphaCommand extends BushCommand {
+ public constructor() {
+ super('wolframAlpha', {
+ aliases: ['wolframalpha', 'wolfram', 'alpha', 'wolf', 'wa'],
+ category: 'utilities',
+ description: {
+ content: 'Queries Wolfram|Alpha for a result.',
+ usage: 'wolframalpha <expression>',
+ examples: ['wolframalpha what is the population of france']
+ },
+ args: [
+ {
+ id: 'expression',
+ type: 'string',
+ match: 'rest',
+ prompt: {
+ start: 'What would you like to look up?',
+ retry: '{error} Pick something to look up.',
+ optional: false
+ }
+ }
+ ],
+ slash: true,
+ slashOptions: [
+ {
+ name: 'expression',
+ description: 'What would you like to look up?',
+ type: 'STRING',
+ required: true
+ }
+ ],
+ clientPermissions: ['SEND_MESSAGES'],
+ userPermissions: ['SEND_MESSAGES']
+ });
+ }
+ public override async exec(message: BushMessage | BushSlashMessage, args: { expression: string }): Promise<unknown> {
+ const waApi = WolframAlphaAPI(this.client.config.credentials.wolframAlphaAppId);
+
+ const decodedEmbed = new MessageEmbed().addField('📥 Input', await util.inspectCleanRedactCodeblock(args.expression));
+ try {
+ const calculated = await waApi.getShort(args.expression);
+ decodedEmbed
+ .setTitle(`${util.emojis.successFull} Successfully Queried Expression`)
+ .setColor(util.colors.success)
+ .addField('📤 Output', await util.inspectCleanRedactCodeblock(calculated.toString()));
+ } catch (error) {
+ decodedEmbed
+ .setTitle(`${util.emojis.errorFull} Unable to Query Expression`)
+ .setColor(util.colors.error)
+ .addField(`📤 Error`, await util.inspectCleanRedactCodeblock(`${error.name}: ${error.message}`, 'js'));
+ }
+ return await message.util.reply({ embeds: [decodedEmbed], allowedMentions: AllowedMentions.none() });
+ }
+}
diff --git a/src/config/example-options.ts b/src/config/example-options.ts
index b9a9d28..c7838ab 100644
--- a/src/config/example-options.ts
+++ b/src/config/example-options.ts
@@ -5,7 +5,8 @@ export default new Config({
token: '[TOKEN]',
betaToken: '[TOKEN]',
devToken: '[TOKEN]',
- hypixelApiKey: '[API_KEY]'
+ hypixelApiKey: '[API_KEY]',
+ wolframAlphaAppId: '[APP_ID]'
},
environment: 'development',
owners: [
diff --git a/src/context-menu-commands/user/userInfo.ts b/src/context-menu-commands/user/userInfo.ts
new file mode 100644
index 0000000..2ab265a
--- /dev/null
+++ b/src/context-menu-commands/user/userInfo.ts
@@ -0,0 +1 @@
+// todo: make context interaction for user command
diff --git a/src/lib/extensions/discord-akairo/BushClientUtil.ts b/src/lib/extensions/discord-akairo/BushClientUtil.ts
index 17f7d32..29be84c 100644
--- a/src/lib/extensions/discord-akairo/BushClientUtil.ts
+++ b/src/lib/extensions/discord-akairo/BushClientUtil.ts
@@ -883,7 +883,8 @@ export class BushClientUtil extends ClientUtil {
['token']: 'Main Token',
['devToken']: 'Dev Token',
['betaToken']: 'Beta Token',
- ['hypixelApiKey']: 'Hypixel Api Key'
+ ['hypixelApiKey']: 'Hypixel Api Key',
+ ['wolframAlphaAppId']: 'Wolfram|Alpha App ID'
};
return mapping[old as keyof typeof mapping] || old;
}
diff --git a/src/lib/utils/Config.ts b/src/lib/utils/Config.ts
index 663fe95..ed73d40 100644
--- a/src/lib/utils/Config.ts
+++ b/src/lib/utils/Config.ts
@@ -1,7 +1,7 @@
import { Snowflake } from 'discord.js';
export interface ConfigOptions {
- credentials: { token: string; betaToken: string; devToken: string; hypixelApiKey: string };
+ credentials: { token: string; betaToken: string; devToken: string; hypixelApiKey: string; wolframAlphaAppId: string };
environment: 'production' | 'beta' | 'development';
owners: Snowflake[];
prefix: string;
@@ -12,7 +12,7 @@ export interface ConfigOptions {
}
export class Config {
- public credentials: { token: string; betaToken: string; devToken: string; hypixelApiKey: string };
+ public credentials: { token: string; betaToken: string; devToken: string; hypixelApiKey: string; wolframAlphaAppId: string };
public environment: 'production' | 'beta' | 'development';
public owners: Snowflake[];
public prefix: string;
diff --git a/src/listeners/guild/guildCreate.ts b/src/listeners/guild/guildCreate.ts
index 21a7ab0..bc5694a 100644
--- a/src/listeners/guild/guildCreate.ts
+++ b/src/listeners/guild/guildCreate.ts
@@ -6,7 +6,7 @@ export default class GuildCreateListener extends BushListener {
super('guildCreate', {
emitter: 'client',
event: 'guildCreate', // when the bot joins a guild
- category: 'client'
+ category: 'guild'
});
}
diff --git a/src/listeners/guild/guildDelete.ts b/src/listeners/guild/guildDelete.ts
index a59f45e..3126bd6 100644
--- a/src/listeners/guild/guildDelete.ts
+++ b/src/listeners/guild/guildDelete.ts
@@ -6,7 +6,7 @@ export default class GuildDeleteListener extends BushListener {
super('guildDelete', {
emitter: 'client',
event: 'guildDelete', //when the bot leaves a guild
- category: 'client'
+ category: 'guild'
});
}
diff --git a/src/listeners/guild/guildMemberAdd.ts b/src/listeners/guild/guildMemberAdd.ts
index bf6e0b6..7bef6b8 100644
--- a/src/listeners/guild/guildMemberAdd.ts
+++ b/src/listeners/guild/guildMemberAdd.ts
@@ -7,7 +7,7 @@ export default class GuildMemberAddListener extends BushListener {
super('guildMemberAdd', {
emitter: 'client',
event: 'guildMemberAdd',
- category: 'client'
+ category: 'guild'
});
}
@@ -85,7 +85,7 @@ export default class GuildMemberAddListener extends BushListener {
}
} else {
const joinRoles = await member.guild.getSetting('joinRoles');
- if (!joinRoles) return;
+ if (!joinRoles || !joinRoles.length) return;
await member.roles
.add(joinRoles, 'Join roles.')
.then(() =>
diff --git a/src/listeners/message/supportThreads.ts b/src/listeners/message/supportThreads.ts
index ce2aa0d..9b3ea3e 100644
--- a/src/listeners/message/supportThreads.ts
+++ b/src/listeners/message/supportThreads.ts
@@ -3,7 +3,7 @@ import { MessageEmbed } from 'discord.js';
import { BushListener, BushTextChannel } from '../../lib';
import { BushClientEvents } from '../../lib/extensions/discord.js/BushClientEvents';
-export default class MessageVerboseListener extends BushListener {
+export default class SupportThreadListener extends BushListener {
public constructor() {
super('supportThreads', {
emitter: 'client',
@@ -13,6 +13,7 @@ export default class MessageVerboseListener extends BushListener {
}
public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<Promise<void> | undefined> {
+ if (client.config.isDevelopment) return;
if (!message.guild || !message.channel) return;
// todo: make these configurable etc...
if (message.guild.id !== '516977525906341928') return; // mb
@@ -20,7 +21,7 @@ export default class MessageVerboseListener extends BushListener {
if (!(message.channel as BushTextChannel).permissionsFor(message.guild.me!).has('USE_PUBLIC_THREADS')) return;
const thread = await message.startThread({
name: `Support - ${message.author.username}#${message.author.discriminator}`,
- autoArchiveDuration: 1440,
+ autoArchiveDuration: 60,
reason: 'Support Thread'
});
const embed = new MessageEmbed()