mirror of
https://github.com/xHyroM/roles-bot.git
synced 2024-11-22 08:21:05 +01:00
Allow empty message
This commit is contained in:
parent
6ec3bb47b3
commit
1f23b2536e
3 changed files with 19 additions and 18 deletions
|
@ -1,5 +1,6 @@
|
||||||
import { APIApplicationCommandInteraction, APIInteractionResponse, APIMessageComponentInteraction, APIPingInteraction, InteractionResponseType, InteractionType, MessageFlags, RouteBases, Routes } from 'discord-api-types/v9';
|
import { APIApplicationCommandInteraction, APIInteractionResponse, APIMessageComponentInteraction, APIPingInteraction, InteractionResponseType, InteractionType, MessageFlags, RouteBases, Routes } from 'discord-api-types/v9';
|
||||||
import { isJSON } from './utils/isJson';
|
import { isJSON } from './utils/isJson';
|
||||||
|
import { resolvePartialEmoji } from './utils/resolveEmoji';
|
||||||
import { verify } from './utils/verify';
|
import { verify } from './utils/verify';
|
||||||
|
|
||||||
const respond = (response: APIInteractionResponse) => new Response(JSON.stringify(response), {headers: {'content-type': 'application/json'}});
|
const respond = (response: APIInteractionResponse) => new Response(JSON.stringify(response), {headers: {'content-type': 'application/json'}});
|
||||||
|
@ -42,11 +43,11 @@ export const handleRequest = async(request: Request): Promise<Response> => {
|
||||||
if (!json) return badFormatting();
|
if (!json) return badFormatting();
|
||||||
|
|
||||||
const channelId = json.channel;
|
const channelId = json.channel;
|
||||||
const message = json.message?.toString();
|
let message = json.message?.toString();
|
||||||
let roles = json.roles;
|
let roles = json.roles;
|
||||||
|
|
||||||
if (!channelId) return badFormatting();
|
if (!channelId) return badFormatting();
|
||||||
if (!message) return badFormatting();
|
if (!message) message = '';
|
||||||
if (!roles || Object.values(json.roles).filter((role: any) => role.id && role.label).length === 0 || roles.length === 0 || roles.length > 25) return badFormatting(roles.length > 25);
|
if (!roles || Object.values(json.roles).filter((role: any) => role.id && role.label).length === 0 || roles.length === 0 || roles.length > 25) return badFormatting(roles.length > 25);
|
||||||
|
|
||||||
roles = roles.map((r: any) => {
|
roles = roles.map((r: any) => {
|
||||||
|
@ -88,13 +89,13 @@ export const handleRequest = async(request: Request): Promise<Response> => {
|
||||||
content: message,
|
content: message,
|
||||||
components: finalComponents
|
components: finalComponents
|
||||||
})
|
})
|
||||||
}).catch(() => {});
|
}).catch(e => e);
|
||||||
|
|
||||||
return respond({
|
return respond({
|
||||||
type: InteractionResponseType.ChannelMessageWithSource,
|
type: InteractionResponseType.ChannelMessageWithSource,
|
||||||
data: {
|
data: {
|
||||||
flags: 64,
|
flags: 64,
|
||||||
content: fetched?.ok ? 'Done!' : 'Error, invalid channelId or duplication button ids.'
|
content: fetched?.ok ? 'Done!' : 'Error, bad channel id/missing permissions.'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (interaction.type === InteractionType.MessageComponent) {
|
} else if (interaction.type === InteractionType.MessageComponent) {
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
* https://github.com/discordjs/discord.js/blob/3c0bbac82fa9988af4a62ff00c66d149fbe6b921/packages/discord.js/src/util/Util.js#L292-L311
|
* https://github.com/discordjs/discord.js/blob/3c0bbac82fa9988af4a62ff00c66d149fbe6b921/packages/discord.js/src/util/Util.js#L292-L311
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const resolvePartialEmoji = (emoji: string) => {
|
export const resolvePartialEmoji = (emoji: string) => {
|
||||||
if (!emoji) return null;
|
if (!emoji) return null;
|
||||||
if (typeof emoji === 'string') return /^\d{17,19}$/.test(emoji) ? { id: emoji } : parseEmoji(emoji);
|
if (typeof emoji === 'string') return /^\d{17,19}$/.test(emoji) ? { id: emoji } : parseEmoji(emoji);
|
||||||
const { id, name, animated } = emoji;
|
const { id, name, animated } = emoji;
|
||||||
if (!id && !name) return null;
|
if (!id && !name) return null;
|
||||||
return { id, name, animated: Boolean(animated) };
|
return { id, name, animated: Boolean(animated) };
|
||||||
}
|
};
|
||||||
|
|
||||||
const parseEmoji = (text: string) => {
|
export const parseEmoji = (text: string) => {
|
||||||
if (text.includes('%')) text = decodeURIComponent(text);
|
if (text.includes('%')) text = decodeURIComponent(text);
|
||||||
if (!text.includes(':')) return { animated: false, name: text, id: null };
|
if (!text.includes(':')) return { animated: false, name: text, id: null };
|
||||||
|
|
||||||
const match = text.match(/<?(?:(a):)?(\w{2,32}):(\d{17,19})?>?/);
|
const match = text.match(/<?(?:(a):)?(\w{2,32}):(\d{17,19})?>?/);
|
||||||
return match && { animated: Boolean(match[1]), name: match[2], id: match[3] ?? null };
|
return match && { animated: Boolean(match[1]), name: match[2], id: match[3] ?? null };
|
||||||
}
|
};
|
|
@ -18,7 +18,7 @@ export default function Home() {
|
||||||
<h1>Generate</h1>
|
<h1>Generate</h1>
|
||||||
<form>
|
<form>
|
||||||
<input placeholder="Your Message" name="message" id="message"/><br />
|
<input placeholder="Your Message" name="message" id="message"/><br />
|
||||||
<input placeholder="Channel Id" name="channel" id="channel"/>
|
<input placeholder="Channel Id*" name="channel" id="channel" required/>
|
||||||
</form>
|
</form>
|
||||||
<button id="addRole">Add Role</button>
|
<button id="addRole">Add Role</button>
|
||||||
<button id="buttonCopy">Copy</button>
|
<button id="buttonCopy">Copy</button>
|
||||||
|
|
Loading…
Reference in a new issue