mirror of
https://github.com/kirameki-cafe/Yumi.git
synced 2026-09-13 18:59:19 +00:00
Better message and interaction support
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { Channel, channel } from "diagnostics_channel";
|
import { Channel, channel } from "diagnostics_channel";
|
||||||
import { GuildChannel, GuildMember, Message, Permissions, TextChannel, MessageActionRow, MessageButton, Interaction, CommandInteraction, Role, ThreadChannel } from "discord.js";
|
import { GuildChannel, GuildMember, Message, Permissions, TextChannel, MessageActionRow, MessageButton, Interaction, CommandInteraction, Role, ThreadChannel } from "discord.js";
|
||||||
import App from "..";
|
import App from "..";
|
||||||
import { getEmotes, makeSuccessEmbed, makeProcessingEmbed, makeInfoEmbed, makeErrorEmbed, sendMessage, sendReply } from "../utils/DiscordMessage";
|
import { getEmotes, makeSuccessEmbed, makeProcessingEmbed, makeInfoEmbed, makeErrorEmbed, sendMessage, sendReply, sendMessageOrInteractionResponse } from "../utils/DiscordMessage";
|
||||||
import Logger from "../libs/Logger";
|
import Logger from "../libs/Logger";
|
||||||
import DiscordProvider from "../providers/Discord";
|
import DiscordProvider from "../providers/Discord";
|
||||||
import Prisma from "../providers/Prisma";
|
import Prisma from "../providers/Prisma";
|
||||||
@@ -186,15 +186,15 @@ export default class MembershipScreening {
|
|||||||
if(!Guild.MembershipScreening_Enabled) {
|
if(!Guild.MembershipScreening_Enabled) {
|
||||||
|
|
||||||
if(Guild.MembershipScreening_GivenRole === null || Guild.MembershipScreening_ApprovalChannel == null)
|
if(Guild.MembershipScreening_GivenRole === null || Guild.MembershipScreening_ApprovalChannel == null)
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_PARAMETER(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_PARAMETER(data)] });
|
||||||
|
|
||||||
await Prisma.client.guild.update({ where: { id: data.guildId! }, data: { MembershipScreening_Enabled: true }});
|
await Prisma.client.guild.update({ where: { id: data.guildId! }, data: { MembershipScreening_Enabled: true }});
|
||||||
|
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.ENABLED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.ENABLED(data)] });
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.ALREADY_ENABLED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.ALREADY_ENABLED(data)] });
|
||||||
},
|
},
|
||||||
disable: async(data: Message | Interaction) => {
|
disable: async(data: Message | Interaction) => {
|
||||||
if(Guild.MembershipScreening_Enabled) {
|
if(Guild.MembershipScreening_Enabled) {
|
||||||
@@ -203,10 +203,10 @@ export default class MembershipScreening {
|
|||||||
data: {MembershipScreening_Enabled: false}
|
data: {MembershipScreening_Enabled: false}
|
||||||
});
|
});
|
||||||
|
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.DISABLED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.DISABLED(data)] });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.ALREADY_DISABLED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.ALREADY_DISABLED(data)] });
|
||||||
},
|
},
|
||||||
setRole: async(data: Message | Interaction) => {
|
setRole: async(data: Message | Interaction) => {
|
||||||
|
|
||||||
@@ -215,7 +215,7 @@ export default class MembershipScreening {
|
|||||||
if(data instanceof Message) {
|
if(data instanceof Message) {
|
||||||
let _name: string;
|
let _name: string;
|
||||||
if(typeof args[1] === 'undefined')
|
if(typeof args[1] === 'undefined')
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_ROLE_MENTIONED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_ROLE_MENTIONED(data)] });
|
||||||
|
|
||||||
let __name = args;
|
let __name = args;
|
||||||
__name.shift();
|
__name.shift();
|
||||||
@@ -227,46 +227,46 @@ export default class MembershipScreening {
|
|||||||
|
|
||||||
|
|
||||||
if(typeof role === 'undefined' || !role)
|
if(typeof role === 'undefined' || !role)
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_ROLE_FOUND(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_ROLE_FOUND(data)] });
|
||||||
|
|
||||||
await Prisma.client.guild.update({ where: {id: data.guildId! }, data: {MembershipScreening_GivenRole: role.id}});
|
await Prisma.client.guild.update({ where: {id: data.guildId! }, data: {MembershipScreening_GivenRole: role.id}});
|
||||||
|
|
||||||
if(role.managed)
|
if(role.managed)
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.MANAGED_ROLE(data, role)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.MANAGED_ROLE(data, role)] });
|
||||||
|
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.CONFIGURED_ROLE(data, role)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.CONFIGURED_ROLE(data, role)] });
|
||||||
},
|
},
|
||||||
setChannel: async(data: Message | CommandInteraction) => {
|
setChannel: async(data: Message | CommandInteraction) => {
|
||||||
|
|
||||||
let channel;
|
let channel;
|
||||||
if(data instanceof Message) {
|
if(data instanceof Message) {
|
||||||
if(typeof args[1] === 'undefined')
|
if(typeof args[1] === 'undefined')
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_CHANNEL_MENTIONED(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_CHANNEL_MENTIONED(data)] });
|
||||||
channel = data.mentions.channels.first();
|
channel = data.mentions.channels.first();
|
||||||
}
|
}
|
||||||
else if(data instanceof CommandInteraction)
|
else if(data instanceof CommandInteraction)
|
||||||
channel = data.options.getChannel('channel');
|
channel = data.options.getChannel('channel');
|
||||||
|
|
||||||
if(!channel)
|
if(!channel)
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_CHANNEL_FOUND(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_CHANNEL_FOUND(data)] });
|
||||||
|
|
||||||
let TargetChannel = data.guild!.channels.cache.get(channel.id);
|
let TargetChannel = data.guild!.channels.cache.get(channel.id);
|
||||||
if(typeof TargetChannel === 'undefined') return;
|
if(typeof TargetChannel === 'undefined') return;
|
||||||
|
|
||||||
if(TargetChannel instanceof ThreadChannel || TargetChannel.isThread())
|
if(TargetChannel instanceof ThreadChannel || TargetChannel.isThread())
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.INVALID_CHANNEL_THREAD(data, TargetChannel)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.INVALID_CHANNEL_THREAD(data, TargetChannel)] });
|
||||||
|
|
||||||
if(!TargetChannel.isText())
|
if(!TargetChannel.isText())
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.INVALID_CHANNEL(data, TargetChannel)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.INVALID_CHANNEL(data, TargetChannel)] });
|
||||||
|
|
||||||
if(!(data!.guild!.me?.permissionsIn(TargetChannel).has([Permissions.FLAGS.SEND_MESSAGES, Permissions.FLAGS.VIEW_CHANNEL])))
|
if(!(data!.guild!.me?.permissionsIn(TargetChannel).has([Permissions.FLAGS.SEND_MESSAGES, Permissions.FLAGS.VIEW_CHANNEL])))
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.BOT_NO_PERMISSION(data, TargetChannel)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.BOT_NO_PERMISSION(data, TargetChannel)] });
|
||||||
|
|
||||||
await Prisma.client.guild.update({ where: {id: data.guildId! }, data: { MembershipScreening_ApprovalChannel: channel.id }});
|
await Prisma.client.guild.update({ where: {id: data.guildId! }, data: { MembershipScreening_ApprovalChannel: channel.id }});
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.CONFIGURED_CHANNEL(data, TargetChannel)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.CONFIGURED_CHANNEL(data, TargetChannel)] });
|
||||||
},
|
},
|
||||||
createMessage: async(data: Message | CommandInteraction) => {
|
createMessage: async(data: Message | CommandInteraction) => {
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.CREATE_MESSAGE()] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.CREATE_MESSAGE()] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,17 +275,17 @@ export default class MembershipScreening {
|
|||||||
if(isMessage) {
|
if(isMessage) {
|
||||||
if(data === null || !data.guildId || data.member === null || data.guild === null) return;
|
if(data === null || !data.guildId || data.member === null || data.guild === null) return;
|
||||||
if (!data.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR]))
|
if (!data.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR]))
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_PERMISSION(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_PERMISSION(data)] });
|
||||||
|
|
||||||
if(args.length === 0) {
|
if(args.length === 0) {
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.MSINFO(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.MSINFO(data)] });
|
||||||
}
|
}
|
||||||
query = args[0].toLowerCase();
|
query = args[0].toLowerCase();
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(isSlashCommand) {
|
else if(isSlashCommand) {
|
||||||
if(!data.guild.members.cache.get(data.user.id)?.permissions.has([Permissions.FLAGS.ADMINISTRATOR]))
|
if(!data.guild.members.cache.get(data.user.id)?.permissions.has([Permissions.FLAGS.ADMINISTRATOR]))
|
||||||
return await this.sendResponse(data, { embeds: [EMBEDS.NO_PERMISSION(data)] });
|
return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.NO_PERMISSION(data)] });
|
||||||
|
|
||||||
query = args.getSubcommand();
|
query = args.getSubcommand();
|
||||||
}
|
}
|
||||||
@@ -485,12 +485,4 @@ export default class MembershipScreening {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendResponse(data: Message | Interaction, payload: any) {
|
|
||||||
const isSlashCommand = data instanceof Interaction && data.isCommand();
|
|
||||||
const isMessage = data instanceof Message;
|
|
||||||
|
|
||||||
if(isSlashCommand) return await data.reply(payload);
|
|
||||||
else if(isMessage) return await sendReply(data, payload);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { MessageEmbed, User, MessagePayload, MessageOptions, TextBasedChannels, TextChannel, DMChannel, BaseGuildTextChannel, Message, ColorResolvable } from "discord.js";
|
import { MessageEmbed, User, MessagePayload, MessageOptions, TextBasedChannels, TextChannel, DMChannel, BaseGuildTextChannel, Message, ColorResolvable, Interaction, InteractionReplyOptions } from "discord.js";
|
||||||
import App from "..";
|
import App from "..";
|
||||||
import Logger from "../libs/Logger";
|
import Logger from "../libs/Logger";
|
||||||
|
|
||||||
@@ -85,6 +85,36 @@ export async function sendReply(rMessage: Message, options: string | MessagePayl
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export async function sendMessageOrInteractionResponse(data: Message | Interaction, payload: MessageOptions | InteractionReplyOptions) {
|
||||||
|
const isSlashCommand = data instanceof Interaction && data.isCommand();
|
||||||
|
const isMessage = data instanceof Message;
|
||||||
|
|
||||||
|
if(isSlashCommand) {
|
||||||
|
if(!data.replied) {
|
||||||
|
let message;
|
||||||
|
try { return await data.reply(payload); }
|
||||||
|
catch(errorDM) {
|
||||||
|
Logger.error(`Cannot find available destinations to send the message CID: ${data.channel!.id} UID: ${data.user.id} DM_ERR: ${errorDM}`);
|
||||||
|
return;
|
||||||
|
} finally {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let message;
|
||||||
|
try { return await data.followUp(payload); }
|
||||||
|
catch(errorDM) {
|
||||||
|
Logger.error(`Cannot find available destinations to send the message CID: ${data.channel!.id} UID: ${data.user.id} DM_ERR: ${errorDM}`);
|
||||||
|
return;
|
||||||
|
} finally {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(isMessage) return await sendReply(data, payload);
|
||||||
|
}
|
||||||
|
|
||||||
export function getEmotes() {
|
export function getEmotes() {
|
||||||
return emotes;
|
return emotes;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user