parse mentions and emotes
This commit is contained in:
		
							parent
							
								
									353afbc23c
								
							
						
					
					
						commit
						3a7675ab62
					
				
					 1 changed files with 78 additions and 2 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue