Pepperbot initializing
This commit is contained in:
commit
18c5085262
20 changed files with 2762 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
.env
|
||||
src/logs
|
||||
node_modules/
|
||||
TheBubbles/
|
||||
src/commands/cbrowser.js
|
1733
package-lock.json
generated
Normal file
1733
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
19
package.json
Normal file
19
package.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name": "pepperbot",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"discord.js": "^14.13.0",
|
||||
"discord.js-collector": "^1.8.9",
|
||||
"dotenv": "^16.3.1",
|
||||
"emoji-regex": "^10.2.1",
|
||||
"regex": "^0.1.1"
|
||||
}
|
||||
}
|
26
src/commands/commands.js
Normal file
26
src/commands/commands.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
const { EmbedBuilder } = require("discord.js");
|
||||
const fs = require("fs");
|
||||
module.exports = {
|
||||
name: "commands",
|
||||
description: "commands list",
|
||||
execute(message, args) {
|
||||
let text = "";
|
||||
|
||||
const commandFiles = fs
|
||||
.readdirSync("src/commands/")
|
||||
.filter((file) => file.endsWith(".js"));
|
||||
for (const file of commandFiles) {
|
||||
const command = require(`./${file}`);
|
||||
text += `p/${command.name} - ${command.description}\n`;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder();
|
||||
embed.setTitle("PepperBot Commands");
|
||||
embed.setDescription(text);
|
||||
embed.setColor(0xff0000);
|
||||
embed.setThumbnail(
|
||||
"https://cdn.discordapp.com/attachments/755150633191080073/1149152214850469908/Map_Icon.png"
|
||||
);
|
||||
message.reply({ embeds: [embed] });
|
||||
},
|
||||
};
|
31
src/commands/crash.js
Normal file
31
src/commands/crash.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
const whitelist = ["440163494529073152"];
|
||||
const fs = require("fs");
|
||||
|
||||
module.exports = {
|
||||
name: "crash",
|
||||
description: "crashes the bot (throws an error), requires whitelist",
|
||||
execute(message, args) {
|
||||
if (whitelist.includes(message.author.id)) {
|
||||
message.reply("crashing bot...");
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/errors.log",
|
||||
"force crashed at " + Date() + "\n"
|
||||
);
|
||||
throw "crash command executed";
|
||||
} else {
|
||||
message.reply("UNAUTHORIZED");
|
||||
const path = require("path");
|
||||
const scriptName = path.basename(__filename);
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/failed.log",
|
||||
"non whitelisted user " +
|
||||
message.author.username +
|
||||
" (" +
|
||||
message.author +
|
||||
") attempted accessing " +
|
||||
scriptName +
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
},
|
||||
};
|
136
src/commands/createreactionrole.js
Normal file
136
src/commands/createreactionrole.js
Normal file
|
@ -0,0 +1,136 @@
|
|||
const { EmbedBuilder } = require("discord.js");
|
||||
const emojiRegex = require("emoji-regex");
|
||||
const irregularsRegex = require("../util/irregularsRegex.js");
|
||||
const irregulars = require("../util/irregulars.json");
|
||||
const fs = require("fs");
|
||||
|
||||
const getEmojis = (message) => {
|
||||
const { content } = message;
|
||||
const result = [];
|
||||
// Normal emojis
|
||||
const normalEmojis = content.match(emojiRegex());
|
||||
if (normalEmojis) {
|
||||
// for (const emoji of normalEmojis) {
|
||||
normalEmojis.forEach((emoji) => {
|
||||
result.push(emoji);
|
||||
});
|
||||
}
|
||||
// Text emojis e.g ♥ ✂ 🗨
|
||||
const textEmojis = content.match(irregularsRegex());
|
||||
if (textEmojis) {
|
||||
textEmojis.forEach((emoji) => {
|
||||
result.push(irregulars[emoji.trim()]);
|
||||
});
|
||||
}
|
||||
// Guild emojis
|
||||
let guildEmojis = content.match(/:[_a-zA-Z0-9]*>/g);
|
||||
if (guildEmojis) {
|
||||
guildEmojis = guildEmojis.map((e) => e.substring(1, e.length - 1));
|
||||
guildEmojis.forEach((e) => {
|
||||
try {
|
||||
const guildEmoji = message.guild.emojis.get(e);
|
||||
if (guildEmoji) {
|
||||
result.push(guildEmoji);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log("tried using guild emote lmao");
|
||||
}
|
||||
});
|
||||
}
|
||||
// Attempt to sort the results if its not null
|
||||
if (result) {
|
||||
const query = message.content;
|
||||
result.sort((a, b) => {
|
||||
const irregularA = getKeyByValue(irregulars, a);
|
||||
const irregularB = getKeyByValue(irregulars, b);
|
||||
const index1 = irregularA || a;
|
||||
const index2 = irregularB || b;
|
||||
return query.indexOf(index1) - query.indexOf(index2);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
let collectors = [];
|
||||
|
||||
const whitelist = ["440163494529073152", "436321340304392222"];
|
||||
|
||||
module.exports = {
|
||||
name: "createreactionrole",
|
||||
description: "creates reaction role, requires whitelist",
|
||||
execute(message, args) {
|
||||
if (whitelist.includes(message.author.id)) {
|
||||
let emojis = getEmojis(message);
|
||||
let emoji = emojis[0];
|
||||
let role = message.mentions.roles.first();
|
||||
if (!role) {
|
||||
console.log("role variable missing");
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/failed.log",
|
||||
"role variable missing" +
|
||||
"from: " +
|
||||
message.content +
|
||||
" at " +
|
||||
Date() +
|
||||
"\n"
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!emoji) {
|
||||
console.log("emoji variable missing");
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/failed.log",
|
||||
" emoji variable missing" +
|
||||
"from: " +
|
||||
message.content +
|
||||
" at " +
|
||||
Date() +
|
||||
"\n"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder();
|
||||
|
||||
embed.setThumbnail(
|
||||
"https://cdn.discordapp.com/attachments/755150633191080073/1149152214850469908/Map_Icon.png"
|
||||
);
|
||||
embed.setColor(0xff0000);
|
||||
|
||||
embed.setTitle(role.name);
|
||||
embed.setDescription(
|
||||
"React with " + emoji + " to recieve the " + role.name + " role."
|
||||
);
|
||||
|
||||
message.channel.send({ embeds: [embed] }).then((m) => m.react(emoji));
|
||||
|
||||
const collectorFilter = function (reaction) {
|
||||
return true;
|
||||
};
|
||||
|
||||
const collector = message.createReactionCollector({
|
||||
filter: collectorFilter,
|
||||
});
|
||||
collectors.push(collector);
|
||||
|
||||
collector.on("collect", (reaction, user) => {
|
||||
console.log(`Collected ${reaction.emoji.name} from ${user.tag}`);
|
||||
});
|
||||
} else {
|
||||
message.reply("UNAUTHORIZED");
|
||||
const path = require("path");
|
||||
const scriptName = path.basename(__filename);
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/failed.log",
|
||||
"non whitelisted user " +
|
||||
message.author.username +
|
||||
" (" +
|
||||
message.author +
|
||||
") attempted accessing " +
|
||||
scriptName +
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
},
|
||||
};
|
65
src/commands/dmuser.js
Normal file
65
src/commands/dmuser.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
const fs = require("fs");
|
||||
|
||||
const prefix = process.env.PREFIX;
|
||||
|
||||
function delay(time) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, time);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: "dmuser",
|
||||
description: "forces bot to dm a user something (this will ghost ping them)",
|
||||
execute(message, args, client) {
|
||||
const user = message.mentions.users.first();
|
||||
if (!user) {
|
||||
return;
|
||||
}
|
||||
const msgnoprefix = message.content.slice(
|
||||
prefix.length + this.name.length + user.id.length + 4
|
||||
);
|
||||
|
||||
console.log(typeof user);
|
||||
console.log(user.username);
|
||||
//const usercache = client.users.fetch(user.id, false, true);
|
||||
|
||||
const msg = msgnoprefix.slice(0, 2000);
|
||||
|
||||
if (msg !== "") {
|
||||
user.send(msg);
|
||||
message.delete();
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/forcesay.log",
|
||||
Date() +
|
||||
" " +
|
||||
message.author.username +
|
||||
" (" +
|
||||
message.author +
|
||||
") forced bot to dm " +
|
||||
user.username +
|
||||
msg +
|
||||
"\n",
|
||||
(err) => {
|
||||
if (err !== null) {
|
||||
console.error(err);
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/errors.log",
|
||||
err + " from: " + message.content + " at " + Date()
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
console.log(
|
||||
Date() +
|
||||
message.author.username +
|
||||
" (" +
|
||||
message.author +
|
||||
") forced bot to dm " +
|
||||
user.username +
|
||||
msg +
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
},
|
||||
};
|
21
src/commands/links.js
Normal file
21
src/commands/links.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
const { EmbedBuilder } = require("discord.js");
|
||||
module.exports = {
|
||||
name: "links",
|
||||
description: 'posts "important" links',
|
||||
execute(message, args) {
|
||||
const embed = new EmbedBuilder();
|
||||
embed.setTitle("very imphortance linkers");
|
||||
embed.setThumbnail(
|
||||
"https://cdn.discordapp.com/attachments/755150633191080073/1149152214850469908/Map_Icon.png"
|
||||
);
|
||||
embed.setColor(0xff0000);
|
||||
|
||||
embed.setDescription(`
|
||||
https://reidlab.online
|
||||
https://goop.network -- VERY IMPORTANT!!!!
|
||||
pepper.church releasing [TIME] (never (not anytime soon))
|
||||
`);
|
||||
|
||||
message.reply({ embeds: [embed] });
|
||||
},
|
||||
};
|
7
src/commands/mymovie.js
Normal file
7
src/commands/mymovie.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
name: 'mymovie',
|
||||
description: 'posts my movie',
|
||||
execute(message, args){
|
||||
message.reply('https://cdn.discordapp.com/attachments/755150633191080073/1149158052784775219/My_Movie.mp4')
|
||||
}
|
||||
}
|
12
src/commands/pepper.js
Normal file
12
src/commands/pepper.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
const { EmbedBuilder } = require('discord.js');
|
||||
module.exports = {
|
||||
name: 'pepper',
|
||||
description: 'Muchas Perfectas!',
|
||||
execute(message, args){
|
||||
const embed = new EmbedBuilder
|
||||
embed.setTitle('Muchas Perfectas!')
|
||||
embed.setImage('https://cdn.discordapp.com/attachments/755150633191080073/1148815491822002177/240_F_531030593_fOjJqzacbhzXwL1F9Mfyv0ML3YzZfm5c.jpg')
|
||||
embed.setColor(0xFF0000)
|
||||
message.reply({ embeds: [embed] })
|
||||
}
|
||||
}
|
30
src/commands/say.js
Normal file
30
src/commands/say.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
const fs = require('fs')
|
||||
|
||||
const prefix = process.env.PREFIX
|
||||
|
||||
function delay(time) {
|
||||
return new Promise(resolve => {
|
||||
setTimeout(resolve, time);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: 'say',
|
||||
description: 'forces bot to say something',
|
||||
execute(message, args){
|
||||
const msgnoprefix = message.content.slice(prefix.length + this.name.length)
|
||||
const msg = msgnoprefix.slice(0, 2000)
|
||||
|
||||
if (msg !== '') {
|
||||
message.channel.send(msg)
|
||||
message.delete()
|
||||
fs.appendFileSync("../pepperbot/src/logs/forcesay.log", Date() + " " + message.author.username + " (" + message.author + ") forced bot to say " + msg + "\n", (err) => {
|
||||
if (err !== null) {
|
||||
console.error(err)
|
||||
fs.appendFileSync("../pepperbot/src/logs/errors.log", err + ' from: ' + message.content + " at " + Date())
|
||||
}
|
||||
})
|
||||
console.log(Date() + " " + message.author.username + " (" + message.author + ") forced bot to say " + msg)
|
||||
}
|
||||
}
|
||||
}
|
35
src/commands/sendlog.js
Normal file
35
src/commands/sendlog.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
const { Collection } = require("discord.js");
|
||||
const prefix = process.env.PREFIX;
|
||||
const ignore = [];
|
||||
const fs = require("fs");
|
||||
|
||||
module.exports = {
|
||||
name: "sendlog",
|
||||
description: "sends log file (if the file is valid)",
|
||||
execute(message, args) {
|
||||
let msgnoprefix = message.content.slice(
|
||||
prefix.length + this.name.length + 1
|
||||
);
|
||||
if (!msgnoprefix.endsWith(".log")) {
|
||||
msgnoprefix += ".log";
|
||||
}
|
||||
|
||||
const logs = fs
|
||||
.readdirSync("../pepperbot/src/logs/")
|
||||
.filter((file) => file.endsWith(".log"));
|
||||
if (!logs.includes(msgnoprefix)) {
|
||||
message.reply("invalid log file");
|
||||
return;
|
||||
}
|
||||
if (ignore.includes(msgnoprefix)) return;
|
||||
const path = `../pepperbot/src/logs/${msgnoprefix}`;
|
||||
message.channel.send({
|
||||
files: [
|
||||
{
|
||||
attachment: path,
|
||||
name: "file.log",
|
||||
},
|
||||
],
|
||||
});
|
||||
},
|
||||
};
|
7
src/commands/test.js
Normal file
7
src/commands/test.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
name: "test",
|
||||
description: "test command",
|
||||
execute(message, args) {
|
||||
message.reply("MOTHAFUCKA SHUT UPPPPPP");
|
||||
},
|
||||
};
|
128
src/index.js
Normal file
128
src/index.js
Normal file
|
@ -0,0 +1,128 @@
|
|||
require("dotenv").config();
|
||||
const {
|
||||
Client,
|
||||
IntentsBitField,
|
||||
EmbedBuilder,
|
||||
Collection,
|
||||
} = require("discord.js");
|
||||
|
||||
const fs = require("fs");
|
||||
|
||||
const client = new Client({
|
||||
intents: [
|
||||
IntentsBitField.Flags.Guilds,
|
||||
IntentsBitField.Flags.GuildMembers,
|
||||
IntentsBitField.Flags.GuildMessages,
|
||||
IntentsBitField.Flags.MessageContent,
|
||||
],
|
||||
});
|
||||
|
||||
client.commands = new Collection();
|
||||
|
||||
const commandFiles = fs
|
||||
.readdirSync("src/commands/")
|
||||
.filter((file) => file.endsWith(".js"));
|
||||
for (const file of commandFiles) {
|
||||
(async () => {
|
||||
const command = await import(`./commands/${file}`);
|
||||
client.commands.set(command.default.name, command.default);
|
||||
})();
|
||||
}
|
||||
|
||||
const prefix = process.env.PREFIX;
|
||||
|
||||
client.on("ready", (c) => {
|
||||
console.log(`${c.user.tag} is online.`);
|
||||
const channel = client.channels.cache.get("1148814162273763418");
|
||||
channel.send("pepperbot restart complete");
|
||||
});
|
||||
|
||||
client.on("messageDelete", async (message) => {
|
||||
if (message.content.startsWith(prefix)) {
|
||||
const args = message.content.slice(prefix.length).split(/ +/);
|
||||
const command = args.shift().toLowerCase();
|
||||
if (!client.commands.has(command)) {
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/deletedmessages.log",
|
||||
"deleted message from: " +
|
||||
message.author.username +
|
||||
"(" +
|
||||
message.author +
|
||||
") at " +
|
||||
Date() +
|
||||
' with: "' +
|
||||
message.content +
|
||||
'"\n'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/deletedmessages.log",
|
||||
"deleted message from: " +
|
||||
message.author.username +
|
||||
"(" +
|
||||
message.author +
|
||||
") at " +
|
||||
Date() +
|
||||
' with: "' +
|
||||
message.content +
|
||||
'"\n'
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
client.on("messageCreate", async (message) => {
|
||||
if (!message.content.startsWith(prefix)) return;
|
||||
const args = message.content.slice(prefix.length).split(/ +/);
|
||||
const command = args.shift().toLowerCase();
|
||||
|
||||
/*if (message.channelId !== "1148814162273763418") {
|
||||
let text = "commands only work in <#1148814162273763418>";
|
||||
if (!client.commands.has(command)) {
|
||||
text += ", also thats not a command lmao";
|
||||
}
|
||||
message.reply(text);
|
||||
return;
|
||||
}*/
|
||||
|
||||
if (!client.commands.has(command)) {
|
||||
message.reply("idiot thats not a command");
|
||||
fs.appendFileSync(
|
||||
"../pepperbot/src/logs/failed.log",
|
||||
"invalid command: " + "from: " + message.content + " at " + Date() + "\n"
|
||||
);
|
||||
}
|
||||
|
||||
if (client.commands.get(command)) {
|
||||
client.commands.get(command).execute(message, args, client);
|
||||
}
|
||||
});
|
||||
|
||||
client.on("interactionCreate", (interaction) => {
|
||||
if (!interaction.isChatInputCommand()) return;
|
||||
|
||||
if (interaction.commandName === "test") {
|
||||
interaction.reply(
|
||||
"mothafucka you contacted my ass from a slash command end urself"
|
||||
);
|
||||
}
|
||||
|
||||
if (interaction.commandName === "say") {
|
||||
try {
|
||||
const msg = interaction.options.get("message");
|
||||
interaction.reply(msg.value);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
fs.appendFile(
|
||||
"../pepperbot/src/logs/errors.log",
|
||||
error + "from: " + interaction.msg + " at " + Date()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (interaction.commandName === "commands") {
|
||||
client.commands.get("commands").execute(interaction, undefined);
|
||||
}
|
||||
});
|
||||
|
||||
client.login(process.env.TOKEN);
|
52
src/register-commands.js
Normal file
52
src/register-commands.js
Normal file
|
@ -0,0 +1,52 @@
|
|||
require('dotenv').config();
|
||||
const { REST, Routes, ApplicationCommandOptionType } = require('discord.js');
|
||||
|
||||
export const commands = [
|
||||
{
|
||||
name: 'say',
|
||||
description: 'forces bot to say message',
|
||||
options: [
|
||||
{
|
||||
name: 'message',
|
||||
description: 'the message',
|
||||
type: ApplicationCommandOptionType.String,
|
||||
required: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'administer',
|
||||
description: 'administer.',
|
||||
options: [
|
||||
{
|
||||
name: 'password',
|
||||
description: 'the protections.',
|
||||
type: ApplicationCommandOptionType.String,
|
||||
required: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'commands',
|
||||
description: 'sends a command list',
|
||||
},
|
||||
{
|
||||
name: 'test',
|
||||
description: 'test command',
|
||||
},
|
||||
];
|
||||
|
||||
const rest = new REST({ version: '10' }).setToken(process.env.TOKEN);
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
await rest.put(
|
||||
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
|
||||
{ body: commands }
|
||||
)
|
||||
|
||||
console.log("slash commands registered")
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
})();
|
23
src/util/buildJson.js
Normal file
23
src/util/buildJson.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const input = fs.readFileSync(path.resolve(__dirname, './irregulars.txt'), {
|
||||
encoding: 'utf-8',
|
||||
});
|
||||
|
||||
const data = input.split('\n');
|
||||
|
||||
const lines = data
|
||||
.map((entry, i, arr) => {
|
||||
const emojis = entry.split(',');
|
||||
let jsonLine = ` "${emojis[1]}": "${emojis[0]}"`;
|
||||
if (arr.length - 1 !== i) jsonLine += ',';
|
||||
return jsonLine;
|
||||
})
|
||||
.join('\n');
|
||||
|
||||
const json = `{\n${lines}\n}`;
|
||||
|
||||
fs.writeFileSync(path.resolve(__dirname, 'irregulars.json'), json, {
|
||||
encoding: 'utf-8',
|
||||
});
|
25
src/util/buildRegex.js
Normal file
25
src/util/buildRegex.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const base = '/❤/g';
|
||||
|
||||
const input = fs.readFileSync(path.resolve(__dirname, 'irregulars.txt'), {
|
||||
encoding: 'utf-8',
|
||||
});
|
||||
|
||||
const data = input.split('\n');
|
||||
|
||||
const piped = data
|
||||
.map(emoji => {
|
||||
const raw = emoji.split(',')[1];
|
||||
return raw.replace(/\*/g, '\\*');
|
||||
})
|
||||
.join('|');
|
||||
|
||||
const regex = base.replace(/❤/g, piped);
|
||||
|
||||
const js = `module.exports = () => ${regex};`;
|
||||
|
||||
fs.writeFileSync(path.resolve(__dirname, 'irregularsRegex.js'), js, {
|
||||
encoding: 'utf-8',
|
||||
});
|
204
src/util/irregulars.json
Normal file
204
src/util/irregulars.json
Normal file
|
@ -0,0 +1,204 @@
|
|||
{
|
||||
"🅰": ":a:",
|
||||
"🅱": ":b:",
|
||||
"🅾": ":o2:",
|
||||
"🅿": ":parking:",
|
||||
"🈂": ":sa:",
|
||||
"🈷": ":u6708:",
|
||||
"🌡": ":thermometer:",
|
||||
"🌤": ":white_sun_small_cloud:",
|
||||
"🌥": ":white_sun_cloud:",
|
||||
"🌦": ":white_sun_rain_cloud:",
|
||||
"🌧": ":cloud_rain:",
|
||||
"🌨": ":cloud_snow:",
|
||||
"🌩": ":cloud_lightning:",
|
||||
"🌪": ":cloud_tornado:",
|
||||
"🌫": ":fog:",
|
||||
"🌬": ":wind_blowing_face:",
|
||||
"🌶": ":hot_pepper:",
|
||||
"🍽": ":fork_knife_plate:",
|
||||
"🎖": ":military_medal:",
|
||||
"🎗": ":reminder_ribbon:",
|
||||
"🎙": ":microphone2:",
|
||||
"🎚": ":level_slider:",
|
||||
"🎛": ":control_knobs:",
|
||||
"🎞": ":film_frames:",
|
||||
"🎟": ":tickets:",
|
||||
"🏍": ":motorcycle:",
|
||||
"🏎": ":race_car:",
|
||||
"🏔": ":mountain_snow:",
|
||||
"🏕": ":camping:",
|
||||
"🏖": ":beach:",
|
||||
"🏗": ":construction_site:",
|
||||
"🏘": ":homes:",
|
||||
"🏙": ":cityscape:",
|
||||
"🏚": ":house_abandoned:",
|
||||
"🏛": ":classical_building:",
|
||||
"🏜": ":desert:",
|
||||
"🏝": ":island:",
|
||||
"🏞": ":park:",
|
||||
"🏟": ":stadium:",
|
||||
"🏳": ":flag_white:",
|
||||
"🏵": ":rosette:",
|
||||
"🏷": ":label:",
|
||||
"🐿": ":chipmunk:",
|
||||
"👁🗨": ":eye_in_speech_bubble:",
|
||||
"👁": ":eye:",
|
||||
"📽": ":projector:",
|
||||
"🕉": ":om_symbol:",
|
||||
"🕊": ":dove:",
|
||||
"🕯": ":candle:",
|
||||
"🕰": ":clock:",
|
||||
"🕳": ":hole:",
|
||||
"🕶": ":dark_sunglasses:",
|
||||
"🕷": ":spider:",
|
||||
"🕸": ":spider_web:",
|
||||
"🕹": ":joystick:",
|
||||
"🖇": ":paperclips:",
|
||||
"🖊": ":pen_ballpoint:",
|
||||
"🖋": ":pen_fountain:",
|
||||
"🖌": ":paintbrush:",
|
||||
"🖍": ":crayon:",
|
||||
"🖥": ":desktop:",
|
||||
"🖨": ":printer:",
|
||||
"🖱": ":mouse_three_button:",
|
||||
"🖲": ":trackball:",
|
||||
"🖼": ":frame_photo:",
|
||||
"🗂": ":dividers:",
|
||||
"🗃": ":card_box:",
|
||||
"🗄": ":file_cabinet:",
|
||||
"🗑": ":wastebasket:",
|
||||
"🗒": ":notepad_spiral:",
|
||||
"🗓": ":calendar_spiral:",
|
||||
"🗜": ":compression:",
|
||||
"🗝": ":key2:",
|
||||
"🗞": ":newspaper2:",
|
||||
"🗡": ":dagger:",
|
||||
"🗣": ":speaking_head:",
|
||||
"🗨": ":speech_left:",
|
||||
"🗯": ":anger_right:",
|
||||
"🗳": ":ballot_box:",
|
||||
"🗺": ":map:",
|
||||
"🛋": ":couch:",
|
||||
"🛍": ":shopping_bags:",
|
||||
"🛎": ":bellhop:",
|
||||
"🛏": ":bed:",
|
||||
"🛠": ":tools:",
|
||||
"🛡": ":shield:",
|
||||
"🛢": ":oil:",
|
||||
"🛣": ":motorway:",
|
||||
"🛤": ":railway_track:",
|
||||
"🛥": ":motorboat:",
|
||||
"🛩": ":airplane_small:",
|
||||
"🛰": ":satellite_orbital:",
|
||||
"🛳": ":cruise_ship:",
|
||||
"‼": ":bangbang:",
|
||||
"⁉": ":interrobang:",
|
||||
"ℹ": ":information_source:",
|
||||
"↔": ":left_right_arrow:",
|
||||
"↕": ":arrow_up_down:",
|
||||
"↖": ":arrow_upper_left:",
|
||||
"↗": ":arrow_upper_right:",
|
||||
"↘": ":arrow_lower_right:",
|
||||
"↙": ":arrow_lower_left:",
|
||||
"↩": ":leftwards_arrow_with_hook:",
|
||||
"↪": ":arrow_right_hook:",
|
||||
"#⃣": ":hash:",
|
||||
"⌨": ":keyboard:",
|
||||
"⏏": ":eject:",
|
||||
"⏭": ":track_next:",
|
||||
"⏮": ":track_previous:",
|
||||
"⏯": ":play_pause:",
|
||||
"⏱": ":stopwatch:",
|
||||
"⏲": ":timer:",
|
||||
"⏸": ":pause_button:",
|
||||
"⏹": ":stop_button:",
|
||||
"⏺": ":record_button:",
|
||||
"Ⓜ": ":m:",
|
||||
"▪": ":black_small_square:",
|
||||
"▫": ":white_small_square:",
|
||||
"▶": ":arrow_forward:",
|
||||
"◀": ":arrow_backward:",
|
||||
"◻": ":white_medium_square:",
|
||||
"◼": ":black_medium_square:",
|
||||
"☀": ":sunny:",
|
||||
"☁": ":cloud:",
|
||||
"☂": ":umbrella2:",
|
||||
"☃": ":snowman2:",
|
||||
"☄": ":comet:",
|
||||
"☎": ":telephone:",
|
||||
"☑": ":ballot_box_with_check:",
|
||||
"☘": ":shamrock:",
|
||||
"☠": ":skull_crossbones:",
|
||||
"☢": ":radioactive:",
|
||||
"☣": ":biohazard:",
|
||||
"☦": ":orthodox_cross:",
|
||||
"☪": ":star_and_crescent:",
|
||||
"☮": ":peace:",
|
||||
"☯": ":yin_yang:",
|
||||
"☸": ":wheel_of_dharma:",
|
||||
"☹": ":frowning2:",
|
||||
"☺": ":relaxed:",
|
||||
"♠": ":spades:",
|
||||
"♣": ":clubs:",
|
||||
"♥": ":hearts:",
|
||||
"♦": ":diamonds:",
|
||||
"♨": ":hotsprings:",
|
||||
"♻": ":recycle:",
|
||||
"⚒": ":hammer_pick:",
|
||||
"⚔": ":crossed_swords:",
|
||||
"⚖": ":scales:",
|
||||
"⚗": ":alembic:",
|
||||
"⚙": ":gear:",
|
||||
"⚛": ":atom:",
|
||||
"⚜": ":fleur_de_lis:",
|
||||
"⚠": ":warning:",
|
||||
"⚰": ":coffin:",
|
||||
"⚱": ":urn:",
|
||||
"⛈": ":thunder_cloud_rain:",
|
||||
"⛏": ":pick:",
|
||||
"⛑": ":helmet_with_cross:",
|
||||
"⛓": ":chains:",
|
||||
"⛩": ":shinto_shrine:",
|
||||
"⛰": ":mountain:",
|
||||
"⛱": ":beach_umbrella:",
|
||||
"⛴": ":ferry:",
|
||||
"⛷": ":skier:",
|
||||
"⛸": ":ice_skate:",
|
||||
"✂": ":scissors:",
|
||||
"✈": ":airplane:",
|
||||
"✉": ":envelope:",
|
||||
"✏": ":pencil2:",
|
||||
"✒": ":black_nib:",
|
||||
"✔": ":heavy_check_mark:",
|
||||
"✖": ":heavy_multiplication_x:",
|
||||
"✝": ":cross:",
|
||||
"✡": ":star_of_david:",
|
||||
"✳": ":eight_spoked_asterisk:",
|
||||
"✴": ":eight_pointed_black_star:",
|
||||
"❄": ":snowflake:",
|
||||
"❇": ":sparkle:",
|
||||
"❣": ":heart_exclamation:",
|
||||
"❤": ":heart:",
|
||||
"➡": ":arrow_right:",
|
||||
"⤴": ":arrow_heading_up:",
|
||||
"⤵": ":arrow_heading_down:",
|
||||
"*⃣": ":asterisk:",
|
||||
"⬅": ":arrow_left:",
|
||||
"⬆": ":arrow_up:",
|
||||
"⬇": ":arrow_down:",
|
||||
"0⃣": ":zero:",
|
||||
"〰": ":wavy_dash:",
|
||||
"〽": ":part_alternation_mark:",
|
||||
"1⃣": ":one:",
|
||||
"2⃣": ":two:",
|
||||
"㊗": ":congratulations:",
|
||||
"㊙": ":secret:",
|
||||
"3⃣": ":three:",
|
||||
"4⃣": ":four:",
|
||||
"5⃣": ":five:",
|
||||
"6⃣": ":six:",
|
||||
"7⃣": ":seven:",
|
||||
"8⃣": ":eight:",
|
||||
"9⃣": ":nine:"
|
||||
}
|
202
src/util/irregulars.txt
Normal file
202
src/util/irregulars.txt
Normal file
|
@ -0,0 +1,202 @@
|
|||
:a:,🅰
|
||||
:b:,🅱
|
||||
:o2:,🅾
|
||||
:parking:,🅿
|
||||
:sa:,🈂
|
||||
:u6708:,🈷
|
||||
:thermometer:,🌡
|
||||
:white_sun_small_cloud:,🌤
|
||||
:white_sun_cloud:,🌥
|
||||
:white_sun_rain_cloud:,🌦
|
||||
:cloud_rain:,🌧
|
||||
:cloud_snow:,🌨
|
||||
:cloud_lightning:,🌩
|
||||
:cloud_tornado:,🌪
|
||||
:fog:,🌫
|
||||
:wind_blowing_face:,🌬
|
||||
:hot_pepper:,🌶
|
||||
:fork_knife_plate:,🍽
|
||||
:military_medal:,🎖
|
||||
:reminder_ribbon:,🎗
|
||||
:microphone2:,🎙
|
||||
:level_slider:,🎚
|
||||
:control_knobs:,🎛
|
||||
:film_frames:,🎞
|
||||
:tickets:,🎟
|
||||
:motorcycle:,🏍
|
||||
:race_car:,🏎
|
||||
:mountain_snow:,🏔
|
||||
:camping:,🏕
|
||||
:beach:,🏖
|
||||
:construction_site:,🏗
|
||||
:homes:,🏘
|
||||
:cityscape:,🏙
|
||||
:house_abandoned:,🏚
|
||||
:classical_building:,🏛
|
||||
:desert:,🏜
|
||||
:island:,🏝
|
||||
:park:,🏞
|
||||
:stadium:,🏟
|
||||
:flag_white:,🏳
|
||||
:rosette:,🏵
|
||||
:label:,🏷
|
||||
:chipmunk:,🐿
|
||||
:eye_in_speech_bubble:,👁🗨
|
||||
:eye:,👁
|
||||
:projector:,📽
|
||||
:om_symbol:,🕉
|
||||
:dove:,🕊
|
||||
:candle:,🕯
|
||||
:clock:,🕰
|
||||
:hole:,🕳
|
||||
:dark_sunglasses:,🕶
|
||||
:spider:,🕷
|
||||
:spider_web:,🕸
|
||||
:joystick:,🕹
|
||||
:paperclips:,🖇
|
||||
:pen_ballpoint:,🖊
|
||||
:pen_fountain:,🖋
|
||||
:paintbrush:,🖌
|
||||
:crayon:,🖍
|
||||
:desktop:,🖥
|
||||
:printer:,🖨
|
||||
:mouse_three_button:,🖱
|
||||
:trackball:,🖲
|
||||
:frame_photo:,🖼
|
||||
:dividers:,🗂
|
||||
:card_box:,🗃
|
||||
:file_cabinet:,🗄
|
||||
:wastebasket:,🗑
|
||||
:notepad_spiral:,🗒
|
||||
:calendar_spiral:,🗓
|
||||
:compression:,🗜
|
||||
:key2:,🗝
|
||||
:newspaper2:,🗞
|
||||
:dagger:,🗡
|
||||
:speaking_head:,🗣
|
||||
:speech_left:,🗨
|
||||
:anger_right:,🗯
|
||||
:ballot_box:,🗳
|
||||
:map:,🗺
|
||||
:couch:,🛋
|
||||
:shopping_bags:,🛍
|
||||
:bellhop:,🛎
|
||||
:bed:,🛏
|
||||
:tools:,🛠
|
||||
:shield:,🛡
|
||||
:oil:,🛢
|
||||
:motorway:,🛣
|
||||
:railway_track:,🛤
|
||||
:motorboat:,🛥
|
||||
:airplane_small:,🛩
|
||||
:satellite_orbital:,🛰
|
||||
:cruise_ship:,🛳
|
||||
:bangbang:,‼
|
||||
:interrobang:,⁉
|
||||
:information_source:,ℹ
|
||||
:left_right_arrow:,↔
|
||||
:arrow_up_down:,↕
|
||||
:arrow_upper_left:,↖
|
||||
:arrow_upper_right:,↗
|
||||
:arrow_lower_right:,↘
|
||||
:arrow_lower_left:,↙
|
||||
:leftwards_arrow_with_hook:,↩
|
||||
:arrow_right_hook:,↪
|
||||
:hash:,#⃣
|
||||
:keyboard:,⌨
|
||||
:eject:,⏏
|
||||
:track_next:,⏭
|
||||
:track_previous:,⏮
|
||||
:play_pause:,⏯
|
||||
:stopwatch:,⏱
|
||||
:timer:,⏲
|
||||
:pause_button:,⏸
|
||||
:stop_button:,⏹
|
||||
:record_button:,⏺
|
||||
:m:,Ⓜ
|
||||
:black_small_square:,▪
|
||||
:white_small_square:,▫
|
||||
:arrow_forward:,▶
|
||||
:arrow_backward:,◀
|
||||
:white_medium_square:,◻
|
||||
:black_medium_square:,◼
|
||||
:sunny:,☀
|
||||
:cloud:,☁
|
||||
:umbrella2:,☂
|
||||
:snowman2:,☃
|
||||
:comet:,☄
|
||||
:telephone:,☎
|
||||
:ballot_box_with_check:,☑
|
||||
:shamrock:,☘
|
||||
:skull_crossbones:,☠
|
||||
:radioactive:,☢
|
||||
:biohazard:,☣
|
||||
:orthodox_cross:,☦
|
||||
:star_and_crescent:,☪
|
||||
:peace:,☮
|
||||
:yin_yang:,☯
|
||||
:wheel_of_dharma:,☸
|
||||
:frowning2:,☹
|
||||
:relaxed:,☺
|
||||
:spades:,♠
|
||||
:clubs:,♣
|
||||
:hearts:,♥
|
||||
:diamonds:,♦
|
||||
:hotsprings:,♨
|
||||
:recycle:,♻
|
||||
:hammer_pick:,⚒
|
||||
:crossed_swords:,⚔
|
||||
:scales:,⚖
|
||||
:alembic:,⚗
|
||||
:gear:,⚙
|
||||
:atom:,⚛
|
||||
:fleur_de_lis:,⚜
|
||||
:warning:,⚠
|
||||
:coffin:,⚰
|
||||
:urn:,⚱
|
||||
:thunder_cloud_rain:,⛈
|
||||
:pick:,⛏
|
||||
:helmet_with_cross:,⛑
|
||||
:chains:,⛓
|
||||
:shinto_shrine:,⛩
|
||||
:mountain:,⛰
|
||||
:beach_umbrella:,⛱
|
||||
:ferry:,⛴
|
||||
:skier:,⛷
|
||||
:ice_skate:,⛸
|
||||
:scissors:,✂
|
||||
:airplane:,✈
|
||||
:envelope:,✉
|
||||
:pencil2:,✏
|
||||
:black_nib:,✒
|
||||
:heavy_check_mark:,✔
|
||||
:heavy_multiplication_x:,✖
|
||||
:cross:,✝
|
||||
:star_of_david:,✡
|
||||
:eight_spoked_asterisk:,✳
|
||||
:eight_pointed_black_star:,✴
|
||||
:snowflake:,❄
|
||||
:sparkle:,❇
|
||||
:heart_exclamation:,❣
|
||||
:heart:,❤
|
||||
:arrow_right:,➡
|
||||
:arrow_heading_up:,⤴
|
||||
:arrow_heading_down:,⤵
|
||||
:asterisk:,*⃣
|
||||
:arrow_left:,⬅
|
||||
:arrow_up:,⬆
|
||||
:arrow_down:,⬇
|
||||
:zero:,0⃣
|
||||
:wavy_dash:,〰
|
||||
:part_alternation_mark:,〽
|
||||
:one:,1⃣
|
||||
:two:,2⃣
|
||||
:congratulations:,㊗
|
||||
:secret:,㊙
|
||||
:three:,3⃣
|
||||
:four:,4⃣
|
||||
:five:,5⃣
|
||||
:six:,6⃣
|
||||
:seven:,7⃣
|
||||
:eight:,8⃣
|
||||
:nine:,9⃣
|
1
src/util/irregularsRegex.js
Normal file
1
src/util/irregularsRegex.js
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = () => /🅰|🅱|🅾|🅿|🈂|🈷|🌡|🌤|🌥|🌦|🌧|🌨|🌩|🌪|🌫|🌬|🌶|🍽|🎖|🎗|🎙|🎚|🎛|🎞|🎟|🏍|🏎|🏔|🏕|🏖|🏗|🏘|🏙|🏚|🏛|🏜|🏝|🏞|🏟|🏳|🏵|🏷|🐿|👁🗨|👁|📽|🕉|🕊|🕯|🕰|🕳|🕶|🕷|🕸|🕹|🖇|🖊|🖋|🖌|🖍|🖥|🖨|🖱|🖲|🖼|🗂|🗃|🗄|🗑|🗒|🗓|🗜|🗝|🗞|🗡|🗣|🗨|🗯|🗳|🗺|🛋|🛍|🛎|🛏|🛠|🛡|🛢|🛣|🛤|🛥|🛩|🛰|🛳|‼|⁉|ℹ|↔|↕|↖|↗|↘|↙|↩|↪|#⃣|⌨|⏏|⏭|⏮|⏯|⏱|⏲|⏸|⏹|⏺|Ⓜ|▪|▫|▶|◀|◻|◼|☀|☁|☂|☃|☄|☎|☑|☘|☠|☢|☣|☦|☪|☮|☯|☸|☹|☺|♠|♣|♥|♦|♨|♻|⚒|⚔|⚖|⚗|⚙|⚛|⚜|⚠|⚰|⚱|⛈|⛏|⛑|⛓|⛩|⛰|⛱|⛴|⛷|⛸|✂|✈|✉|✏|✒|✔|✖|✝|✡|✳|✴|❄|❇|❣|❤|➡|⤴|⤵|\*⃣|⬅|⬆|⬇|0⃣|〰|〽|1⃣|2⃣|㊗|㊙|3⃣|4⃣|5⃣|6⃣|7⃣|8⃣|9⃣/g;
|
Loading…
Add table
Add a link
Reference in a new issue