- properly handle permissions for user commands

- add central permission group constant
This commit is contained in:
bignutty 2024-12-08 14:49:57 +01:00
parent dcb823a0a1
commit d2aeecf70d
100 changed files with 245 additions and 942 deletions

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { renderMusicButtons } = require('#utils/buttons');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -22,7 +23,7 @@ module.exports = {
],
run: async (context, args) => {
try{
await acknowledge(context);
await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]);
const { message } = args;

View file

@ -1,5 +1,5 @@
const { googleVisionOcr, googleTranslate } = require('#api');
const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES } = require('#constants');
const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, PERMISSION_GROUPS } = require('#constants');
const { getMessageAttachment, validateAttachment } = require('#utils/attachment');
const { createEmbed } = require('#utils/embed');
@ -24,7 +24,7 @@ module.exports = {
],
run: async (context, args) => {
try{
await acknowledge(context);
await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]);
const { message } = args;

View file

@ -1,5 +1,6 @@
const { reverseImageSearch } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { getMessageAttachment, validateAttachment } = require('#utils/attachment');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
@ -46,7 +47,7 @@ module.exports = {
],
run: async (context, args) => {
try{
await acknowledge(context);
await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]);
const { message } = args;

View file

@ -7,6 +7,7 @@ const { codeblock } = require('#utils/markdown');
const { STATICS } = require('#utils/statics');
const { ApplicationCommandTypes, MessageFlags } = require("detritus-client/lib/constants");
const { PERMISSION_GROUPS } = require('#constants');
;
module.exports = {
@ -21,7 +22,7 @@ module.exports = {
1
],
run: async (context, args) => {
await acknowledge(context);
await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]);
try {
const { message } = args;

View file

@ -1,5 +1,5 @@
const { googleTranslate } = require('#api');
const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, TRANSLATE_LANGUAGE_MAPPINGS, TRANSLATE_DEFAULT_LANGUAGE_LIST } = require('#constants');
const { TRANSLATE_DISPLAY_MAPPINGS, TRANSLATE_LANGUAGES, TRANSLATE_LANGUAGE_MAPPINGS, TRANSLATE_DEFAULT_LANGUAGE_LIST, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -22,7 +22,7 @@ module.exports = {
1
],
run: async (context, args) => {
await acknowledge(context);
await acknowledge(context, false, [...PERMISSION_GROUPS.baseline_slash]);
const { message } = args;

View file

@ -1,4 +1,5 @@
const { otter } = require('#api');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -27,7 +28,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
const ott = (await otter()).response.body

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
const { editOrReply } = require('#utils/message');
@ -32,7 +33,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
if(!args.user) return editOrReply(context, createEmbed("default", context, {
image: {

View file

@ -1,4 +1,4 @@
const { BADGE_ICONS } = require('#constants');
const { BADGE_ICONS, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -35,7 +35,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
const { user, member } = args;

View file

@ -1,5 +1,6 @@
const { googleImages } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -57,7 +58,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try {
let search = await googleImages(context, args.query, false) //safesearch is always on

View file

@ -1,5 +1,6 @@
const { google } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { format } = require('#utils/ansi');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
@ -260,7 +261,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
let search = await google(context, args.query, false) // safe search is always on

View file

@ -1,5 +1,6 @@
const { lyrics } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -93,7 +94,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
let search = await lyrics(context, args.query)

View file

@ -1,4 +1,5 @@
const { maps, mapsSupplemental } = require('#api');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -7,7 +8,6 @@ const { editOrReply } = require('#utils/message')
const { STATICS, STATIC_ASSETS } = require('#utils/statics');
const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants');
// TODO: Turn this into a general purpose permissions constant
const { Components } = require('detritus-client/lib/utils');
function renderPlaceCard(context, place) {
@ -108,7 +108,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try {
let search = await maps(context, args.query)

View file

@ -1,5 +1,6 @@
const { urbandictionary } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -7,8 +8,7 @@ const { link, iconPill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants");
const { ApplicationCommandOptionTypes } = require("detritus-client/lib/constants");
function createUrbanPage(context, result){
let e = createEmbed("default", context, {
@ -64,7 +64,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
let search = await urbandictionary(context, args.term)

View file

@ -1,5 +1,6 @@
const { wolframAlpha } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -67,7 +68,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try {
let search = await wolframAlpha(context, args.query)

View file

@ -1,4 +1,5 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -35,7 +36,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
if(!isNaN(parseInt(args.query))){
try{

View file

@ -1,6 +1,6 @@
const { youtube } = require('#api');
const { paginator } = require('#client');
const { YOUTUBE_CATEGORIES } = require('#constants');
const { YOUTUBE_CATEGORIES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -180,7 +180,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
if(!args.type) args.type="all"

View file

@ -1,6 +1,6 @@
const { dictionary } = require('#api');
const { paginator } = require('#client');
const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES } = require('#constants');
const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -76,7 +76,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
let search = await dictionary(context, args.term, "en")

View file

@ -11,6 +11,7 @@ const { ingest } = require("#logging");
const { Utils } = require("detritus-client");
const { InteractionCallbackTypes, ApplicationCommandOptionTypes, DiscordRegexNames } = require("detritus-client/lib/constants");
const { Components, Snowflake } = require("detritus-client/lib/utils");
const { PERMISSION_GROUPS } = require("#constants");
const onlyEmoji = require('emoji-aware').onlyEmoji;
@ -64,7 +65,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
const { matches } = Utils.regex(
DiscordRegexNames.EMOJI,

View file

@ -8,6 +8,7 @@ const { STATICS, STATIC_ASSETS } = require("#utils/statics");
const { Components } = require("detritus-client/lib/utils");
const { InteractionCallbackTypes, MessageComponentButtonStyles, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants");
const { acknowledge } = require("#utils/interactions");
const { PERMISSION_GROUPS } = require("#constants");
const onlyEmoji = require('emoji-aware').onlyEmoji;
@ -59,7 +60,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
const emoji = onlyEmoji(args.emoji)
if(!emoji){

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { renderMusicButtons } = require('#utils/buttons');
const { createEmbed } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -37,7 +38,7 @@ module.exports = {
],
run: async (context, args) => {
try{
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
let urls = args.url.match(urlr)
if(urls){

View file

@ -1,4 +1,5 @@
const { googleVisionOcr } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { validateAttachment } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
@ -36,7 +37,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
if(!validateAttachment(args.image, "image")) return await editOrReply(context, createEmbed("warning", context, "Unsupported attachment type."))

View file

@ -1,5 +1,6 @@
const { reverseImageSearch } = require("#api");
const { paginator } = require("#client");
const { PERMISSION_GROUPS } = require("#constants");
const { validateAttachment } = require("#utils/attachment");
const { createEmbed, formatPaginationEmbeds, page } = require("#utils/embed");
@ -55,7 +56,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
if(!validateAttachment(args.image, "image")) return await editOrReply(context, createEmbed("warning", context, "Unsupported attachment type."))

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require("#constants");
const { WebUtilsWebPageScreenshot} = require("#obelisk");
const { createEmbed } = require("#utils/embed");
@ -33,7 +34,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash, PERMISSION_GROUPS.attachments]);
await editOrReply(context, createEmbed("loading", context, `Creating website screenshot...`))

View file

@ -1,5 +1,5 @@
const { googleTranslate } = require('#api');
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require('#constants');
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { codeblock, icon, pill, stringwrap } = require('#utils/markdown');
@ -51,7 +51,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
if(!args.to) args.to = "en";
if(!args.from) args.from = "auto";

View file

@ -1,5 +1,6 @@
const { darksky } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, page } = require('#utils/embed');
const { acknowledge } = require('#utils/interactions');
@ -7,7 +8,7 @@ const { pill, iconPill, smallPill, weatherIcon, timestamp, icon, link, stringwra
const { editOrReply } = require('#utils/message');
const { STATICS } = require('#utils/statics');
const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants');
const { ApplicationCommandOptionTypes, ApplicationIntegrationTypes, InteractionContextTypes } = require('detritus-client/lib/constants');
const modifiers = {
"°C": (i)=>i,
@ -94,12 +95,13 @@ module.exports = {
name: 'weather',
description: 'Check the weather at a location.',
contexts: [
0,
1,
2
InteractionContextTypes.GUILD,
InteractionContextTypes.PRIVATE_CHANNEL,
InteractionContextTypes.BOT_DM
],
integrationTypes: [
1
ApplicationIntegrationTypes.GUILD_INSTALL,
ApplicationIntegrationTypes.USER_INSTALL
],
options: [
{
@ -137,7 +139,7 @@ module.exports = {
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
await acknowledge(context, args.incognito, [...PERMISSION_GROUPS.baseline_slash]);
try{
let data = await darksky(context, args.location)

View file

@ -1,14 +1,11 @@
const { paginator } = require('#client');
const { DISCORD_INVITES, DEFAULT_PREFIXES } = require('#constants');
const { DISCORD_INVITES, DEFAULT_PREFIXES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { codeblock, icon, link, pill, smallPill, iconPill, stringwrap } = require('#utils/markdown')
const { editOrReply } = require('#utils/message');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function createHelpPage(context, title, contents, descriptions) {
return page(createEmbed("default", context, {
description: `${title}\n\n` +
@ -131,7 +128,7 @@ module.exports = {
category: 'core',
usage: 'help [<command>]'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
if(await hasFeature(context, "core/help")) categories["limited"] = `${iconPill("stars", "Limited Test Commands")}`;
else if (categories["limited"]) delete categories["limited"]

View file

@ -1,11 +1,9 @@
const { PERMISSION_GROUPS } = require('#constants');
const { format } = require('#utils/ansi')
const { createEmbed } = require('#utils/embed')
const { codeblock, icon } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
description: 'ping!',
name: 'ping',
@ -15,7 +13,7 @@ module.exports = {
category: 'core',
usage: 'ping'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
ping = await context.client.ping()

View file

@ -1,12 +1,9 @@
const { PRIVACY_POLICY_LAST_UPDATE, PRIVACY_POLICY_SECTIONS, DISCORD_INVITES, COLORS, PRIVACY_POLICY_PREVIOUS_REVISION } = require('#constants');
const { PRIVACY_POLICY_LAST_UPDATE, PRIVACY_POLICY_SECTIONS, DISCORD_INVITES, COLORS, PRIVACY_POLICY_PREVIOUS_REVISION, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { icon, timestamp, link, iconLinkPill } = require('#utils/markdown');
const { editOrReply } = require('#utils/message');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'privacy',
metadata: {
@ -15,7 +12,7 @@ module.exports = {
category: 'core',
usage: 'privacy'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
return await editOrReply(context,
createEmbed("default", context, {

View file

@ -1,11 +1,9 @@
const { PERMISSION_GROUPS } = require('#constants');
const { format } = require('#utils/ansi');
const { createEmbed } = require('#utils/embed')
const { codeblock } = require('#utils/markdown')
const { editOrReply } = require('#utils/message');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'shard',
metadata: {
@ -14,7 +12,7 @@ module.exports = {
category: 'core',
usage: 'shard'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
return await editOrReply(context,
createEmbed("default", context, {

View file

@ -1,12 +1,9 @@
const { OPEN_SOURCE_REPOSITORY_URL } = require('#constants');
const { OPEN_SOURCE_REPOSITORY_URL, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { highlight, iconPill, iconLinkPill } = require('#utils/markdown');
const { editOrReply } = require('#utils/message');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require("superagent");
// TODO: Move this into utils
@ -34,7 +31,7 @@ module.exports = {
category: 'core',
usage: 'stats'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
try{

View file

@ -1,9 +1,7 @@
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'undo',
default: 1,
@ -15,7 +13,7 @@ module.exports = {
category: 'core',
usage: 'undo [<amount (1-5)>]'
},
permissionsClient: [Permissions.SEND_MESSAGES, Permissions.EMBED_LINKS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
try{
if(typeof(args.amount) == "string") args.amount = parseInt(args.amount)

View file

@ -1,159 +0,0 @@
const { editOrReply } = require("#utils/message");
const { Components } = require("detritus-client/lib/utils");
module.exports = {
label: "text",
name: "mapstest",
metadata: {
description: 'speak.',
description_short: 'speak',
examples: ['say hug'],
category: 'dev',
usage: 'say <text>'
},
onBefore: context => context.user.isClientOwner,
onCancel: ()=>{},
run: async (context, args) => {
await context.triggerTyping();
let component = new Components();
let row0 = component.addActionRow({
custom_id: "r0"
});
row0.addButton({
custom_id: "s00",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s01",
disabled: false,
emoji: "<:up:1264344081572565102>",
style: 1
})
row0.addButton({
custom_id: "s02",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s03",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s04",
disabled: true,
emoji: "<:ico_door_white:1264348023916466176>",
style: 4
})
row0.addButton({
custom_id: "s10",
disabled: false,
emoji: "<:left:1264344064103284846>",
style: 1
})
row0.addButton({
custom_id: "s11",
disabled: false,
emoji: "<:ico_pegman_down:1264344115785502802>",
style: 3
})
row0.addButton({
custom_id: "s12",
disabled: false,
emoji: "<:right:1264344072257015830>",
style: 1
})
row0.addButton({
custom_id: "s13",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s14",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s20",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s21",
disabled: false,
emoji: "<:down:1264344051751059479>",
style: 1
})
row0.addButton({
custom_id: "s22",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s23",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
row0.addButton({
custom_id: "s24",
disabled: true,
emoji: "<:empty:749601069298090034>",
style: 2
})
console.log(JSON.stringify(component))
editOrReply(context, {
embeds: [
{
author: {
name: "New York Stock Exchange, NYC",
iconUrl: "https://bignutty.gitlab.io/webstorage4/v2/assets/brands/maps.png"
},
image: {
url: "https://cdn.discordapp.com/attachments/415951527258095616/1264345049215275080/9k.png?ex=669d8896&is=669c3716&hm=a3f0a1b025fd75f47e144e7a9e3161242634dfcd1d76825f1e82deeb0269f30a&"
}
}
],
components: component
})
}
};

View file

@ -1,12 +1,9 @@
const { DEFAULT_PREFIXES } = require('#constants');
const { DEFAULT_PREFIXES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { codeblock } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
const SIZES = Object.freeze({
@ -36,7 +33,7 @@ module.exports = {
{ name: 'variance', default: '', required: false, help: "Variance (1000-9999)" },
{ name: 'rotate', default: '', required: false, help: "Rotation amount (0-360)" }
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
await editOrReply(context, createEmbed("loading", context, `Generating image...`))
try{

View file

@ -1,73 +0,0 @@
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const APPS = [
"appcode",
"aqua",
"big-data-tools",
"clion",
"cwm",
"datagrip",
"datalore",
"dataspell",
"dotcover",
"dotmemory",
"dotpeek",
"dottrace",
"fleet",
"gateway",
"goland",
"grazie",
"hub",
"intellij-idea",
"intellij-idea-community",
"intellij-idea-edu",
"intellij-rust",
"jetbrains",
"jb-academy",
"kotlin",
"license-vault",
"marketplace",
"mono",
"mps",
"phpstorm",
"pycharm",
"pycharm-community",
"pycharm-edu",
"qa-tools",
"qodana",
"resharper",
"resharper-cpp",
"rider",
"riderflow",
"rubymine",
"space",
"teamcity",
"toolbox",
"upsource",
"webstorm",
"youtrack",
]
module.exports = {
name: 'art2',
aliases: ['wallpaper2'],
metadata: {
description: 'Returns a random colorful wallpaper from JetBrains Eidos.',
description_short: 'AI wallpapers',
category: 'fun',
usage: `art2`
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
run: async (context) => {
context.triggerTyping();
return editOrReply(context, createEmbed("default", context, {
image: {
url: `https://resources.jetbrains.com/cai/eidos_231/${APPS[Math.floor(Math.random()*APPS.length)]}/${Math.floor(1 + Math.random()*999)}.png`
}
}))
}
};

View file

@ -1,13 +1,10 @@
const { garfield } = require('#api');
const { FUNNY_CAT_ICONS } = require('#constants');
const { FUNNY_CAT_ICONS, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { timestamp } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'garfield',
aliases: ['garf'],
@ -17,7 +14,7 @@ module.exports = {
category: 'fun',
usage: `garfield`
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();

View file

@ -1,10 +1,8 @@
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed');
const { editOrReply } = require('#utils/message');
const { STATICS } = require('#utils/statics');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
module.exports = {
@ -16,7 +14,7 @@ module.exports = {
category: 'fun',
usage: `inspire`
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
await context.triggerTyping();
try {

View file

@ -1,11 +1,9 @@
const { otter } = require('#api');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'otter',
metadata: {
@ -15,7 +13,7 @@ module.exports = {
usage: `otter`,
slashCommand: "otter"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
await context.triggerTyping();
try{

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { webAsk } = require('#obelisk');
const { createEmbed } = require('#utils/embed')
@ -6,9 +7,6 @@ const { editOrReply } = require('#utils/message')
const { STATIC_ICONS } = require('#utils/statics');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: general purpose constant?
const URL_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([^> \n]*)/
@ -22,7 +20,7 @@ module.exports = {
category: 'limited',
usage: 'ask <question>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
if(!await hasFeature(context, "flamingo/summary")) return;
context.triggerTyping();

View file

@ -1,13 +1,11 @@
const { emogen } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { createEmbed } = require("#utils/embed");
const { iconPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { hasFeature } = require("#utils/testing");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'emogen',
label: 'text',
@ -21,7 +19,7 @@ module.exports = {
args: [
{ name: 'style', default: 'microsoft', required: false, help: "Emogen Style" }
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/imagen")) return;
context.triggerTyping();

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require("#constants");
const { LlmModelsGenerate } = require("#obelisk");
const { createEmbed } = require("#utils/embed");
@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message");
const { STATIC_ICONS } = require("#utils/statics");
const { hasFeature } = require("#utils/testing");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'gemini-pro',
label: 'text',
@ -20,7 +18,7 @@ module.exports = {
category: 'limited',
usage: 'gemini-pro <prompt>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/gemini/text")) return;
context.triggerTyping();

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require("#constants");
const { geminiVision } = require("#obelisk");
const { getRecentImage } = require("#utils/attachment");
@ -7,9 +8,6 @@ const { editOrReply } = require("#utils/message");
const { STATIC_ICONS } = require("#utils/statics");
const { hasFeature } = require("#utils/testing");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'gemini-vision',
label: 'text',
@ -21,7 +19,7 @@ module.exports = {
category: 'limited',
usage: 'gemini-vision <attachment> <prompt>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/gemini/vision")) return;
context.triggerTyping();

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { LlmPrivateBard } = require('#obelisk');
const { createEmbed } = require('#utils/embed')
@ -6,8 +7,7 @@ const { editOrReply } = require('#utils/message')
const { STATIC_ICONS } = require('#utils/statics');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions, InteractionCallbackTypes } = require("detritus-client/lib/constants");
const { InteractionCallbackTypes } = require("detritus-client/lib/constants");
const { Components } = require('detritus-client/lib/utils');
module.exports = {
@ -22,7 +22,7 @@ module.exports = {
usage: 'gemini <input>'
},
args: [],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/bard")) return;

View file

@ -1,4 +1,5 @@
const { gpt } = require('#api');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
@ -6,8 +7,6 @@ const { iconPill, stringwrap, smallIconPill } = require('#utils/markdown')
const { STATICS, STATIC_ASSETS } = require('#utils/statics');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'gpt',
@ -24,7 +23,7 @@ module.exports = {
{ name: 'prompt', default: '', required: false, help: "The starting system prompt." },
// { name: 'temperature', default: 0.25, required: false, help: "Model temperature." },
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/gpt")) return;

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require("#constants");
const { GenerativeImagesModelsImagen } = require("#obelisk");
const { createEmbed } = require("#utils/embed");
@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message");
const { STATIC_ICONS, STATIC_ASSETS } = require("#utils/statics");
const { hasFeature } = require("#utils/testing");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'imagen',
label: 'text',
@ -20,7 +18,7 @@ module.exports = {
category: 'limited',
usage: 'imagen <prompt>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/imagen")) return;
context.triggerTyping();

View file

@ -1,4 +1,5 @@
const { palm2 } = require('#obelisk');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
@ -6,9 +7,6 @@ const { iconPill, stringwrap, smallIconPill } = require('#utils/markdown')
const { STATIC_ICONS } = require('#utils/statics');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'palm',
label: 'text',
@ -24,7 +22,7 @@ module.exports = {
{ name: 'prompt', default: '', required: false, help: "The starting system prompt." },
{ name: 'temperature', default: 0.25, required: false, help: "Model temperature." },
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/palm")) return;

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { SparkWebSummarize } = require('#obelisk');
const { createEmbed } = require('#utils/embed')
@ -6,9 +7,6 @@ const { editOrReply } = require('#utils/message')
const { STATIC_ICONS } = require('#utils/statics');
const { hasFeature } = require('#utils/testing');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: general purpose constant? regex util?
const URL_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([^> \n]*)/
@ -23,7 +21,7 @@ module.exports = {
category: 'limited',
usage: 'summarize'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
if(!await hasFeature(context, "flamingo/summary")) return;
context.triggerTyping();

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require("#constants");
const { wallpaper } = require("#obelisk");
const { createEmbed } = require("#utils/embed");
@ -6,9 +7,6 @@ const { editOrReply } = require("#utils/message");
const { STATIC_ICONS, STATIC_ASSETS } = require("#utils/statics");
const { hasFeature } = require("#utils/testing");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'wallpaper',
label: 'text',
@ -23,7 +21,7 @@ module.exports = {
args: [
{ name: 'format', default: 'wide', required: false, help: "Image style (wide, square)." }
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if(!await hasFeature(context, "ai/wallpapers")) return;
context.triggerTyping();

View file

@ -1,4 +1,5 @@
const { googleVisionLabels } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
@ -6,9 +7,6 @@ const { pill, smallPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'labels',
metadata: {
@ -17,7 +15,7 @@ module.exports = {
category: 'utils',
usage: 'labels <attachment>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
let image = await getRecentImage(context, 50)

View file

@ -1,5 +1,5 @@
const { googleVisionSafetyLabels } = require("#api");
const { GOOGLE_CLOUD_SAFETY_LABELS, GOOGLE_CLOUD_SAFETY_LABELS_NAMES } = require("#constants");
const { GOOGLE_CLOUD_SAFETY_LABELS, GOOGLE_CLOUD_SAFETY_LABELS_NAMES, PERMISSION_GROUPS } = require("#constants");
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
@ -7,9 +7,6 @@ const { iconPill, smallPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'safetylabels',
metadata: {
@ -18,7 +15,7 @@ module.exports = {
category: 'utils',
usage: 'safetylabels <attachment>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
let image = await getRecentImage(context, 50)

View file

@ -1,3 +1,4 @@
const { PERMISSION_GROUPS } = require('#constants');
const { AudioTranscribe } = require('#obelisk');
const { createEmbed } = require('#utils/embed')
@ -5,9 +6,6 @@ const { codeblock, icon } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'transcribe',
aliases: ['tcr'],
@ -18,7 +16,7 @@ module.exports = {
usage: 'transcribe',
slashCommand: "Transcribe Voice Message"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
if (!context.message.messageReference) return editOrReply(context, createEmbed("warning", context, "You need to reply to a voice message."))

View file

@ -1,72 +0,0 @@
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
const { link } = require("#utils/markdown");
module.exports = {
name: 'craiyon',
label: 'query',
metadata: {
description: 'Uses Craiyon to generate four images from a text prompt.',
description_short: 'Craiyon AI image generation',
examples: ['craiyon Otter'],
category: 'image',
usage: 'craiyon <text>'
},
ratelimit: {
type: 'guild',
limit: 1,
duration: 5000
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
await editOrReply(context, createEmbed("loading", context, `Synthesizing images...`))
let noticeTimer = setTimeout(()=>{
let emb = createEmbed("loading", context, `Synthesizing images...`)
emb.footer = {
text: "This might take several minutes to complete."
};
editOrReply(context, { embeds: [ emb ] });
}, 30000)
try{
let t = Date.now();
let img = await superagent.post(`https://bf.dallemini.ai/generate`)
.send({
prompt: args.query
})
clearTimeout(noticeTimer)
let embeds = [];
let files = [];
for(let i = 0; i < 4; i++){
embeds.push(createEmbed("default", context, {image: {url:`attachment://dalle${i}.jpeg`}, url: `https://example.com`, footer: { iconUrl: STATICS.labscore, text: `${context.application.name} • Took ${((Date.now() - t) / 1000).toFixed(2)}s` }}))
files.push({
filename: `dalle${i}.jpeg`,
value: Buffer.from(img.body.images[i], 'base64')
})
}
await editOrReply(context, { embeds, files })
}catch(e){
if(e.response.status == 503) return await editOrReply(context, createEmbed("error", context, `DALL-E Mini server is busy, try again later.`))
await editOrReply(context, createEmbed("error", context, `Image generation failed.`))
}
},
};

View file

@ -1,57 +0,0 @@
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { billboardCityscape } = require("../../../../service/makesweet");
const { description } = require("../../../interaction/slash/search/lyrics");
const { link } = require("#utils/markdown");
module.exports = {
name: 'billboard',
label: 'text',
metadata: {
description: 'Generates an animated gif with the MakeSweet billboard template.',
description_short: 'Animated billboard generation',
category: 'image',
usage: 'billboard <image>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
let image = await getRecentImage(context, 50)
if (!image) return editOrReply(context, createEmbed("warning", context, "No images found."))
await editOrReply(context, createEmbed("loading", context, `Generating image...`))
if (!args.text) args.text = ""
try {
const timings = Date.now();
let mkswt = await billboardCityscape(image)
return await editOrReply(context, {
embeds: [createEmbed("image", context, {
url: "makesweet.gif",
time: ((Date.now() - timings) / 1000).toFixed(2),
provider: {
icon: STATICS.makesweet,
text: "MakeSweet"
}
})],
files: [{ filename: "makesweet.gif", value: mkswt.body }]
})
} catch (e) {
console.log(e)
await editOrReply(context, createEmbed("error", context, "Something went wrong."))
}
},
}

View file

@ -1,55 +0,0 @@
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { circuitBoard } = require("../../../../service/makesweet");
const { link } = require("#utils/markdown");
module.exports = {
name: 'circuitboard',
label: 'text',
metadata: {
description: 'Generates an animated gif with the MakeSweet circuit board template.',
description_short: 'Animated circuit board generation',
category: 'image',
usage: 'circuitboard <image>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
let image = await getRecentImage(context, 50)
if(!image) return editOrReply(context, createEmbed("warning", context, "No images found."))
await editOrReply(context, createEmbed("loading", context, `Generating image...`))
if(!args.text) args.text = ""
try {
const timings = Date.now();
let mkswt = await circuitBoard(image)
return await editOrReply(context, {
embeds: [createEmbed("image", context, {
url: "makesweet.gif",
time: ((Date.now() - timings) / 1000).toFixed(2),
provider: {
icon: STATICS.makesweet,
text: "MakeSweet"
}
})],
files: [{ filename: "makesweet.gif", value: mkswt.body }]
})
} catch (e) {
await editOrReply(context, createEmbed("error", context, e))
}
}
}

View file

@ -1,55 +0,0 @@
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { flag } = require("../../../../service/makesweet");
const { link } = require("#utils/markdown");
module.exports = {
name: 'flag',
label: 'text',
metadata: {
description: 'Generates an animated gif with the MakeSweet flag template.',
description_short: 'Animated flag generation',
category: 'image',
usage: 'flag <image>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
let image = await getRecentImage(context, 50)
if(!image) return editOrReply(context, createEmbed("warning", context, "No images found."))
await editOrReply(context, createEmbed("loading", context, `Generating image...`))
if(!args.text) args.text = ""
try {
const timings = Date.now();
let mkswt = await flag(image)
return await editOrReply(context, {
embeds: [createEmbed("image", context, {
url: "makesweet.gif",
time: ((Date.now() - timings) / 1000).toFixed(2),
provider: {
icon: STATICS.makesweet,
text: "MakeSweet"
}
})],
files: [{ filename: "makesweet.gif", value: mkswt.body }]
})
} catch (e) {
await editOrReply(context, createEmbed("error", context, e))
}
},
}

View file

@ -1,56 +0,0 @@
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { heartLocket } = require("../../../../service/makesweet");
const { link } = require("#utils/markdown");
module.exports = {
name: 'heartlocket',
label: 'text',
metadata: {
description: 'Generates an animated gif with the MakeSweet heart locket template. Accepts text as an optional input.',
description_short: 'Animated heart locket generation',
examples: ['heartlocket Big Nutty'],
category: 'image',
usage: 'heartlocket <image> [<text>]'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
let image = await getRecentImage(context, 50)
if(!image) return editOrReply(context, createEmbed("warning", context, "No images found."))
await editOrReply(context, createEmbed("loading", context, `Generating image...`))
if(!args.text) args.text = ""
try {
const timings = Date.now();
let mkswt = await heartLocket(args.text, image)
return await editOrReply(context, {
embeds: [createEmbed("image", context, {
url: "makesweet.gif",
time: ((Date.now() - timings) / 1000).toFixed(2),
provider: {
icon: STATICS.makesweet,
text: "MakeSweet"
}
})],
files: [{ filename: "makesweet.gif", value: mkswt.body }]
})
} catch (e) {
await editOrReply(context, createEmbed("error", context, e))
}
}
}

View file

@ -1,64 +0,0 @@
const { retroWave } = require('#api')
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { link } = require("#utils/markdown");
module.exports = {
name: 'retro',
label: 'text',
metadata: {
description: 'Generates an image with a retro style.',
description_short: 'Retro-styled text',
examples: ['retro crazy|chaos in|cyberspace'],
category: 'image',
usage: 'retro <line1|line2|line3> [-background <1-5>] [-style <1-4>]'
},
args: [
{default: 5, name: 'background', type: 'integer', help: "Background Style ` 1, 2, 3, 4, 5 `"},
{default: 4, name: 'style', type: 'integer', help: "Text Style ` 1, 2, 3, 4 `"},
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
context.triggerTyping();
if(!args.text) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (text).`))
if(args.background > 5 || args.background < 1) return editOrReply(context, createEmbed("warning", context, `Invalid Parameter (background).`))
if(args.style > 4 || args.style < 1) return editOrReply(context, createEmbed("warning", context, `Invalid Parameter (style).`))
let lines = `${args.text}| | `.split('|')
if(args.text.includes('|')) lines = [lines[1], lines[2], lines[0]]
try{
let res = await retroWave(context, args.background, args.style, lines[2], lines[0], lines[1])
if(res.response.body.status == 1) return editOrReply(context, createEmbed("warning", context, res.response.body.errors[0]))
image = res.response.body.data.images[res.response.body.data.best_quality]
return editOrReply(context, createEmbed("image", context, {
url: image,
time: res.timings,
provider: {
icon: STATICS.photofunia,
text: "PhotoFunia"
}
}))
}catch(e){
console.log(e)
if(e.response?.body?.message) return editOrReply(context, createEmbed("error", context, e.response.body.message))
return editOrReply(context, createEmbed("error", context, `Unable to generate image.`))
}
}
};

View file

@ -1,52 +0,0 @@
const { yacht } = require('#api')
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { link } = require("#utils/markdown");
module.exports = {
name: 'yacht',
label: 'text',
metadata: {
description: 'Generates an image with custom text on a yacht.',
description_short: 'Custom text on a yacht',
examples: ['yacht Im on a boat.'],
category: 'image',
usage: 'yacht <text>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY],
run: async (context, args) => {
return editOrReply(context, createEmbed("default", context, {
description: `Image manipulation commands are **no longer supported** in ${context.client.application.name}.\n\nIf you're looking for a suitable replacement, check out ${link("https://canary.discord.com/oauth2/authorize?client_id=571661221854707713", "Assyst", "Invite Assyst Bot")}.`,
image: {
url: "https://cdn.discordapp.com/attachments/1029331568315093043/1282814251005775902/attachment.gif?ex=66e0b95e&is=66df67de&hm=81087808fd9bcd31886050280cae535827c274efdf6d04a318a073c40dc5a554&"
}
}))
context.triggerTyping();
if(!args.text) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (text).`))
if(args.text.length >= 26) return editOrReply(context, createEmbed("warning", context, `Parameter text too long (>25).`))
try{
let res = await yacht(context, args.text)
image = res.response.body.data.images[res.response.body.data.best_quality]
return editOrReply(context, createEmbed("image", context, {
url: image,
time: res.timings,
provider: {
icon: STATICS.photofunia,
text: "PhotoFunia"
}
}))
}catch(e){
console.log(e)
return editOrReply(context, createEmbed("error", context, `Unable to generate image.`))
}
}
};

View file

@ -2,12 +2,10 @@ const { createEmbed } = require("#utils/embed");
const { icon, highlight, link, stringwrap } = require('#utils/markdown');
const { editOrReply } = require("#utils/message");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
const { Routes } = require('detritus-client-rest/lib/endpoints');
const { PERMISSION_GROUPS } = require("#constants");
const applicationFlags = {
EMBEDDED_RELEASED: 1,
@ -48,7 +46,7 @@ module.exports = {
category: 'info',
usage: 'appinfo <application id>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
let id;

View file

@ -1,13 +1,11 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, page } = require("#utils/embed");
const { icon } = require('#utils/markdown');
const { editOrReply } = require("#utils/message");
const { getUser, getUserAvatar } = require("#utils/users");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'avatar',
label: 'user',
@ -20,7 +18,7 @@ module.exports = {
usage: 'avatar [<user>]',
slashCommmand: 'avatar'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.user) args.user = context.userId;

View file

@ -1,13 +1,11 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, page } = require("#utils/embed");
const { icon } = require('#utils/markdown');
const { editOrReply } = require("#utils/message");
const { getUser } = require("#utils/users");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'banner',
label: 'user',
@ -20,7 +18,7 @@ module.exports = {
usage: 'avatar [<user>]',
slashCommmand: 'banner'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.user) args.user = context.userId;

View file

@ -1,13 +1,11 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed");
const { guildFeaturesField } = require("#utils/fields");
const { icon, highlight, timestamp, codeblock, smallIconPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'server',
label: 'user',
@ -18,7 +16,7 @@ module.exports = {
category: 'info',
usage: 'server'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
try{
const emojis = context.message.guild.emojis

View file

@ -1,9 +1,7 @@
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'serverbanner',
aliases: ["guildbanner", "gb", "sb", "groupbanner"],
@ -13,7 +11,7 @@ module.exports = {
category: 'info',
usage: 'serverbanner'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
if (!context.guild.bannerUrl) return editOrReply(context, createEmbed("warning", context, "Server doesn't have a banner set."))

View file

@ -1,9 +1,7 @@
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'servericon',
aliases: ["guildicon", "gi", "si", "groupicon"],
@ -13,7 +11,7 @@ module.exports = {
category: 'info',
usage: 'servericon'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
if (!context.guild.iconUrl) return editOrReply(context, createEmbed("warning", context, "Server doesn't have an icon."))

View file

@ -1,5 +1,5 @@
const { paginator } = require('#client');
const { DISCORD_INVITES, OPEN_SOURCE_REPOSITORY_URL } = require("#constants");
const { DISCORD_INVITES, OPEN_SOURCE_REPOSITORY_URL, PERMISSION_GROUPS } = require("#constants");
const { createEmbed, formatPaginationEmbeds, page } = require("#utils/embed");
const { guildFeaturesField } = require("#utils/fields");
@ -7,9 +7,6 @@ const { icon, highlight, timestamp, iconPill, iconLinkPill, link } = require("#u
const { editOrReply } = require("#utils/message");
const { STATIC_ASSETS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'invite',
label: 'invite',
@ -21,7 +18,7 @@ module.exports = {
category: 'info',
usage: 'invite <invite code>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.invite) return editOrReply(context, {

View file

@ -1,13 +1,11 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { PERMISSION_CATEGORIES, PERMISSIONS_TEXT } = require('#permissions');
const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed");
const { guildFeaturesField } = require("#utils/fields");
const { icon, highlight, timestamp, codeblock, iconPill, smallPill, pill } = require("#utils/markdown");
const { icon, iconPill, smallPill, pill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { PermissionTools } = require('detritus-client/lib/utils');
// TODO: Move this to a utility module
@ -96,7 +94,7 @@ module.exports = {
category: 'info',
usage: 'role <name|id>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
let r = context.guild.roles.filter((r)=>r.name.toLowerCase().includes(args.query.toLowerCase()) || r.id == args.query)[0]
@ -146,9 +144,7 @@ module.exports = {
pages.push(page(newPage))
}
await paginator.createPaginator({
context,
pages: formatPaginationEmbeds(pages)

View file

@ -1,13 +1,12 @@
const { paginator } = require("#client");
const { BADGE_ICONS } = require("#constants");
const { PERMISSION_GROUPS } = require("#constants");
const { createEmbed, page } = require("#utils/embed");
const { icon, highlight, timestamp, smallIconPill, smallPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { getUser, renderBadges, getUserAvatar } = require("#utils/users");
// TODO: Turn this into a general purpose permissions constant
const { UserFlags, Permissions } = require("detritus-client/lib/constants");
const { UserFlags } = require("detritus-client/lib/constants");
module.exports = {
name: 'user',
@ -21,7 +20,7 @@ module.exports = {
usage: 'user [<user>]',
slashCommand: 'user'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
try{

View file

@ -1,4 +1,5 @@
const { perspective } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { format } = require("#utils/ansi");
const { createEmbed } = require("#utils/embed");
@ -6,8 +7,6 @@ const { icon, codeblock, iconPill, smallPill, stringwrap } = require("#utils/mar
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { Components } = require("detritus-client/lib/utils");
function getPerspectiveColor(score) {
@ -63,7 +62,7 @@ module.exports = {
category: 'mod',
usage: 'analyze <prompt>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
await context.triggerTyping();

View file

@ -1,4 +1,5 @@
const { perspective } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { format } = require("#utils/ansi");
const { createEmbed } = require("#utils/embed");
@ -7,9 +8,6 @@ const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
const { getUserAvatar } = require("#utils/users");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function getPerspectiveColor(score) {
if (score >= 0.9) return "m"
if (score >= 0.76) return "r"
@ -41,7 +39,7 @@ module.exports = {
category: 'mod',
usage: 'perspective <prompt>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
await context.triggerTyping();

View file

@ -3,8 +3,8 @@ const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
const { icon } = require("#utils/markdown");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { PERMISSION_GROUPS } = require("#constants");
// TODO: rework this eventually
// -> filter by user
@ -22,7 +22,7 @@ module.exports = {
{default: 20, name: 'amount', type: 'integer', help: "Amount of messages to be checked (1-20)"},
{default: true, name: 'case', type: 'bool', help: "If provided, should the search query be case sensitive"},
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.MANAGE_MESSAGES, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, Permissions.MANAGE_MESSAGES],
permissions: [Permissions.MANAGE_MESSAGES],
onPermissionsFail: (context) => editOrReply(context, {content: `${icon("failiure_simple")} ${context.message.author.mention}, you are lacking the permission \`Manage Messages\`.`}),
ratelimit: {

View file

@ -1,11 +1,9 @@
const { PERMISSION_GROUPS } = require('#constants');
const { renderMusicButtons } = require('#utils/buttons');
const { createEmbed } = require('#utils/embed')
const { icon } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent')
// TODO: make this a constant, or add a URL util
@ -21,7 +19,7 @@ module.exports = {
usage: 'audio',
slashCommand: "Music Platforms"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
if (!context.message.messageReference) return editOrReply(context, createEmbed("warning", context, "You need to reply to a message containing a song link."))

View file

@ -1,13 +1,11 @@
const { bingImages } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: create a favicon() util
function createImageResultPage(context, result) {
let res = page(
@ -40,7 +38,7 @@ module.exports = {
category: 'search',
usage: 'bing <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,14 +1,12 @@
const { bing } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { citation, link, codeblock } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: create a favicon() util
function createSearchResultPage(context, entry){
let res;
@ -107,7 +105,7 @@ module.exports = {
category: 'search',
usage: 'bing <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,13 +1,11 @@
const { googleImages } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: create a favicon() util
function createImageResultPage(context, result) {
let res = page(createEmbed("default", context, {
@ -40,7 +38,7 @@ module.exports = {
usage: 'image <query>',
slashCommand: "image"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,5 +1,6 @@
const { google } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { format } = require('#utils/ansi');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
@ -7,9 +8,6 @@ const { link, citation, icon, codeblock, pill, smallPill } = require('#utils/mar
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function renderFooter(context, doodle){
if(doodle?.super_g) return {
iconUrl: doodle.super_g,
@ -246,7 +244,7 @@ module.exports = {
usage: 'google <query>',
slashCommand: "google"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,14 +1,12 @@
const { lyrics } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { smallIconPill } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const META_FIELDS = {
"Album": "stat_videos",
"Released": "note"
@ -77,7 +75,7 @@ module.exports = {
usage: 'lyrics <query>',
slashCommand: "lyics"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,12 +1,11 @@
const { maps, mapsSupplemental } = require('#api');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { link, icon, iconAsEmojiObject, citation } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
const { STATICS, STATIC_ASSETS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const { Components } = require('detritus-client/lib/utils');
function renderPlaceCard(context, place) {
@ -91,7 +90,7 @@ module.exports = {
usage: 'maps <query>',
slashCommand: "maps"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,13 +1,13 @@
const { quora, quoraResult } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { link, pill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { STATICS, STATIC_ASSETS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions, InteractionCallbackTypes } = require("detritus-client/lib/constants");
const { InteractionCallbackTypes } = require("detritus-client/lib/constants");
const { Components } = require('detritus-client/lib/utils');
function createQuoraAnswerPage(context, question, answer) {
@ -133,7 +133,7 @@ module.exports = {
category: 'search',
usage: 'quora <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,14 +1,12 @@
const { reverseImageSearch } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { getRecentImage } = require("#utils/attachment");
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// TODO: create a favicon() util
function createReverseImageSearchResultPage(context, result, source) {
let res = page(
@ -43,7 +41,7 @@ module.exports = {
usage: 'reverse <image>',
slashCommand: "Reverse Image Search"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
try {

View file

@ -1,13 +1,11 @@
const { rule34 } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { pill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function createRule34Page(context, result) {
let res = page(createEmbed("default", context, {
description: '',
@ -55,7 +53,7 @@ module.exports = {
args: [
{ name: 'site', default: 'rule34', type: 'string', help: `Site to search on \` ${Object.keys(SITES).join(', ')} \`` }
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -1,14 +1,12 @@
const { urbandictionary } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { link, iconPill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function createUrbanPage(context, result){
let e = createEmbed("default", context, {
description: `**${link(result.link, result.title)}**`,
@ -48,7 +46,7 @@ module.exports = {
usage: 'urbandictionary <query>',
slashCommand: "urbandictionary"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
try{

View file

@ -1,13 +1,11 @@
const { wikihow } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function createWikiHowPage(context, result){
let e = createEmbed("default", context, {
author: {
@ -37,7 +35,7 @@ module.exports = {
category: 'search',
usage: 'wikihow <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
try{

View file

@ -1,12 +1,10 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
module.exports = {
@ -20,7 +18,7 @@ module.exports = {
category: 'search',
usage: 'wikipedia <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
try{

View file

@ -1,4 +1,5 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { WolframQueryCompute } = require('#obelisk');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
@ -6,9 +7,6 @@ const { citation, smallIconPill } = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
function createWolframPage(context, pod, query, sources) {
let res = page(createEmbed("default", context, {
author: {
@ -52,7 +50,7 @@ module.exports = {
usage: 'wolframalpha <query>',
slashCommand: "wolframalpha"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -1,11 +1,9 @@
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { editOrReply } = require('#utils/message')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent')
// TODO: create a favicon() util
@ -19,7 +17,7 @@ module.exports = {
category: 'search',
usage: 'xkcd <query>'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if (!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,15 +1,12 @@
const { youtube } = require('#api');
const { paginator } = require('#client');
const { YOUTUBE_CATEGORIES } = require('#constants');
const { YOUTUBE_CATEGORIES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { link, iconPill, smallPill, timestamp } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics')
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
// https://www.html-code-generator.com/javascript/shorten-long-numbers
const intToString = num => {
num = num.toString().replace(/[^0-9.]/g, '');
@ -122,7 +119,7 @@ module.exports = {
args: [
{name: 'type', default: 'all', type: 'string', help: `Video Category`}
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (query).`))

View file

@ -1,15 +1,12 @@
const { dictionary } = require('#api');
const { paginator } = require('#client');
const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES } = require('#constants');
const { TRANSLATE_LANGUAGE_MAPPINGS, DICTIONARY_LANGUAGES, PERMISSION_GROUPS } = require('#constants');
const { createEmbed, formatPaginationEmbeds, page } = require('#utils/embed')
const { link, iconPill, smallPill, icon, iconLinkPill, pill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message')
const { dictionaryGetCodeFromAny } = require('#utils/translate');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const LABELS = {
"offensive": `${iconPill("warning", "Offensive")}`
}
@ -65,7 +62,7 @@ module.exports = {
args: [
{name: 'lang', default: 'en', type: 'language', help: "Language to define in"},
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -1,5 +1,5 @@
const { emojipedia, emojiKitchen } = require("#api");
const { EMOJIPEDIA_PLATFORM_TYPES, EMOJIPEDIA_PLATFORM_TYPE_ALIASES } = require("#constants");
const { EMOJIPEDIA_PLATFORM_TYPES, EMOJIPEDIA_PLATFORM_TYPE_ALIASES, PERMISSION_GROUPS } = require("#constants");
const { ingest } = require("#logging");
const { createEmbed } = require("#utils/embed");
@ -9,8 +9,7 @@ const { STATICS, STATIC_ASSETS } = require("#utils/statics");
const { Utils } = require("detritus-client");
const { Components, Snowflake } = require("detritus-client/lib/utils");
// TODO: Turn this into a general purpose permissions constant
const { Permissions, InteractionCallbackTypes, DiscordRegexNames } = require("detritus-client/lib/constants");
const { InteractionCallbackTypes, DiscordRegexNames } = require("detritus-client/lib/constants");
const { bold } = require("detritus-client/lib/utils/markup");
const onlyEmoji = require('emoji-aware').onlyEmoji;
@ -51,7 +50,7 @@ module.exports = {
args: [
{name: 'type', default: 'twitter', type: 'string', help: `Emoji platform type`}
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
await context.triggerTyping()
let msg = context.message;

View file

@ -1,12 +1,12 @@
const { emojipedia } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { createEmbed } = require("#utils/embed");
const { pill, smallIconPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { STATICS, STATIC_ASSETS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions, InteractionCallbackTypes, MessageComponentButtonStyles } = require("detritus-client/lib/constants");
const { InteractionCallbackTypes, MessageComponentButtonStyles } = require("detritus-client/lib/constants");
const { Components } = require("detritus-client/lib/utils");
const onlyEmoji = require('emoji-aware').onlyEmoji;
@ -43,7 +43,7 @@ module.exports = {
usage: 'emojipedia <emoji>',
slashCommand: "emojipedia"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
await context.triggerTyping()
let msg = context.message;

View file

@ -1,11 +1,10 @@
const { REXTESTER_LANGUAGES, COLORS, REXTESTER_COMPILER_ARGS } = require("#constants");
const { REXTESTER_LANGUAGES, COLORS, REXTESTER_COMPILER_ARGS, PERMISSION_GROUPS } = require("#constants");
const { createEmbed } = require("#utils/embed");
const { codeblock, highlight } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
// TODO: Turn this into a general purpose permissions constant
const { DiscordRegexNames, Permissions } = require("detritus-client/lib/constants");
const { DiscordRegexNames } = require("detritus-client/lib/constants");
const { Utils } = require("detritus-client");
const superagent = require('superagent')
@ -23,7 +22,7 @@ module.exports = {
args: [
{name: 'lang', default: 'node'}
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -1,14 +1,11 @@
const { paginator } = require("#client");
const { COLORS } = require("#constants");
const { COLORS, PERMISSION_GROUPS } = require("#constants");
const { createEmbed, page, formatPaginationEmbeds } = require("#utils/embed");
const { codeblock, pill, smallIconPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { STATIC_ICONS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
const TEX_REGEX = /(\$\$?.*?\$\$?)/g
@ -24,7 +21,7 @@ module.exports = {
category: 'utils',
usage: 'latex <expression> [-i]'
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -1,4 +1,5 @@
const { googleVisionOcr } = require("#api");
const { PERMISSION_GROUPS } = require("#constants");
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
@ -6,9 +7,6 @@ const { codeblock, smallIconPill } = require("#utils/markdown");
const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'ocr',
metadata: {
@ -18,7 +16,7 @@ module.exports = {
usage: 'ocr <attachment>',
slashCommand: "OCR"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context) => {
context.triggerTyping();
let image = await getRecentImage(context, 50)

View file

@ -1,5 +1,5 @@
const { googleVisionOcr, googleTranslate } = require("#api");
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require("#constants");
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require("#constants");
const { getRecentImage } = require("#utils/attachment");
const { createEmbed } = require("#utils/embed");
@ -8,9 +8,6 @@ const { editOrReply } = require("#utils/message");
const { STATICS } = require("#utils/statics");
const { isSupported, getCodeFromAny } = require('#utils/translate');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'ocrtr',
label: 'to',
@ -26,7 +23,7 @@ module.exports = {
args: [
{name: 'from', default: 'auto', type: 'string', help: "Language to translate from"}
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();

View file

@ -4,10 +4,8 @@ const { editOrReply } = require('#utils/message')
const { codeblock, icon, smallIconPill } = require('#utils/markdown');
const { STATICS } = require('#utils/statics');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const superagent = require('superagent');
const { PERMISSION_GROUPS } = require("#constants");
module.exports = {
name: 'qr',
@ -20,7 +18,7 @@ module.exports = {
category: 'utils',
usage: `qr <contents>`
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
// If we have an argument, generate code

View file

@ -1,11 +1,9 @@
const { PERMISSION_GROUPS } = require("#constants");
const { WebUtilsWebPageScreenshot} = require("#obelisk");
const { createEmbed } = require("#utils/embed");
const { editOrReply } = require("#utils/message");
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
label: "url",
name: "screenshot",
@ -18,7 +16,7 @@ module.exports = {
usage: 'screenshot <url>',
slashCommand: "screenshot"
},
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.ATTACH_FILES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline, ...PERMISSION_GROUPS.attachments],
run: async (context, args) => {
if (!args.url) return editOrReply(context, createEmbed("warning", context, "No url supplied."))

View file

@ -1,5 +1,5 @@
const { googleTranslate } = require('#api');
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS } = require('#constants');
const { TRANSLATE_LANGUAGES, TRANSLATE_DISPLAY_MAPPINGS, PERMISSION_GROUPS } = require('#constants');
const { createEmbed } = require('#utils/embed')
const { codeblock, icon, pill, stringwrap, smallIconPill } = require('#utils/markdown');
@ -7,9 +7,6 @@ const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics');
const { isSupported, getCodeFromAny } = require('#utils/translate');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
module.exports = {
name: 'translate',
label: 'text',
@ -25,7 +22,7 @@ module.exports = {
{name: 'to', default: 'en', type: 'language', help: "Target Language"},
{name: 'from', default: 'auto', type: 'language', help: "Source Language"}
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.READ_MESSAGE_HISTORY, Permissions.USE_EXTERNAL_EMOJIS],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
await context.triggerTyping();

View file

@ -1,14 +1,12 @@
const { darksky } = require('#api');
const { paginator } = require('#client');
const { PERMISSION_GROUPS } = require('#constants');
const { createEmbed, page } = require('#utils/embed')
const { pill, iconPill, smallPill, weatherIcon, timestamp, icon, link, stringwrap} = require('#utils/markdown');
const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics');
// TODO: Turn this into a general purpose permissions constant
const { Permissions } = require("detritus-client/lib/constants");
const modifiers = {
"°C": (i)=>i,
"°F": (i)=>(i*(9/5))+32,
@ -114,7 +112,7 @@ module.exports = {
args: [
{name: 't', default: 'celcius', type: 'units', help: "Temperature Units to use."},
],
permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS, Permissions.READ_MESSAGE_HISTORY],
permissionsClient: [...PERMISSION_GROUPS.baseline],
run: async (context, args) => {
context.triggerTyping();
if(!args.query) return editOrReply(context, createEmbed("warning", context, `Missing Parameter (location).`))

View file

@ -1,3 +1,5 @@
const { Permissions } = require("detritus-client/lib/constants")
module.exports.DISCORD_INVITES = Object.freeze({
support: "https://discord.gg/8c4p6xcjru",
privacy: "https://discord.gg/sQs8FhcTGh",
@ -38,6 +40,22 @@ module.exports.COLORS = Object.freeze({
incognito: 10057726,
})
// Permission requirements that apply to commands
module.exports.PERMISSION_GROUPS = Object.freeze({
// Baseline permission set for regular commands
baseline: [Permissions.SEND_MESSAGES, Permissions.VIEW_CHANNEL, Permissions.USE_EXTERNAL_EMOJIS, Permissions.EMBED_LINKS, Permissions.READ_MESSAGE_HISTORY],
// Baseline permission set for slash commands
baseline_slash: [
Permissions.SEND_MESSAGES, Permissions.EMBED_LINKS,
// Related to using user commands
Permissions.USE_APPLICATION_COMMANDS,
1n << 50n // Use external apps
],
// Permissions for all commands that use attachments
attachments: [Permissions.ATTACH_FILES],
})
module.exports.BADGE_ICONS = Object.freeze({
"active_developer": "<:b:1263607989873414196>",
"bot_developer": "<:b:1263605652337463489>",
@ -1589,6 +1607,12 @@ module.exports.YOUTUBE_CATEGORIES = {
// Special character that allows for fully hidden masked links on all (supported) platforms.
module.exports.HIDDEN_MASKED_LINK_CHARACTER = "󠄴";
// Allows force-displaying an incognito reason
module.exports.INCOGNITO_REASONS = Object.freeze({
permissions: 50013
})
/**
* These will force the command to become "incognito".
*/
@ -1601,7 +1625,7 @@ module.exports.MESSAGE_BLOCK_REASONS = Object.freeze({
message: "the server's AutoMod setup",
support_article: 4421269296535
},
// TODO: Handle permissions properly, this works as a "hack" for now.
// TODO: Handle permissions properly, this works as a "hack" for now.e
50013: {
message: "the channel's permission setup",
support_article: 10543994968087

View file

@ -1,18 +1,31 @@
const { MessageFlags, InteractionCallbackTypes } = require("detritus-client/lib/constants")
const { Context } = require("detritus-client/lib/command")
const { InteractionContext } = require("detritus-client/lib/interaction")
const { InteractionContext } = require("detritus-client/lib/interaction");
const { PERMISSION_GROUPS, INCOGNITO_REASONS } = require("#constants");
/**
* Acknowledges a command or interaction.
* @param { InteractionContext|Context } context Command/interaction context
* @param { boolean } incognito Specifies if the interaction should run privately (only applicable for interactions)
* @param { Array } permissions Array of permissions that are required to execute this command
*/
module.exports.acknowledge = async function(context, incognito = false){
module.exports.acknowledge = async function(context, incognito = false, permissions = [...PERMISSION_GROUPS.baseline_slash]){
// Interaction flow
if(context.editOrRespond){
if(!context._meta) context._meta = {};
// Handle permissions for user commands in a guild context
if(context.member && permissions.length >= 1){
for(const p of permissions){
if(!context.member.can(p)){
incognito = true;
context._meta.incognitoReason = INCOGNITO_REASONS.permissions;
}
}
}
if(incognito){
if(!context._meta) context._meta = {};
context._meta.isIncognito = true;
return await context.respond({data: { flags: MessageFlags.EPHEMERAL }, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE});
}

View file

@ -32,6 +32,21 @@ module.exports.editOrReply = function(context, message, disableReference = false
});
}
if(context._meta?.incognitoReason){
// TODO: make this an applyIncognitoNotice helper
if(message.content){
if(message.embeds && message.embeds.length <= 4){
message.embeds.unshift({
description: `${icon("flask_incognito")} This response has been made incognito due to ${MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].message}.`,
color: COLORS.incognito
})
}
} else {
// Uses new subtext formatting to look more "native"
message.content = `-# ${icon("flask_mini")} This response has been made incognito due to ${MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].message}${link("https://support.discord.com/hc/en-us/articles/" + MESSAGE_BLOCK_REASONS[context._meta.incognitoReason].support_article, "Learn More", "Support Article")}`
}
}
return context.editOrRespond(message).catch(async (e)=>{
const errorData = await e.response.json();
if(MESSAGE_BLOCK_REASONS[errorData.code]){

View file

@ -11,7 +11,7 @@
"author": "bignutty",
"license": "ISC",
"dependencies": {
"detritus-client": "^0.17.0-beta.40",
"detritus-client": "^0.17.0-beta.59",
"dotenv": "^16.4.5",
"emoji-aware": "^3.1.0",
"eventemitter3": "^4.0.7",