mirror of
https://github.com/keanuplayz/TravBot-v3.git
synced 2024-08-15 02:33:12 +00:00
Addressed issue with inline replies using prefix
This commit is contained in:
parent
7b4d8b934c
commit
8da5ad0ca6
2 changed files with 43 additions and 7 deletions
|
@ -110,7 +110,18 @@ if (process.argv[2] === "dev") {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPrefix(guild: DiscordGuild | null): string {
|
export function getPrefix(guild: DiscordGuild | null): string {
|
||||||
return Storage.getGuild(guild?.id || "N/A").prefix ?? Config.prefix;
|
let prefix = Config.prefix;
|
||||||
|
|
||||||
|
if (guild) {
|
||||||
|
const possibleGuildPrefix = Storage.getGuild(guild.id).prefix;
|
||||||
|
|
||||||
|
// Here, lossy comparison works in our favor because you wouldn't want an empty string to trigger the prefix.
|
||||||
|
if (possibleGuildPrefix) {
|
||||||
|
prefix = possibleGuildPrefix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EmoteRegistryDumpEntry {
|
export interface EmoteRegistryDumpEntry {
|
||||||
|
|
|
@ -22,16 +22,41 @@ export default new Event<"message">({
|
||||||
replyEventListeners.get(`${reference.channelID}-${reference.messageID}`)?.(message);
|
replyEventListeners.get(`${reference.channelID}-${reference.messageID}`)?.(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
const prefix = getPrefix(message.guild);
|
let prefix = getPrefix(message.guild);
|
||||||
|
const originalPrefix = prefix;
|
||||||
|
let exitEarly = !message.content.startsWith(prefix);
|
||||||
|
const clientUser = message.client.user;
|
||||||
|
let usesBotSpecificPrefix = false;
|
||||||
|
|
||||||
if (!message.content.startsWith(prefix) && !message.reference) {
|
// If the client user exists, check if it starts with the bot-specific prefix.
|
||||||
if (message.client.user && message.mentions.has(message.client.user))
|
if (clientUser) {
|
||||||
message.channel.send(`${message.author.toString()}, my prefix on this guild is \`${prefix}\`.`);
|
// If the prefix starts with the bot-specific prefix, go off that instead (these two options must mutually exclude each other).
|
||||||
return;
|
// The pattern here has an optional space at the end to capture that and make it not mess with the header and args.
|
||||||
|
const matches = message.content.match(new RegExp(`^<@!?${clientUser.id}> ?`));
|
||||||
|
|
||||||
|
if (matches) {
|
||||||
|
prefix = matches[0];
|
||||||
|
exitEarly = false;
|
||||||
|
usesBotSpecificPrefix = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If it doesn't start with the current normal prefix or the bot-specific unique prefix, exit the thread of execution early.
|
||||||
|
// Inline replies should still be captured here because if it doesn't exit early, two characters for a two-length prefix would still trigger commands.
|
||||||
|
if (exitEarly) return;
|
||||||
|
|
||||||
const [header, ...args] = message.content.substring(prefix.length).split(/ +/);
|
const [header, ...args] = message.content.substring(prefix.length).split(/ +/);
|
||||||
|
|
||||||
|
// If the message is just the prefix itself, move onto this block.
|
||||||
|
if (header === "" && args.length === 0) {
|
||||||
|
// I moved the bot-specific prefix to a separate conditional block to separate the logic.
|
||||||
|
// And because it listens for the mention as a prefix instead of a free-form mention, inline replies (probably) shouldn't ever trigger this unintentionally.
|
||||||
|
if (usesBotSpecificPrefix) {
|
||||||
|
message.channel.send(`${message.author.toString()}, my prefix on this guild is \`${originalPrefix}\`.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!commands.has(header)) return;
|
if (!commands.has(header)) return;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -66,7 +91,7 @@ export default new Event<"message">({
|
||||||
for (let param of args) {
|
for (let param of args) {
|
||||||
if (command.endpoint) {
|
if (command.endpoint) {
|
||||||
if (command.subcommands.size > 0 || command.user || command.number || command.any)
|
if (command.subcommands.size > 0 || command.user || command.number || command.any)
|
||||||
$.warn(`An endpoint cannot have subcommands! Check ${prefix}${header} again.`);
|
$.warn(`An endpoint cannot have subcommands! Check ${originalPrefix}${header} again.`);
|
||||||
isEndpoint = true;
|
isEndpoint = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue