parse mentions and emotes
This commit is contained in:
parent
353afbc23c
commit
3a7675ab62
|
@ -1,10 +1,55 @@
|
||||||
const chalk = require("chalk");
|
const chalk = require("chalk");
|
||||||
|
|
||||||
|
const REGEX_MENTION = /<@!?(\d+)>/g;
|
||||||
|
const REGEX_ROLE_MENTION = /<@&?(\d+)>/g;
|
||||||
|
const REGEX_CHANNEL = /<#(\d+)>/g;
|
||||||
|
const REGEX_EMOTE = /<(?:\u200b|&)?a?:(\w+):(\d+)>/g;
|
||||||
|
const REGEX_COMMAND = /<\/([^\s]+?):(\d+)>/g;
|
||||||
|
|
||||||
|
function replaceMentions(_, id) {
|
||||||
|
const user = comcord.client.users.get(id);
|
||||||
|
if (user) {
|
||||||
|
return `@${user.username}`;
|
||||||
|
} else {
|
||||||
|
return "@Unknown User";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function replaceRoles(_, id) {
|
||||||
|
const role = comcord.client.guilds
|
||||||
|
.get(comcord.state.currentGuild)
|
||||||
|
.roles.get(id);
|
||||||
|
if (role) {
|
||||||
|
return `[@${role.name}]`;
|
||||||
|
} else {
|
||||||
|
return "[@Unknown Role]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function replaceChannels(_, id) {
|
||||||
|
const guildForChannel = comcord.client.channelGuildMap[id];
|
||||||
|
if (guildForChannel) {
|
||||||
|
const channel = comcord.client.guilds.get(guildForChannel).channels.get(id);
|
||||||
|
if (channel) {
|
||||||
|
return `#${channel.name}`;
|
||||||
|
} else {
|
||||||
|
return "#unknown-channel";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "#unknown-channel";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function replaceEmotes(_, name, id) {
|
||||||
|
return `:${name}:`;
|
||||||
|
}
|
||||||
|
function replaceCommands(_, name, id) {
|
||||||
|
return `/${name}`;
|
||||||
|
}
|
||||||
|
|
||||||
function processMessage({
|
function processMessage({
|
||||||
name,
|
name,
|
||||||
content,
|
content,
|
||||||
bot,
|
bot,
|
||||||
attachments,
|
attachments,
|
||||||
|
stickers,
|
||||||
reply,
|
reply,
|
||||||
noColor = false,
|
noColor = false,
|
||||||
}) {
|
}) {
|
||||||
|
@ -17,7 +62,13 @@ function processMessage({
|
||||||
const headerLength = 5 + reply.author.username.length;
|
const headerLength = 5 + reply.author.username.length;
|
||||||
const length = headerLength + reply.content.length;
|
const length = headerLength + reply.content.length;
|
||||||
|
|
||||||
const replyContent = reply.content.replace(/\n/g, " ");
|
let replyContent = reply.content.replace(/\n/g, " ");
|
||||||
|
replyContent = replyContent
|
||||||
|
.replace(REGEX_MENTION, replaceMentions)
|
||||||
|
.replace(REGEX_ROLE_MENTION, replaceRoles)
|
||||||
|
.replace(REGEX_CHANNEL, replaceChannels)
|
||||||
|
.replace(REGEX_EMOTE, replaceEmotes)
|
||||||
|
.replace(REGEX_COMMAND, replaceCommands);
|
||||||
|
|
||||||
if (noColor) {
|
if (noColor) {
|
||||||
console.log(
|
console.log(
|
||||||
|
@ -42,8 +93,15 @@ function processMessage({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
content = content
|
||||||
|
.replace(REGEX_MENTION, replaceMentions)
|
||||||
|
.replace(REGEX_ROLE_MENTION, replaceRoles)
|
||||||
|
.replace(REGEX_CHANNEL, replaceChannels)
|
||||||
|
.replace(REGEX_EMOTE, replaceEmotes)
|
||||||
|
.replace(REGEX_COMMAND, replaceCommands);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(content.startsWith("*") && content.endsWith("*")) ||
|
(content.length > 1 && content.startsWith("*") && content.endsWith("*")) ||
|
||||||
(content.startsWith("_") && content.endsWith("_"))
|
(content.startsWith("_") && content.endsWith("_"))
|
||||||
) {
|
) {
|
||||||
if (noColor) {
|
if (noColor) {
|
||||||
|
@ -83,6 +141,22 @@ function processMessage({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stickers) {
|
||||||
|
for (const sticker of stickers) {
|
||||||
|
if (noColor) {
|
||||||
|
console.log(
|
||||||
|
`<sticker: "${sticker.name}" https://media.discordapp.net/stickers/${sticker.id}.png >`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
chalk.bold.yellow(
|
||||||
|
`<sticker: "${sticker.name}" https://media.discordapp.net/stickers/${sticker.id}.png >`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function processQueue() {
|
function processQueue() {
|
||||||
|
@ -98,6 +172,7 @@ function processQueue() {
|
||||||
bot: msg.author.bot,
|
bot: msg.author.bot,
|
||||||
content: line,
|
content: line,
|
||||||
attachments: index == lines.length - 1 ? msg.attachments : [],
|
attachments: index == lines.length - 1 ? msg.attachments : [],
|
||||||
|
stickers: index == lines.length - 1 ? msg.stickerItems : [],
|
||||||
reply: index == 0 ? msg.referencedMessage : null,
|
reply: index == 0 ? msg.referencedMessage : null,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -107,6 +182,7 @@ function processQueue() {
|
||||||
bot: msg.author.bot,
|
bot: msg.author.bot,
|
||||||
content: msg.content,
|
content: msg.content,
|
||||||
attachments: msg.attachments,
|
attachments: msg.attachments,
|
||||||
|
stickers: msg.stickerItems,
|
||||||
reply: msg.referencedMessage,
|
reply: msg.referencedMessage,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue