aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commands/config/features.ts56
-rw-r--r--src/commands/dev/test.ts3
-rw-r--r--src/commands/utilities/calculator.ts57
-rw-r--r--src/commands/utilities/decode.ts8
-rw-r--r--src/inhibitors/blacklist/channelGlobalBlacklist.ts4
-rw-r--r--src/inhibitors/blacklist/channelGuildBlacklist.ts4
-rw-r--r--src/inhibitors/blacklist/guildBlacklist.ts4
-rw-r--r--src/inhibitors/blacklist/userGlobalBlacklist.ts4
-rw-r--r--src/inhibitors/blacklist/userGuildBlacklist.ts4
-rw-r--r--src/inhibitors/checks/fatal.ts (renamed from src/inhibitors/noCache.ts)8
-rw-r--r--src/inhibitors/checks/guildUnavailable.ts19
-rw-r--r--src/inhibitors/command/dm.ts19
-rw-r--r--src/inhibitors/command/globalDisabledCommand.ts (renamed from src/inhibitors/commands/globalDisabledCommand.ts)6
-rw-r--r--src/inhibitors/command/guild.ts19
-rw-r--r--src/inhibitors/command/guildDisabledCommand.ts (renamed from src/inhibitors/commands/guildDisabledCommand.ts)6
-rw-r--r--src/inhibitors/command/nsfw.ts20
-rw-r--r--src/inhibitors/command/owner.ts21
-rw-r--r--src/inhibitors/command/restrictedChannel.ts21
-rw-r--r--src/inhibitors/command/restrictedGuild.ts21
-rw-r--r--src/inhibitors/command/superUser.ts21
-rw-r--r--src/lib/assets/Roboto-Regular.ttfbin168260 -> 0 bytes
-rw-r--r--src/lib/badlinks.json372
-rw-r--r--src/lib/badwords.json20
-rw-r--r--src/lib/extensions/discord-akairo/BushCommandHandler.ts68
-rw-r--r--src/lib/extensions/discord-akairo/BushSlashMessage.ts5
-rw-r--r--src/listeners/commands/commandBlocked.ts52
-rw-r--r--src/listeners/commands/messageBlocked.ts17
-rw-r--r--src/listeners/message/automodCreate.ts11
28 files changed, 338 insertions, 532 deletions
diff --git a/src/commands/config/features.ts b/src/commands/config/features.ts
index 0547bd0..1974297 100644
--- a/src/commands/config/features.ts
+++ b/src/commands/config/features.ts
@@ -1,29 +1,29 @@
-// import { BushCommand, BushMessage, BushSlashMessage, guildFeatures } from '@lib';
-// import { MessageEmbed } from 'discord.js';
+import { BushCommand, BushMessage, BushSlashMessage, guildFeatures } from '@lib';
+import { MessageEmbed } from 'discord.js';
-// export default class FeaturesCommand extends BushCommand {
-// public constructor() {
-// super('features', {
-// aliases: ['features'],
-// category: 'config',
-// description: {
-// content: 'Toggle features the server.',
-// usage: 'features',
-// examples: ['features']
-// },
-// slash: true,
-// channel: 'guild',
-// clientPermissions: ['SEND_MESSAGES', 'EMBED_LINKS'],
-// userPermissions: ['SEND_MESSAGES', 'MANAGE_GUILD']
-// });
-// }
-// public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> {
-// if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`);
-// const featureEmbed = new MessageEmbed().setTitle(`${message.guild.name}'s Features`).setColor(util.colors.default);
-// const featureList: string[] = [];
-// const enabledFeatures = message.guild.getSetting('enabledFeatures');
-// guildFeatures.forEach(feature => {
-// featureList.push(`${}`)
-// })
-// }
-// }
+export default class FeaturesCommand extends BushCommand {
+ public constructor() {
+ super('features', {
+ aliases: ['features'],
+ category: 'config',
+ description: {
+ content: 'Toggle features the server.',
+ usage: 'features',
+ examples: ['features']
+ },
+ slash: true,
+ channel: 'guild',
+ clientPermissions: ['SEND_MESSAGES', 'EMBED_LINKS'],
+ userPermissions: ['SEND_MESSAGES', 'MANAGE_GUILD']
+ });
+ }
+ public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> {
+ if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`);
+ const featureEmbed = new MessageEmbed().setTitle(`${message.guild.name}'s Features`).setColor(util.colors.default);
+ const featureList: string[] = [];
+ const enabledFeatures = await message.guild.getSetting('enabledFeatures');
+ guildFeatures.forEach((feature) => {
+ // featureList.push(`**${feature}:** ${enabledFeatures.includes(feature)? util.emojis.}`);
+ });
+ }
+}
diff --git a/src/commands/dev/test.ts b/src/commands/dev/test.ts
index 151e4a1..aa421cd 100644
--- a/src/commands/dev/test.ts
+++ b/src/commands/dev/test.ts
@@ -24,7 +24,8 @@ export default class TestCommand extends BushCommand {
optional: true
}
}
- ]
+ ],
+ superUserOnly: true
});
}
diff --git a/src/commands/utilities/calculator.ts b/src/commands/utilities/calculator.ts
new file mode 100644
index 0000000..5f91dca
--- /dev/null
+++ b/src/commands/utilities/calculator.ts
@@ -0,0 +1,57 @@
+import { AllowedMentions, BushCommand, BushMessage, BushSlashMessage } from '@lib';
+import { MessageEmbed } from 'discord.js';
+import { evaluate } from 'mathjs';
+
+export default class CalculatorCommand extends BushCommand {
+ public constructor() {
+ super('calculator', {
+ aliases: ['calculator', 'calc', 'math'],
+ category: 'utilities',
+ description: {
+ content: 'Calculates math expressions.',
+ usage: 'calculator <expression>',
+ examples: ['calculator ']
+ },
+ args: [
+ {
+ id: 'expression',
+ type: 'string',
+ match: 'rest',
+ prompt: {
+ start: 'What would you like to evaluate?',
+ retry: '{error} Pick something to evaluate.',
+ optional: false
+ }
+ }
+ ],
+ slash: true,
+ slashOptions: [
+ {
+ name: 'expression',
+ description: 'What would you like to evaluate?',
+ type: 'STRING',
+ required: true
+ }
+ ],
+ hidden: true,
+ clientPermissions: ['SEND_MESSAGES'],
+ userPermissions: ['SEND_MESSAGES']
+ });
+ }
+ public override async exec(message: BushMessage | BushSlashMessage, args: { expression: string }): Promise<unknown> {
+ const decodedEmbed = new MessageEmbed()
+ .setTitle(`Calculator`)
+ .addField('📥 Input', await util.inspectCleanRedactCodeblock(args.expression, 'mma'));
+ try {
+ const calculated = evaluate(args.expression);
+ decodedEmbed
+ .setColor(util.colors.success)
+ .addField('📤 Output', await util.inspectCleanRedactCodeblock(calculated.toString(), 'mma'));
+ } catch (error) {
+ decodedEmbed
+ .setColor(util.colors.error)
+ .addField(`📤 Error Calculating`, await util.inspectCleanRedactCodeblock(`${error.name}: ${error.message}`, 'js'));
+ }
+ return await message.util.reply({ embeds: [decodedEmbed], allowedMentions: AllowedMentions.none() });
+ }
+}
diff --git a/src/commands/utilities/decode.ts b/src/commands/utilities/decode.ts
index 05e988a..a5a4c21 100644
--- a/src/commands/utilities/decode.ts
+++ b/src/commands/utilities/decode.ts
@@ -99,16 +99,14 @@ export default class DecodeCommand extends BushCommand {
const encodeOrDecode = util.capitalizeFirstLetter(message?.util?.parsed?.alias || 'decoded');
const decodedEmbed = new MessageEmbed()
.setTitle(`${encodeOrDecode} Information`)
- .addField('📥 Input', await util.inspectCleanRedactCodeblock(data, undefined));
+ .addField('📥 Input', await util.inspectCleanRedactCodeblock(data));
try {
const decoded = Buffer.from(data, from).toString(to);
- decodedEmbed
- .setColor(util.colors.success)
- .addField('📤 Output', await util.inspectCleanRedactCodeblock(decoded, undefined));
+ decodedEmbed.setColor(util.colors.success).addField('📤 Output', await util.inspectCleanRedactCodeblock(decoded));
} catch (error) {
decodedEmbed
.setColor(util.colors.error)
- .addField(`📤 Error ${encodeOrDecode.slice(1)}ing`, await util.inspectCleanRedactCodeblock(error.stack, undefined));
+ .addField(`📤 Error ${encodeOrDecode.slice(1)}ing`, await util.inspectCleanRedactCodeblock(error?.stack ?? error));
}
return await message.util.reply({ embeds: [decodedEmbed], allowedMentions: AllowedMentions.none() });
}
diff --git a/src/inhibitors/blacklist/channelGlobalBlacklist.ts b/src/inhibitors/blacklist/channelGlobalBlacklist.ts
index 9bbf30f..36a6757 100644
--- a/src/inhibitors/blacklist/channelGlobalBlacklist.ts
+++ b/src/inhibitors/blacklist/channelGlobalBlacklist.ts
@@ -5,7 +5,8 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
super('channelGlobalBlacklist', {
reason: 'channelGlobalBlacklist',
category: 'blacklist',
- type: 'all'
+ type: 'post',
+ priority: 500
});
}
@@ -14,7 +15,6 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
if (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
return false;
if (client.cache.global.blacklistedChannels.includes(message.channel!.id)) {
- // client.console.debug(`channelGlobalBlacklist blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/blacklist/channelGuildBlacklist.ts b/src/inhibitors/blacklist/channelGuildBlacklist.ts
index b4c6f3f..54acb34 100644
--- a/src/inhibitors/blacklist/channelGuildBlacklist.ts
+++ b/src/inhibitors/blacklist/channelGuildBlacklist.ts
@@ -5,7 +5,8 @@ export default class ChannelGuildBlacklistInhibitor extends BushInhibitor {
super('channelGuildBlacklist', {
reason: 'channelGuildBlacklist',
category: 'blacklist',
- type: 'all'
+ type: 'post',
+ priority: 499
});
}
@@ -14,7 +15,6 @@ export default class ChannelGuildBlacklistInhibitor extends BushInhibitor {
if (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
return false;
if ((await message.guild.getSetting('blacklistedChannels'))?.includes(message.channel!.id)) {
- // client.console.debug(`channelGuildBlacklist blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/blacklist/guildBlacklist.ts b/src/inhibitors/blacklist/guildBlacklist.ts
index de15d76..ec78995 100644
--- a/src/inhibitors/blacklist/guildBlacklist.ts
+++ b/src/inhibitors/blacklist/guildBlacklist.ts
@@ -5,7 +5,8 @@ export default class GuildBlacklistInhibitor extends BushInhibitor {
super('guildBlacklist', {
reason: 'guildBlacklist',
category: 'blacklist',
- type: 'all'
+ type: 'all',
+ priority: 50
});
}
@@ -17,7 +18,6 @@ export default class GuildBlacklistInhibitor extends BushInhibitor {
)
return false;
if (client.cache.global.blacklistedGuilds.includes(message.guild.id)) {
- // client.console.debug(`GuildBlacklistInhibitor blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/blacklist/userGlobalBlacklist.ts b/src/inhibitors/blacklist/userGlobalBlacklist.ts
index 967943d..65d763d 100644
--- a/src/inhibitors/blacklist/userGlobalBlacklist.ts
+++ b/src/inhibitors/blacklist/userGlobalBlacklist.ts
@@ -5,7 +5,8 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
super('userGlobalBlacklist', {
reason: 'userGlobalBlacklist',
category: 'blacklist',
- type: 'all'
+ type: 'pre',
+ priority: 30
});
}
@@ -14,7 +15,6 @@ export default class UserGlobalBlacklistInhibitor extends BushInhibitor {
if (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
return false;
if (client.cache.global.blacklistedUsers.includes(message.author.id)) {
- // client.console.debug(`userGlobalBlacklist blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/blacklist/userGuildBlacklist.ts b/src/inhibitors/blacklist/userGuildBlacklist.ts
index 0e28ba4..34a24d3 100644
--- a/src/inhibitors/blacklist/userGuildBlacklist.ts
+++ b/src/inhibitors/blacklist/userGuildBlacklist.ts
@@ -5,7 +5,8 @@ export default class UserGuildBlacklistInhibitor extends BushInhibitor {
super('userGuildBlacklist', {
reason: 'userGuildBlacklist',
category: 'blacklist',
- type: 'all'
+ type: 'pre',
+ priority: 20
});
}
@@ -14,7 +15,6 @@ export default class UserGuildBlacklistInhibitor extends BushInhibitor {
if (client.isOwner(message.author) || client.isSuperUser(message.author) || client.user!.id === message.author.id)
return false;
if ((await message.guild.getSetting('blacklistedUsers'))?.includes(message.author.id)) {
- // client.console.debug(`userGuildBlacklist blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/noCache.ts b/src/inhibitors/checks/fatal.ts
index 673f3ac..6b62507 100644
--- a/src/inhibitors/noCache.ts
+++ b/src/inhibitors/checks/fatal.ts
@@ -1,10 +1,11 @@
import { BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
-export default class NoCacheInhibitor extends BushInhibitor {
+export default class FatalInhibitor extends BushInhibitor {
public constructor() {
- super('noCache', {
- reason: 'noCache',
+ super('fatal', {
+ reason: 'fatal',
type: 'all',
+ category: 'checks',
priority: 100
});
}
@@ -13,7 +14,6 @@ export default class NoCacheInhibitor extends BushInhibitor {
if (client.isOwner(message.author)) return false;
for (const property in client.cache.global) {
if (!client.cache.global[property as keyof typeof client.cache.global]) {
- client.console.debug(`NoCacheInhibitor blocked message.`);
return true;
}
}
diff --git a/src/inhibitors/checks/guildUnavailable.ts b/src/inhibitors/checks/guildUnavailable.ts
new file mode 100644
index 0000000..0bd1bec
--- /dev/null
+++ b/src/inhibitors/checks/guildUnavailable.ts
@@ -0,0 +1,19 @@
+import { BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class GuildUnavailableInhibitor extends BushInhibitor {
+ public constructor() {
+ super('guildUnavailable', {
+ reason: 'guildUnavailable',
+ type: 'all',
+ category: 'checks',
+ priority: 70
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage): Promise<boolean> {
+ if (message.guild && !message.guild.available) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/command/dm.ts b/src/inhibitors/command/dm.ts
new file mode 100644
index 0000000..4e9c53e
--- /dev/null
+++ b/src/inhibitors/command/dm.ts
@@ -0,0 +1,19 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class DMInhibitor extends BushInhibitor {
+ public constructor() {
+ super('dm', {
+ reason: 'dm',
+ category: 'command',
+ type: 'post',
+ priority: 75
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.channel === 'dm' && message.guild) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/commands/globalDisabledCommand.ts b/src/inhibitors/command/globalDisabledCommand.ts
index 9a750cc..a6e24c7 100644
--- a/src/inhibitors/commands/globalDisabledCommand.ts
+++ b/src/inhibitors/command/globalDisabledCommand.ts
@@ -4,15 +4,15 @@ export default class DisabledGuildCommandInhibitor extends BushInhibitor {
public constructor() {
super('disabledGlobalCommand', {
reason: 'disabledGlobal',
- type: 'pre',
- priority: 4
+ category: 'command',
+ type: 'post',
+ priority: 300
});
}
public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
if (message.author.isOwner()) return false;
if (client.cache.global.disabledCommands?.includes(command?.id)) {
- client.console.debug(`disabledGlobalCommand blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/command/guild.ts b/src/inhibitors/command/guild.ts
new file mode 100644
index 0000000..b960439
--- /dev/null
+++ b/src/inhibitors/command/guild.ts
@@ -0,0 +1,19 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class GuildInhibitor extends BushInhibitor {
+ public constructor() {
+ super('guild', {
+ reason: 'guild',
+ category: 'command',
+ type: 'post',
+ priority: 80
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.channel === 'guild' && !message.guild) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/commands/guildDisabledCommand.ts b/src/inhibitors/command/guildDisabledCommand.ts
index ee798e5..d56e42c 100644
--- a/src/inhibitors/commands/guildDisabledCommand.ts
+++ b/src/inhibitors/command/guildDisabledCommand.ts
@@ -4,8 +4,9 @@ export default class DisabledGuildCommandInhibitor extends BushInhibitor {
public constructor() {
super('disabledGuildCommand', {
reason: 'disabledGuild',
- type: 'pre',
- priority: 3
+ category: 'command',
+ type: 'post',
+ priority: 250
});
}
@@ -14,7 +15,6 @@ export default class DisabledGuildCommandInhibitor extends BushInhibitor {
if (message.author.isOwner() || message.author.isSuperUser()) return false; // super users bypass guild disabled commands
if ((await message.guild.getSetting('disabledCommands'))?.includes(command?.id)) {
- client.console.debug(`disabledGuildCommand blocked message.`);
return true;
}
return false;
diff --git a/src/inhibitors/command/nsfw.ts b/src/inhibitors/command/nsfw.ts
new file mode 100644
index 0000000..563cb7a
--- /dev/null
+++ b/src/inhibitors/command/nsfw.ts
@@ -0,0 +1,20 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+import { TextChannel } from 'discord.js';
+
+export default class NsfwInhibitor extends BushInhibitor {
+ public constructor() {
+ super('nsfw', {
+ reason: 'notNsfw',
+ category: 'command',
+ type: 'post',
+ priority: 25
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.onlyNsfw && !(message.channel as TextChannel).nsfw) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/command/owner.ts b/src/inhibitors/command/owner.ts
new file mode 100644
index 0000000..22ac913
--- /dev/null
+++ b/src/inhibitors/command/owner.ts
@@ -0,0 +1,21 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class OwnerInhibitor extends BushInhibitor {
+ public constructor() {
+ super('owner', {
+ reason: 'owner',
+ category: 'command',
+ type: 'post',
+ priority: 100
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.ownerOnly) {
+ if (!client.isOwner(message.author)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/command/restrictedChannel.ts b/src/inhibitors/command/restrictedChannel.ts
new file mode 100644
index 0000000..4578d95
--- /dev/null
+++ b/src/inhibitors/command/restrictedChannel.ts
@@ -0,0 +1,21 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class RestrictedChannelInhibitor extends BushInhibitor {
+ public constructor() {
+ super('restrictedChannel', {
+ reason: 'restrictedChannel',
+ category: 'command',
+ type: 'post',
+ priority: 10
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.restrictedChannels?.length && message.channel) {
+ if (!command.restrictedChannels.includes(message.channel.id)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/command/restrictedGuild.ts b/src/inhibitors/command/restrictedGuild.ts
new file mode 100644
index 0000000..7ec6926
--- /dev/null
+++ b/src/inhibitors/command/restrictedGuild.ts
@@ -0,0 +1,21 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class RestrictedGuildInhibitor extends BushInhibitor {
+ public constructor() {
+ super('restrictedGuild', {
+ reason: 'restrictedGuild',
+ category: 'command',
+ type: 'post',
+ priority: 5
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.restrictedChannels?.length && message.channel) {
+ if (!command.restrictedChannels.includes(message.channel.id)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/inhibitors/command/superUser.ts b/src/inhibitors/command/superUser.ts
new file mode 100644
index 0000000..28674ea
--- /dev/null
+++ b/src/inhibitors/command/superUser.ts
@@ -0,0 +1,21 @@
+import { BushCommand, BushInhibitor, BushMessage, BushSlashMessage } from '@lib';
+
+export default class SuperUserInhibitor extends BushInhibitor {
+ public constructor() {
+ super('superUser', {
+ reason: 'superUser',
+ category: 'command',
+ type: 'post',
+ priority: 99
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, command: BushCommand): Promise<boolean> {
+ if (command.superUserOnly) {
+ if (!client.isSuperUser(message.author)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/lib/assets/Roboto-Regular.ttf b/src/lib/assets/Roboto-Regular.ttf
deleted file mode 100644
index 3d6861b..0000000
--- a/src/lib/assets/Roboto-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/src/lib/badlinks.json b/src/lib/badlinks.json
deleted file mode 100644
index 39212b5..0000000
--- a/src/lib/badlinks.json
+++ /dev/null
@@ -1,372 +0,0 @@
-[
- "acercup.com",
- "affix-cup.ru",
- "affix-sport.ru",
- "airdrops.tips",
- "aladdinhub.fun",
- "allskinz.xyz",
- "ano-skinspin.xyz",
- "anomalygiveaways.pro",
- "anomalyknifes.xyz",
- "anomalyskin.xyz",
- "anomalyskinz.xyz",
- "anoskinzz.xyz",
- "berrygamble.com",
- "bit-skins.ru",
- "bitknife.xyz",
- "bitskines.ru",
- "casefire.fun",
- "challengeme.in",
- "challengeme.vip",
- "challengme.ru",
- "cloud9team.space",
- "cmepure.com",
- "cmskillcup.com",
- "counterpaid.xyz",
- "counterspin.top",
- "counterstrikegift.xyz",
- "cs-beast.xyz",
- "cs-lucky.xyz",
- "cs-pill.xyz",
- "cs-prizeskins.xyz",
- "cs-prizeskinz.xyz",
- "cs-simpleroll.xyz",
- "cs-skinz.xyz",
- "cs-smoke.xyz",
- "cs-spinz.xyz",
- "cs-victory.xyz",
- "csallskin.xyz",
- "csbuyskins.in",
- "cscoat.eu",
- "csgo-analyst.com",
- "csgo-cash.eu",
- "csgo-gifts.com",
- "csgo-market.ru.com",
- "csgo-market.ru.com",
- "csgo-steamanalyst.net",
- "csgo-swapskin.com",
- "csgo-trade.net",
- "csgo-up.com",
- "csgobeats.com",
- "csgobelieve.ru",
- "csgocase.one",
- "csgocashs.com",
- "csgocheck.ru.com",
- "csgocheck.ru",
- "csgocompetive.com",
- "csgocupp.ru.com",
- "csgocybersport.ru.com",
- "csgodetails.info",
- "csgodreamer.com",
- "csgodrs.com",
- "csgoeasywin.ru.com",
- "csgoelite.xyz",
- "csgoencup.com",
- "csgoevent.xyz",
- "csgogift49.xyz",
- "csgoindex.ru.com",
- "csgoindex.ru",
- "csgoitemdetails.com",
- "csgoitemsprices.com",
- "csgoko.tk",
- "csgomarble.xyz",
- "csgomarketplace.net",
- "csgomarkets.net",
- "csgoorun.ru",
- "csgoprocupgo.com",
- "csgorcup.com",
- "csgorose.com",
- "csgoroyalskins1.com",
- "csgoskill.ru",
- "csgoskinprices.com",
- "csgoskinsinfo.com",
- "csgoskinsroll.com",
- "csgosteamanalysis.com",
- "csgosteamanalyst.ru",
- "csgoteammate.gq",
- "csgothunby.com",
- "csgotrades.net",
- "csgovip.ru",
- "csgoxgiveaway.ru",
- "csgozone.net.in",
- "csgunskins.xyz",
- "csmoneyskinz.xyz",
- "csmvcecup.com",
- "csprices.in",
- "csskill.com",
- "csskillpro.xyz",
- "csskinz.xyz",
- "cstournament.ru",
- "csxrnoney.com",
- "cybergamearena.ru",
- "d2cups.com",
- "d2faceit.com",
- "deamonbets.ru",
- "demonbets.ru",
- "denforapasi.cf",
- "diablobets.com",
- "dicsord.gifts",
- "discod.gift",
- "discord-gifts.com",
- "discord-nitro.gifts",
- "discord.blog",
- "discord.shop",
- "discordgivenitro.com",
- "discrod.gift",
- "disrcod.com",
- "dlscord.info",
- "dlscord.online",
- "dlscord.press",
- "dlscord.store",
- "dlscord.world",
- "discrod.gifts",
- "dlscord.wiki",
- "dirscod.gift",
- "dirscod.com",
- "discorcl.link",
- "discod.info",
- "dicsord.net",
- "discorb.co",
- "dicsord.net",
- "dicksod.co",
- "diskord.ru.com",
- "discord-nitro.link",
- "discorb.ru.com",
- "discordnitrogift.ru",
- "discorcl.click",
- "doatgiveaway.top",
- "dopeskins.com",
- "dota2fight.net",
- "dota2fight.ru",
- "dota2giveaway.top",
- "dota2giveaways.top",
- "dotafights.vip",
- "dotagiveaway.win",
- "dragon-up.online",
- "earnskinz.xyz",
- "emeraldbets.ru",
- "eplcups.com",
- "esea-mdl.com",
- "esportgaming.ru",
- "event-games4roll.com",
- "exchangeuritems.gq",
- "extraskinscs.xyz",
- "ezwin24.ru",
- "facecup.fun",
- "faceiteasyleague.ru",
- "fatown.net",
- "fineleague.fun",
- "fireopencase.com",
- "fivetown.net",
- "free-skins.ru",
- "free-nitro.ru",
- "freenitros.ru",
- "free-nitros.ru",
- "freenitroi.ru",
- "g2-give.ru",
- "g2-give.ru",
- "game4roll.com",
- "gameluck.ru",
- "gamerich.xyz",
- "games-roll.ga",
- "games-roll.ml",
- "games-roll.ru",
- "gift4keys.com",
- "giveavvay.com",
- "giveawayskin.com",
- "global-skins.gq",
- "globalcsskins.xyz",
- "globalskins.tk",
- "goldendota.com",
- "goodskins.gq",
- "gosteamanalyst.com",
- "gtakey.ru",
- "go.rancah.com",
- "giftsdiscord.ru",
- "get-nitro.net",
- "hellgiveaway.trade",
- "hellstores.xyz",
- "hltvcsgo.com",
- "hltvgames.net",
- "iemcup.com",
- "keys-loot.com",
- "knifespin.top",
- "knifespin.top",
- "knifespin.xyz",
- "knifespins.xyz",
- "knifez-roll.xyz",
- "knifez-win.xyz",
- "league-csgo.com",
- "lehatop-01.ru",
- "lootxmarket.com",
- "loungeztrade.com",
- "lucky-skins.xyz",
- "makson-gta.ru",
- "maxskins.xyz",
- "mvcsgo.com",
- "mvpcup.ru",
- "mvptournament.com",
- "mygames4roll.com",
- "made-nitro.com",
- "naviback.ru",
- "night-skins.com",
- "nitros-gift.com",
- "nitro-discord.org",
- "nwgwroqr.ru",
- "ownerbets.com",
- "oligarph.club",
- "playerskinz.xyz",
- "pubggift62.xyz",
- "rangskins.com",
- "rave-new.ru",
- "roll-skins.ru",
- "roll4knife.xyz",
- "roll4tune.com",
- "rollknfez.xyz",
- "rollskin-simple.xyz",
- "rushbskins.xyz",
- "rushskins.xyz",
- "s1mple-spin.xyz",
- "sakuralive.ru.com",
- "scale-navi.pp.ru",
- "simple-knifez.xyz",
- "simple-win.xyz",
- "simplegamepro.ru",
- "simpleroll-cs.xyz",
- "simplespinz.xyz",
- "simplewinz.xyz",
- "skin-index.com",
- "skin888trade.com",
- "skincs-spin.top",
- "skincs-spin.xyz",
- "skinmarkets.net",
- "skins-hub.top",
- "skins-info.net",
- "skins-jungle.xyz",
- "skinsboost.ru",
- "skinsdatabse.com",
- "skinsind.com",
- "skinsmind.ru",
- "skinspace.ru",
- "skinsplane.com",
- "skinsplanes.com",
- "skinsplanets.com",
- "skinxinfo.net",
- "skinxmarket.site",
- "skinz-spin.top",
- "skinz-spin.xyz",
- "skinzjar.ru",
- "skinzprize.xyz",
- "skinzspin-cs.xyz",
- "skinzspinz.xyz",
- "sleanmconmunltiy.ru",
- "spin-games.com",
- "spin4skinzcs.top",
- "spin4skinzcs.xyz",
- "spinforskin.ml",
- "sponsored-simple.xyz",
- "staemcomnrnunitiy.ru.com",
- "staemcomrnunity.store",
- "staermcrommunity.me",
- "staffstatsgo.com",
- "starrygamble.com",
- "stat-csgo.ru"