· 6 years ago · Dec 28, 2019, 06:42 PM
1//Discord
2const Discord = require('discord.js');
3const peeky = new Discord.Client({ disabledEvents: ["TYPING_START"], disableEveryone: true });
4
5//DDBL
6const { ddblAPI } = require('ddblapi.js');
7const ddbl = new ddblAPI("482945063282802698", process.env.DDBL_TOKEN);
8
9//BLS
10const BotList = require('botlist.space');
11const bls = new BotList.Client({ id: "482945063282802698", botToken: process.env.BLS_TOKEN });
12
13//Music
14const ytdl_discord = require('ytdl-core-discord');
15const search = require('youtube-search');
16const ytdl = require('ytdl-core');
17const opus = require('node-opus');
18
19//Canvas
20const Canvas = require('canvas');
21const request = require('request');
22
23//Data
24const Enmap = require("enmap");
25peeky.userData = new Enmap({name: "userData"});
26peeky.serverData = new Enmap({name: "serverData"});
27peeky.channelData = new Enmap({name: "channelData"});
28const Setting = require('./setting.json');
29
30//Website
31const http = require('http');
32const express = require('express');
33const app = express();
34app.use(express.static('public'));
35app.get('/', function(request, response) {
36 response.sendFile(__dirname + '/views/index.html');
37 response.sendStatus(200);
38});
39app.listen(process.env.PORT);
40 setInterval(() => { http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`);
41}, 280000);
42
43//Miscellaneous Packages
44const fs = require('fs');
45const ms = require('parse-ms');
46const node_fetch = require('node-fetch');
47const https = require('https');
48
49//Variables
50var EmbedColor = 3093047 //3553599;
51const AutoDeleteTime = 250;
52const DayMs = 86400000;
53const WeekMs = 604800000; //7 Days
54const MonthMs = 2592000000; //30 Days
55const InactiveWipe = MonthMs;
56const InactiveTime = (InactiveWipe / ( 24 * 60 * 60 * 1000 ));
57const ProfileBoosterTime = (DayMs / ( 60 * 60 * 1000 ));
58
59//Sets and Arrays
60const ErrorBag = new Set();
61const BannedUsers = new Array();
62const WebsiteCooldowns = new Set();
63const GainCooldown = new Set();
64const LimitedRolesCooldown = new Set();
65const RandomTreasuresCooldown = new Set();
66const BadgeCheckCooldown = new Set();
67const CommandCooldown = new Set();
68const SetInviteCooldown = new Set();
69const ProfileCooldown = new Set(); const ProfileCooldownMS = 5000;
70const MusicCmdCooldown = new Set();
71const PeekyCmdCooldown = new Set();
72const ChannelCooldown = new Set(); const ChannelCooldownMS = 10000;
73const RoleCooldown = new Set(); const RoleCooldownMS = 10000;
74const EventCountdownCooldown = new Set();
75const MemberCounterCooldown = new Set();
76const GameLogsCooldown = new Set();
77const MessageLogCooldown = new Set();
78const DonorWallCooldown = new Set();
79const ReactionRolesCooldown = new Set();
80const TicketSystemCooldown = new Set();
81const ServerAgeCooldown = new Set();
82const RedditPostsCooldown = new Set();
83const ResponseCooldowns = new Set(); const ResponseCooldownMS = 5000;
84const FloodProtectionStrikes = new Array();
85const KarmaImages = new Array();
86const CheckedDataCreations = new Set();
87const QueuedSOSMessages = new Set();
88const ActiveMinigames = new Set();
89const CurrentlyPlaying = new Set();
90const CurrentlyStreaming = new Set();
91const ClearedNames = new Set();
92const FailedVoteChecks = new Set();
93const FailedDMs = new Set();
94const LoggedMessages = new Set();
95const ActivatedTicketSystems = new Set();
96
97//Image Assets
98const TwitterIcon = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Ftwitter.png?1555574745120";
99const RedditIcon = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Freddit.png?1555575444018";
100const InstagramIcon = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Finstagram.png?1555615973963";
101const DiscordIcon = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fdiscord.png?1558635704218";
102
103const DarkField = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fdarkfield.png?1558421870621";
104const LightField = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Flightfield.png?1558421869640";
105
106const DefaultBackground = "https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground1.png?v=1575192820685";
107const NoBackground = "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2FNA%20Background.png?v=1563929199191"
108const PrismPattern = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fpattern_assets.png?1554545063162";
109const CoinImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fimage_coins.png?1543767999542";
110const ExpImage = "httpss://cdn.glitch.com/bb3aad24-5d49-4fdf-ba07-725b7b1750e9%2Fexp.png?v=1564224431507";
111const LevelImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fimage_level.png?1541260281702";
112const ChestImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fimage_chest.png?1541260288051";
113const TreasureImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Ftreasures.png?v=1568646809345";
114const BadgesImage = "https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbadges.png?v=1564245176155";
115const KarmaImage = "https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fkarma.png?v=1564244903816";
116const XPImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2FScreenshot_141.png?1543781509470";
117const BackpackImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fimage_backpack.png?1546614356449";
118const HollowImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2FHollowImage.png";
119
120const SupporterImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fsupporter.png?1548194367244";
121const PeekyStaffImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fpeekystaff.png?1548824803415";
122const ModeratorImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fmoderator.png?1548824732338";
123const VeteranImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fveteran.png?1548951084956";
124const BugCHunterImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbugcatcher.png?1548261764050";
125const ContributorImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fcontributor.png?1548786864495";
126const VoterImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fvoter.png?1551541314431";
127const GamblerImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fgambler.png?v=1568922623251";
128const CharityImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fcharity.png?v=1568922627904";
129const FashionImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Ffashion.png?v=1568922621601";
130const OwnershipImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fownership.png?v=1568922631330";
131const MedallistImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fmedallist.png?v=1568900374609";
132const MovieNighterImage = "https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fmovienighter.png?1553099659112";
133const CelebratorImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fcelebrator.png?v=1568900372214";
134const PollerImage = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fpoller.png?1556170526097";
135const PublisherImage = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fpublisher.png?1555782065115";
136const PartyImage = "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fparty.png?1558040749323";
137const HorderImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fhorder.png?v=1568922626526";
138const PainterImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fpainter.png?v=1568922632764";
139const MinerImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fminer.png?v=1568922629305";
140const BoosterImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbooster.png?v=1568469682712";
141const GamerImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fgamer.png?v=1568922624710";
142const EvilImage = "https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fevil.png?v=1564270118631";
143const GoodImage = "https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fgood.png?v=1564346700581";
144const GopbotImage = "https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fgopbot.png?v=1568997070177";
145const TranslatorImage = "https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Ftranslator.png?v=1576920631134";
146
147//Vote Emotes
148const DefaultUpvote = "529413730874949632";
149const DefaultDownvote = "529413312862093322";
150
151//Badge Emotes
152const PeekyStaffEmote = "<:peekystaff:540036337739366400>";
153const ContributorEmote = "<:contributor:539895189334917130>";
154const SupporterEmote = "<:supporter:539895190190686238>";
155const BugHunterEmote = "<:bugcatcher:539895189737832448>";
156const ModeratorEmote = "<:moderator:540036307213221901>";
157const VeteranEmote = "<:veteran:540565010972147724>";
158const GamblerEmote = "<:gambler:624330470825525248>";
159const CharityEmote = "<:charity:624330470515277853>";
160const FashionEmote = "<:fashion:624330470255099924>";
161const VoterEmote = "<:voter:551429736463859762>";
162const OwnershipEmote = "<:ownership:624330470796296202>";
163const MedallistEmote = "<:medallist:624237944890458123>";
164const MovieNighterEmote = "<:movienighter:557968105494675456>";
165const CelebratorEmote = "<:celebrator:624237582355529729>";
166const PollerEmote = "<:poller:570845554758778880>";
167const PublisherEmote = "<:publisher:569215883109466143>";
168const PartyEmote = "<:party:578689336116248618>";
169const HorderEmote = "<:horder:624330470561153040>";
170const PainterEmote = "<:painter:624330470284460033>";
171const MinerEmote = "<:miner:624330470460620831>";
172const BoosterEmote = "<:booster:622431477384085514>";
173const GamerEmote = "<:gamer:624330470288654337>";
174const EvilEmote = "<:evil:604817305247023117>";
175const GoodEmote = "<:good:605138883138551838>";
176const GopbotEmote = "<:gopbot:624643543037771841>";
177const TranslatorEmote = "<:translator:657876886260809728>";
178
179//Other Emotes
180const ErrorIcon = "<:peeky_error:529412267343872031>";
181const SuccessIcon = "<:peeky_success:529415084804669487>";
182const InfoIcon = "<:peeky_info:529412267746394133>";
183const Hollow = "<:peeky_hollow:506921440067452928>";
184const WhiteSquare = "<:peeky_white:529305474604990464>";
185const TreasureIcon = "<:treasure:623186257404755969>";
186const GreditIcon = "<:gredit:558673809343774720>";
187const ChestIcon = "<:chest:561511603305185280>";
188const EnabledIcon = "<:enabled:538295053940948993>";
189const DisabledIcon = "<:disabled:538295054431813662>";
190const SettingsIcon = "<:settings:586612320839532573>";
191const RedditUpvote = "<:RedditUpvote:620124949855600640>";
192const RedditDownvote = "<:RedditDownvote:620122348745523200>";
193const OwnerTag = "<:owner:543001955921035274>";
194const BoostTag = "<:boost:642647004056518665>";
195const BotTag = "<:bot:541014775468130336>";
196
197//Role IDs
198const StaffRole = "494429609874685983";
199const SupporterRole = "504740473185894400";
200const BoosterRole = "620654437081415686";
201const ServerUpgradeRole = "549190337437106176";
202const ProfileBoosterRole = "603249410532442116";
203const RedeemRoleChests = "505491936401162270";
204
205//Other IDs
206const OwnerId = "108899856889737216";
207const PeekyId = "482945063282802698";
208const SupportServer = "319891596772638744";
209const AnnouncementsChannel = "346710479407808524";
210const EmojiStorage1 = "493048757286600716";
211const WorkshopChannel = "501130667078189066";
212const ServerLogChannel = "610672449738244102";
213
214//Collab Bot IDs
215const GopbotId = "458404920970969098";
216
217//Server Message Tags
218const GuildNameTag = "[GuildName]";
219const GuildSizeTag = "[GuildSize]";
220const GuildOwnerTag = "[GuildOwner]";
221const GuildVerificationTag = "[GuildLevel]";
222const GuildAcronymTag = "[GuildAcronym]";
223
224//Strings
225const AllString = "all";
226const RandomString = "random";
227const BadFormat = "invalid";
228const Exclusive = "Exclusive";
229
230//Response Messages
231const CooldownMessage1 = [ErrorIcon + " You are currently on a cooldown for that command.", ErrorIcon + " Tento příkaz je pro vás momentálně zastaven."];
232const CooldownMessage2 = [ErrorIcon + " Automated channel creation is currently on a cooldown.", ErrorIcon + " Automatická tvorba kanálů je momentálně zastavena."];
233const CooldownMessage3 = [ErrorIcon + " Automated role creation is currently on a cooldown.", ErrorIcon + " Automatická tvorba rolí je momentálně zastavena."];
234const CooldownMessage4 = [ErrorIcon + " You are currently on a cooldown for that function.", ErrorIcon + " Tato funkce je momentálně zastavena."];
235
236const PermissionsMessageError1 = [ErrorIcon + " You are lacking the required permissions do that.", ErrorIcon + " Chybý vám požadovaná oprávnění."];
237const PermissionsMessageError2 = [ErrorIcon + " You need to be the owner of this server to do that.", ErrorIcon + " Musíte být vlastníkem serveru."];
238const PermissionsMessageError3 = [ErrorIcon + " I am missing required permissions to do that.", ErrorIcon + " Chybý mi požadovaná opravnění."];
239
240const ErrorMessage1 = [ErrorIcon + " You need more Gredit to do that.", ErrorIcon + " Potřebujete získat více Greditu."]
241const ErrorMessage2 = [ErrorIcon + " The new description is too large.", ErrorIcon + " Nový popisek je příliš dlouhý."];
242const ErrorMessage3 = [ErrorIcon + " The provided mention is invalid.", ErrorIcon + " Toto označení je invalidní."];
243const ErrorMessage4 = [ErrorIcon + " You need to enter a valid YouTube link.", ErrorIcon + " Vložte validní YouTube odkaz."];
244const ErrorMessage5 = [ErrorIcon + " You do not have that background in your inventory.", ErrorIcon + " Toto pozadí ještě nelastníte."];
245const ErrorMessage6 = [ErrorIcon + " You do not have enough chests.", ErrorIcon + " Nemáte dost truhel."];
246const ErrorMessage7 = [ErrorIcon + " The mentioned user has no profile.", ErrorIcon + " Tento uživatel nemá žádný profil."];
247const ErrorMessage8 = [ErrorIcon + " Mentions are not allowed for this command.", ErrorIcon + " Označení nejsou pro tento příkaz povoleny"];
248const ErrorMessage9 = [ErrorIcon + " You must enter a valid amount.", ErrorIcon + " Musíte vložit spravný počet."];
249const ErrorMessage10 = [ErrorIcon + " Make sure the function's name is all in lowercase.", ErrorIcon + " Ujistěte se, že jméno funkce je v malých písmenkách."];
250const ErrorMessage11 = [ErrorIcon + " You need to become a Supporter to do that.", ErrorIcon + " Pro tohle musíte být Supporter."];
251const ErrorMessage12 = [ErrorIcon + " There are no songs playing right now.", ErrorIcon + " Momentálně nehrajou žádné písničky."];
252const ErrorMessage13 = [ErrorIcon + " Something has gone unexpectedly wrong.", ErrorIcon + " Stalo se něco nečekaného"];
253const ErrorMessage14 = [ErrorIcon + " You already own that ackground.", ErrorIcon + " Toto pozadí již vlastníte."];
254const ErrorMessage15 = [ErrorIcon + " You cannot add any more songs to your playlist.", ErrorIcon + " Do vašeho playlistu nelze přidat více písniček"];
255const ErrorMessage16 = [ErrorIcon + " That background doesn't exist.", ErrorIcon + " Toto pozadí neexistuje."];
256const ErrorMessage17 = [ErrorIcon + " You need to specify the function.", ErrorIcon + " Musíte upřesnit funkci."];
257const ErrorMessage18 = [ErrorIcon + " You need to provide valid arguments for the command.", ErrorIcon + " Musíte přidat spravný argumenty."];
258const ErrorMessage19 = [ErrorIcon + " You need to join the Support Server.", ErrorIcon + " Musíte se připojit na můj server."];
259const ErrorMessage20 = [ErrorIcon + " You need to upload a file.", ErrorIcon + " Musíte nahrát soubor."];
260const ErrorMessage21 = [ErrorIcon + " You can only do that in upgraded servers.", ErrorIcon + " Tohle funguje jenom ve vylepšených serverech."];
261
262const InfoMessage1 = [InfoIcon + " You have earned a new badge.", ErrorIcon + " Dostal jste nový odznak."];
263const InfoMessage2 = [InfoIcon + " You have set the default background.", ErrorIcon + " Nastavil jste si základní pozadí."];
264
265//Small Arrays
266const Days = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];
267const BlacklistedWebsites = [ "discord.gg", "discord.io", "discord.me", "twitch.tv", "bit.ly", "goo.gl", "youtu.be", "youtube.com", "twitter.com", "paypal.me", "paypal.com", "selly.gg", "tiny.cc", " evassmant.com", "urlzs.com" ];
268const VulgarPhrases = [ "anal", "anus", "arse", "ass", "ballsack", "balls", "bastard", "bitch", "biatch", "bloody", "blowjob", "boner", "boob", "bugger", "bum", "butt", "buttplug", "clitoris", "cock", "coon", "crap", "cunt", "damn", "dick", "dildo", "dyke", "fag", "feck", "fellate", "fellatio", "felching", "fuck", "fudgepacker", "fudge", "packer", "flange", "Goddamn", "God", "damn", "hell", "homo", "jerk", "jizz", "knobend", "knob", "end", "labia", "lmao", "lmfao", "muff", "nigger", "nigga", "penis", "piss", "poop", "prick", "pube", "pussy", "queer", "scrotum", "sex", "shit", "sh1t", "slut", "smegma", "spunk", "tit", "tosser", "turd", "twat", "vagina", "wank", "whore", "wtf" ];
269const ImmuneServers = [ SupportServer, EmojiStorage1, `454933217666007052`, `264445053596991498`, `330777295952543744`, `387812458661937152`, `374071874222686211`, `439866052684283905`, `534551489595703306`, `608711879858192479`, `603194252872122389` ];
270const EmojiNumbers = [ "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣" ];
271const TextChannels = [ "text", "news" ];
272
273//Small Objects
274var Banner = { Source: 0, Price: 1 , Name: 2 , Credit: 3, RevenueID: 4, AddedDate: 5 };
275var Languages = [ "English", "Čeština" ]
276var StreamOptions = { volume: 0.25 };
277var SearchOptions = { maxResults: 1, key: process.env.YT_TOKEN };
278
279const Banners = [
280
281 [DefaultBackground, 0, "Default", "Vojtěch Jílovec", undefined, 0], //Default
282 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground2.jpg?1537950866619", 750, "Welcome to NYC", "The Division", undefined, 0],
283 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground3.jpg?1535302285990", 725, "Henry the knight", "Kingdom Come Deliverence", undefined, 0],
284 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground4.jpg?1535333614451", 750, "Fallout's garage", "Fallout 4", undefined, 0],
285 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground5.jpg?1537816491802", 575, "Encounter with Stalkers", "Unknown", undefined, 0],
286 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground6.jpg?1535285894346", 450, "The Whalers", "Unknown", undefined, 0],
287 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground7.jpg?1535290804866", 650, "Mysterious Man", "Unknown", undefined, 0],
288 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground8.jpg?1537816628115", 675, "Escape of noobs", "ROBLOX", undefined, 0],
289 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground9.jpg?1537888709532", 550, "The last crusade", "Unknown", undefined, 0],
290 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground10.jpg?1535334052918", 750, "The last of them", "The Last of Us", undefined, 0],
291 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground11.jpg?1535334267005", 675, "Birch Forest", "Minecraft", undefined, 0],
292 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground12.png?1537814782102", 850, "Epidemic", "Rainbow Six Sige", undefined, 0],
293 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground13.jpg?1537814934225", 950, "Hostage Situation", "Rainbow Six Sige", undefined, 0],
294 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground14.jpg?1537950866487", 625, "The province of Skyrim", "The Elder Scrolls 5 Skyrim", undefined, 0],
295 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground15.jpg?1535404090262", 650, "The silent assassin", "Dishonored", undefined, 0],
296 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground16.jpg?1535404088759", 750, "Out of this world", "Unknown", undefined, 0],
297 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground17.jpg?1537873790199", 725, "First bank robbery", "PAYDAY 2", undefined, 0],
298 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground18.jpg?1535481872824", 775, "The Saints", "Unknown", undefined, 0],
299 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground19.jpg?1535481874193", 675, "Secret burial", "Unknown", undefined, 0],
300 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground20.jpg?1535481872090", 625, "Kane and Lynch", "Kane and Lynch Dog Days", undefined, 0],
301 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground21.jpg?1535569846831", 500, "Helicopter escape", "SAS Zombie Assault 3", undefined, 0],
302 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground22.jpg?1535990062310", 425, "Tough welcome", "Killing Floor 1", undefined, 0],
303 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground23.jpg?1536565142261", 675, "Crashed helicopter", "Unknown", undefined, 0],
304 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground24.jpg?1536565143281", 700, "The horde", "Unknown", undefined, 0],
305 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground25.png?1536600827686", 750, "Abandoned city", "Unknown", undefined, 0],
306 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground26.jpg?1536603983804", 875, "The space", "Unknown", undefined, 0],
307 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground27.jpg?1536934121522", 750, "Lake of peace", "Unknown", undefined, 0],
308 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground28.jpg?1536934103891", 725, "King Slime", "Unknown", undefined, 0],
309 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground29.png?1537047514422", 425, "Gladiator fights", "Unknown", undefined, 0],
310 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground30.jpg?1537814773898", 400, "Ambush", "Unknown", undefined, 0],
311 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground31.jpg?1537815016132", 425, "Red pattern", "Unknown", undefined, 0],
312 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground32.jpg?1537950866063", 850, "Close Cry", "Far Cry 4", undefined, 0],
313 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground33.jpg?1537950866386", 750, "Dark knight", "Unknown", undefined, 0],
314 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground34.jpg?1539510881741", 350, "Orc genocide", "The Elder Scrolls 5 Skyrim", undefined, 0],
315 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground35.jpg?1539518504422", 250, "Village raid", "Unknown", undefined, 0],
316 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground36.jpg?1539518559631", 420, "M e m e H o u s e", "Unknown", undefined, 0],
317 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground37.png?1539543378623", 825, "Supply royale", "Player Unknown's Battle Royale", undefined, 0],
318 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground38.png?1539546582730", 275, "Counter attack", "Unknown", undefined, 0],
319 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground39.jpg?1539623688927", 775, "Into the battle", "Guild Wars 2", undefined, 0],
320 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground40.jpg?1539879968743", 425, "Cool ferrets", "Unknown", undefined, 0],
321 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground41.png?1558777240101", 375, "You right now", "Unknown", undefined, 0],
322 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground42.jpg?1539871005083", 850, "Father and daughter", "Dishnored 2", undefined, 0],
323 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground43.jpg?1539885633665", 350, "Lit up forest", "Unknown", undefined, 0],
324 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground44.jpg?1539885633627", 375, "Chill lake", "Unknown", undefined, 0],
325 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground45.jpg?1539885635308", 450, "Fire forest", "Unknown", undefined, 0],
326 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground46.jpg?1540021324998", 650, "Pepe's sky", "Unknown", undefined, 0],
327 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground47.jpg?1540027329670", 775, "Lost world", "Fornite", undefined, 0],
328 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground48.jpg?1540033276474", 325, "Dragon slayer", "The Elder Scrolls 5 Skyrim", undefined, 0],
329 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground49.jpg?1540033274127", 475, "Rush", "Unknown", undefined, 0],
330 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground50.png?1540650384768", 400, "USSR", "Unknown", undefined, 0],
331 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground51.jpg?1540107026526", 625, "Lizard Wizard", "Unknown", undefined, 0],
332 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground52.jpg?1540309332233", 450, "Left unturned", "Unturned", undefined, 0],
333 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground53.jpg?1540106992532", 675, "Home invasion", "Telltale's The Walking Dead", undefined, 0],
334 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground54.jpg?1540132038895", 650, "Dungeon explorers", "Unknown", undefined, 0],
335 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground55.jpg?1540132031244", 800, "Realm of peace", "Unknown", undefined, 0],
336 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground56.jpg?1540133298644", 750, "Lonely Stalker", "S.T.A.L.K.E.R.", undefined, 0],
337 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground57.png?1540135651911", 500, "Darkest knight", "Unknown", undefined, 0],
338 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground58.jpg?1540135654277", 775, "Dragon fighter", "Unknown", undefined, 0],
339 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground59.jpg?1540135656509", 875, "Lost giants", "Unknown", undefined, 0],
340 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground60.jpg?1540135658192", 800, "Ragnarok", "Thor Ragnarok", undefined, 0],
341 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground61.jpg?1540143872268", 875, "World full of fantasy", "Darksiders 3", undefined, 0],
342 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground62.png?1540150284329", 925, "Cyberpunk", "Unknown", undefined, 0],
343 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground63.jpg?1540151664457", 650, "Survival of the fittest", "Unknown", undefined, 0],
344 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground64.jpg?1540152341562", 825, "The Ranger", "Fallout New Vegas", undefined, 0],
345 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground65.jpg?1540153114935", 800, "Dungeon keep", "Unknown", undefined, 0],
346 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground66.jpg?1540238680343", 875, "Clear view", "Dying Light", undefined, 0],
347 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground67.jpg?1540238738204", 725, "Silent thief", "Thief", undefined, 0],
348 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground68.jpg?1540239775507", 950, "Mighty assassin", "Assassins Creed Odyssey", undefined, 0],
349 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground69.png?1540240323226", 825, "Power armor", "Unknown", undefined, 0],
350 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground70.jpg?1540240540188", 875, "Horse poker", "A Song of Ice and Fire", undefined, 0],
351 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground71.png?1540240626824", 775, "War never changes", "Unknown", undefined, 0],
352 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground72.png?1540309268628", 825, "Peace and calm", "Unknown", undefined, 0],
353 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground73.jpg?1540328071975", 875, "The last light", "Metro Last Light", undefined, 0],
354 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground74.jpg?1540326671899", 775, "Max's race", "Mad Max", undefined, 0],
355 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground75.jpg?1540327235631", 875, "Overlook on Mordor", "Shadow of Mordor", undefined, 0],
356 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground76.jpg?1540456781085", 675, "Raid ship", "Unknown", undefined, 0],
357 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground77.jpg?1540543916309", 750, "Drawn crash", "Unknown", undefined, 0],
358 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground78.png?1540576871453", 675, "Feared knight", "Unknown", undefined, 0],
359 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground79.png?1540577542371", 500, "Bohemian raid", "Unknown", undefined, 0],
360 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground80.jpg?1540578179868", 775, "Patient hunter", "Unknown", undefined, 0],
361 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground81.jpg?1540584390436", 825, "Training duels", "Unknown", undefined, 0],
362 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground82.png?1540912286983", 450, "Goal!!!", "Unknown", undefined, 0],
363 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground83.jpg?1540592361761", 725, "The catacombs", "Unknown", undefined, 0],
364 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground84.jpg?1540639642216", 550, "Frost troll encounter", "Unknown", undefined, 0],
365 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground85.png?1540640316587", 350, "SCP background", "Unknown", undefined, 0],
366 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground86.jpg?1540908052580", 525, "The Avengers", "Unknown", undefined, 0],
367 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground87.jpg?1540716574310", 675, "Store outbreak", "Unknown", undefined, 0],
368 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground88.png?1540724038256", 850, "Dry blood", "Dying Light Bad Blood", undefined, 0],
369 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground89.png?1540724452325", 850, "The swarm", "Dying Light", undefined, 0],
370 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground90.jpg?1540724504181", 875, "The Moonlord", "Unknown", undefined, 0],
371 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground91.jpg?1540732418318", 900, "Wastelanders", "Unknown", undefined, 0],
372 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground92.png?1540732542780", 425, "Shad rage", "Shadiversity", undefined, 0],
373 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground93.png?1540732797407", 500, "Five Finger Death Punch", "Five Finger Death Punch", undefined, 0],
374 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground94.png?1540732802324", 500, "Slza", "Slza", undefined, 0],
375 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground95.png?1540732804837", 500, "Hollywood Undead", "Hollywood Undead", undefined, 0],
376 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground96.png?1540733411430", 675, "Carnival infestation", "SAS Zombie Assault 3", undefined, 0],
377 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground97.png?1540738875332", 700, "Last Man Battalion", "The Division", undefined, 0],
378 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground98.jpeg?1540751959042", 825, "Cake liar", "Portal", undefined, 0],
379 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground99.jpg?1540906544488", 875, "Fallout together", "Fallout 76", undefined, 0],
380 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground100.jpg?1540906676579", 875, "Rigged game", "Fallout New Vegas", undefined, 0],
381 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground_101.jpg?1540909984834", 675, "Cursed brothers", "Fear 3", undefined, 0],
382 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground102.png?1540910240235", 750, "Dangerous follower", "Outlast 2", undefined, 0],
383 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground103.png?1540910702105", 675, "Three cowboys", "Unknown", undefined, 0],
384 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground104.jpg?1540921032023", 700, "Cursed forest", "Unknown", undefined, 0],
385 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground105.png?1540922347614", 750, "Blocky bridge", "Minecraft", undefined, 0],
386 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground106.png?1540922585363", 825, "Four survivors", "Left 4 Dead", undefined, 0],
387 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground107.png?1540922676410", 925, "Genocide in mordor", "Shadow of Mordor", undefined, 0],
388 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground108.jpg?1540922769333", 950, "Robot hunter", "Horizon Zero Dawn", undefined, 0],
389 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground109.png?1540922913032", 675, "The big crusade", "Unknown", undefined, 0],
390 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground110.jpg?1540923010977", 500, "Imagine Dragons", "Imagine Dragons", undefined, 0],
391 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground111.png?1540923189976", 825, "Securing the corner", "Unknown", undefined, 0],
392 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground112.png?1540923310896", 875, "Cursed with knowledge", "Unknown", undefined, 0],
393 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground113.png?1540923433944", 925, "Outbreak siege", "Rainbow Six Siege", undefined, 0],
394 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground114.png?1540923593655", 775, "The Postal dude", "Unknown", undefined, 0],
395 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground115.png?1540923783605", 750, "Sunset", "Unknown", undefined, 0],
396 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground116.jpg?1540997970518", 775, "Sky planets", "Unknown", undefined, 0],
397 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground117.jpg?1540997969729", 825, "Chill view", "Unknown", undefined, 0],
398 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground118.jpg?1540998120961", 850, "Sea wyren", "Unknown", undefined, 0],
399 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground119.jpg?1540998420614", 925, "Doomed", "DOOM", undefined, 0],
400 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground120.png?1540999231874", 825, "Sci-fi guards", "Unknown", undefined, 0],
401 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground121.png?1546534600249", 950, "Corvo", "Dishonored 2", undefined, 0],
402 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground122.jpg?1541102671802", 875, "Dragon siege", "Unknown", undefined, 0],
403 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground123.jpg?1541102674654", 900, "Trade market", "Unknown", undefined, 0],
404 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground124.jpg?1541174620357", 500, "LSD", "Unknown", undefined, 0],
405 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground125.jpg?1541248189955", 875, "Bloom", "Unknown", undefined, 0],
406 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground126.png?1541253186637", 725, "Restaurant raid", "Kane and Lynch Dog Days", undefined, 0],
407 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground127.png?1541253652465", 875, "The burial", "PAYDAY 2", undefined, 0],
408 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground128.png?1541257973255", 675, "Leeeroooyyy", "Hearthstone", undefined, 0],
409 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground129.jpg?1541259754960", 225, "Dragonborn badge", "Unknown", undefined, 0],
410 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground130.png?1541259841365", 225, "Metro survivor badge", "Unknown", undefined, 0],
411 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground131.png?1541260761215", 725, "Fight between lords", "Unknown", undefined, 0],
412 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground132.jpg?1541268325643", 775, "Contaminated", "Unknown", undefined, 0],
413 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground133.png?1541274217777", 875, "The witcher", "Unknown", undefined, 0],
414 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground134.png?1541274466250", 875, "Sacred place", "Dragon Age Inquisition", undefined, 0],
415 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground135.png?1541279158138", 725, "Collapsed underground", "Unknown", undefined, 0],
416 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground136.png?1541279163436", 825, "The end", "Unknown", undefined, 0],
417 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground137.png?1541279940853", 450, "Psycho", "Unknown", undefined, 0],
418 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground138.png?1541328912882", 850, "Hight tech security", "PAYDAY The Heist", undefined, 0],
419 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground139.png?1541328918999", 850, "Street run", "PAYDAY The Heist", undefined, 0],
420 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground140.png?1541336274881", 525, "Minecraft mill", "Bersekr21", `266579411162103808`, 0],
421 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground141.jpg?1541336309752", 775, "Village defense", "The Elder Scrolls Legends", undefined, 0],
422 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground142.jpg?1541336335410", 725, "The high king", "Unknown", undefined, 0],
423 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground143.jpg?1541336560436", 825, "Frost", "Unknown", undefined, 0],
424 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground144.jpg?1541336878452", 850, "Wolf pack", "Unknown", undefined, 0],
425 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground145.png?1541337473161", 825, "The walking survivors", "Overkill's The Walking Dead", undefined, 0],
426 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground146.png?1541338501230", 775, "Stone age hunter", "Unknown", undefined, 0],
427 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground147.png?1541338504448", 475, "Stone cold", "Battlefield 3", undefined, 0],
428 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground148.jpg?1541522367987", 825, "Damned", "Unknown", undefined, 0],
429 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground149.jpg?1541522466281", 825, "Primal hunter", "Far Cry Primal", undefined, 0],
430 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground150.jpg?1541522585002", 750, "Express", "Unknown", undefined, 0],
431 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground151.png?1543134979962", 525, "The Kekistan army", "Unknown", undefined, 0],
432 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground152.png?1543134982640", 675, "Bandit standoff", "Unknown", undefined, 0],
433 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground153.png?1543135038818", 775, "Modern warfare", "Call of Duty Modern Warfare", undefined, 0],
434 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground154.jpg?1543135041735", 400, "Some ninja idk", "Unknown", undefined, 0],
435 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground155.png?1543135044488", 675, "Sliding the mountain", "Unknown", undefined, 0],
436 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground156.png?1543173013894", 775, "Captain Price", "Unknown", undefined, 0],
437 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground157.jpg?1544049162186", 700, "Miraak the dragonborn", "The Elder Scrolls 5 Skyrim", undefined, 0],
438 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground158.png?1543854878909", 875, "Living together", "Don't Starve Together", undefined, 0],
439 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground159.png?1543854878765", 750, "One man's land", "Unknown", undefined, 0],
440 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground160.png?1543940936704", 875, "Metro ruins", "Metro Last Light", undefined, 0],
441 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground161.png?1543940992259", 825, "Wumpus' homeland", "Discord", undefined, 0],
442 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground162.png?1544301727115", 750, "Deployment", "Counter Strike Global Offensive", undefined, 0],
443 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground163.png?1544592035867", 900, "Orbit", "Unknown", undefined, 0],
444 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground164.png?1545024402425", 775, "Kovac's community", "How to Survive 2", undefined, 0],
445 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground165.png?1545166008425", 875, "Proper burial", "Kingdom Come Deliverance", undefined, 0],
446 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground166.jpg?1545421965715", 775, "The Slayer", "Goblin Slayer", undefined, 0],
447 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground167.png?1545631212316", 825, "Home killer", "Resident Evil 7", undefined, 0],
448 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground168.png?1545638575351", 250, "Weird cat", "Unknown", undefined, 0],
449 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground169.png?1545779120615", 925, "White masks", "Rainbow Six Siege", undefined, 0],
450 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground170.png?1545823111874", 875, "This is a robbery!", "Grand Theft Auto Online", undefined, 0],
451 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground171.png?1546128297923", 850, "This war of theirs", "This War of Mine", undefined, 0],
452 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground172.png?1546253733572", 900, "Breaking the deal", "Mafia 2", undefined, 0],
453 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground173.png?1546253734432", 850, "Safehouse", "PAYDAY 2", undefined, 0],
454 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground174.png?1546253736286", 750, "Project Origin", "Fear 2", undefined, 0],
455 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground175.jpeg?1546258339431", 725, "Mars colonation", "Unknown", undefined, 0],
456 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground176.png?1546540411645", 750, "The contract", "A Hat in Time", undefined, 0],
457 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground177.png?1546617365441", 900, "Emily the empress", "Dishonored 2", undefined, 0],
458 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground178.png?1546640352552", 850, "Castle far away", "Dragon Age Inquisition", undefined, 0],
459 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground179.jpg?1546640356081", 625, "After the batte", "Unknown", undefined, 0],
460 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground180.png?1546901086923", 675, "Standing", "Unknown", undefined, 0],
461 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground181.png?1546901088480", 900, "Roof fights", "Dishonored 2", undefined, 0],
462 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground182.jpg?1547152599803", 925, "Robot guards", "Dishonored 2", undefined, 0],
463 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground183.jpg?1547555333469", 800, "Connected", "Dragon Age 4", undefined, 0],
464 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground184.png?1547809508673", 200, "Snens", "Unknown", undefined, 0],
465 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground185.jpg?1547809510214", 350, "Queres puppers", "Unknown", undefined, 0],
466 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground186.jpg?1548191942331", 725, "Zombie virus", "Unknown", undefined, 0],
467 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground187.png?1548198438043", 325, "Prism pattern", "Unknown", undefined, 0],
468 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground188.png?1548440856335", 625, "Gamers arise!", "TheVoiceOverPete", undefined, 0],
469 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground189.png?1548787581218", 650, "End stronghold", "Jeracraft", undefined, 0],
470 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground190.png?1548787620678", 725, "The hat", "Telltale's The Walking Dead", undefined, 0],
471 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground191.png?1549491879583", 375, "Retribution", "SpectreGames", `339381937279860736`, 0],
472 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground192.png?1550519837303", 775, "Sunset view", "Grand Theft Auto 5", undefined, 0],
473 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground193.png?1550954101975", 475, "OwOcnic", "SickWheeny Nick", `298551254978789378`, 0],
474 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground194.png?1551123539987", 725, "Daze", "Unknown", undefined, 0],
475 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground195.jpg?1551209003330", 275, "Real view", "vojtěch Jílovec", `108899856889737216`, 0],
476 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground196.png?1551481112722", 800, "Revolution", "Homefront Revolution", undefined, 0],
477 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground197.png?1551517314470", 875, "Doomsday", "Grand Theft Auto Online", undefined, 0],
478 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground198.png?1551896626588", 675, "Redline", "Unknown", undefined, 0],
479 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground199.png?1551896628681", 900, "Hallway", "Resident Evil 2", undefined, 0],
480 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground200.png?1551896635268", 525, "Underground palace", "Undertale", undefined, 0],
481 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground201.png?1552129507121", 650, "Dirt", "Unknown", undefined, 0],
482 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground202.png?1552129513754", 875, "Freedome", "Grand Theft Auto Online", undefined, 0],
483 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground203.png?1552129515227", 825, "This is it Chief", "Unknown", undefined, 0],
484 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground204.png?1552129516913", 800, "Boy", "God of War", undefined, 0],
485 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground205.png?1552138972456", 225, "PEEKY's old pals", "Vojtěch Jílovec", `108899856889737216`, 0],
486 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground206.png?1552138978087", 175, "XXL Plushies", "Vojtěch Jílovec", `108899856889737216`, 0],
487 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground207.png?1552151256169", 925, "Jackpot!", "Devil May Cry 5", undefined, 0],
488 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground208.png?1552233925577", 100, "Pixelvince", "Pixelvince", `354617102394720266`, 0],
489 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground209.png?1552752810447", 275, "FeelsGoodMom", "Vojtěch Jílovec", `108899856889737216`, 0],
490 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground210.png?1552809489475", 675, "Airsoft", "Unknown", undefined, 0],
491 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground211.png?1552809489603", 575, "Orange pattern", "Unknown", undefined, 0],
492 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground212.png?1552809503603", 850, "In the battlefield", "Battlefield 1", undefined, 0],
493 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground213.png?1552809504469", 525, "Tom & Jerry's claims", "Unknown", undefined, 0],
494 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground214.png?1552941923769", 725, "Adored knight", "Unknown", undefined, 0],
495 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground215.png?1552941932967", 375, "Redditor", "Unknown", undefined, 0],
496 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground216.jpg?1552969694470", 750, "Que sera, sera", "Mary and Max", undefined, 0],
497 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground217.png?1553336264273", 475, "Odd fella", "TheOdd1sOut", undefined, 0],
498 ["https://cdn.glitch.com/64aa05ba-d02f-4949-a4e2-d166873c672a%2Fbackground218.png?1553436376818", 725, "At the club", "Unknown", undefined, 0],
499 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground219.png?1553623065418", 700, "Robotics", "Unknown", undefined, 0],
500 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground220.png?1554321575443", 875, "The savior psycho", "Borderlands 3", undefined, 0],
501 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground221.png?1554546451654", 775, "The vault hunters", "Borderlands 3", undefined, 0],
502 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground222.png?1554546456700", 825, "Firestorm", "Battlefield 1", undefined, 0],
503 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground223.png?1554546446408", 925, "Sleeping shadows", "Unknown", undefined, 0],
504 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground224.png?1555012380297", 1000, "Zer0", "Borderlands 2", undefined, 0],
505 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground225.png?1555147436467", 875, "Dude's caravan", "Unknown", undefined, 0],
506 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground226.png?1555147437707", 425, "Blamed skeleton", "Unknown", undefined, 0],
507 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground227.png?1555147440060", 375, "Stronghold raid", "AMC's The Walking Dead", undefined, 0],
508 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground228.png?1555231021661", 525, "Welcome to Vietnam", "Rising Storm 2 Vietnam", undefined, 0],
509 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground229.png?1555231025303", 800, "Devil trigger", "Devil May Cry 5", undefined, 0],
510 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground230.png?1555231029488", 350, "Villager camp", "Plobster", `268826232806703106`, 0],
511 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground231.png?v=1576750038989", 425, "Arctic wolf", "Bersekr21", `266579411162103808`, 1576750024044],
512 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground232.png?1555690405127", 575, "Contagion", "Contagion", undefined, 0],
513 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground233.png?1555690407657", 825, "Notre Dame", "Assassins Creed Unity", undefined, 0],
514 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground234.png?1555758393410", 350, "Phantoms", "Phantom Forces", undefined, 0],
515 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground235.png?1555788520771", 425, "No Thanks, Incels", "Unknown", undefined, 0],
516 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground236.jpg?1555788525534", 650, "Crazy Doggo", "Lola Woudenberg", undefined, 0],
517 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground237.jpg?1555788526781", 575, "Isle Of Dogs", "Wes Anderson", undefined, 0],
518 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground238.png?1555788529003", 350, "Ghosts", "Phantom Forces", undefined, 0],
519 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground239.png?1555881581795", 525, "Pillar chad Richard", "Dan Man Jenkins", undefined, 0],
520 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground240.png?1555881583428", 675, "Galaxy boy", "Unknown", undefined, 0],
521 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground241.png?1556138322772", 675, "Staredown", "E.Y.E.: Divine Cybermancy", undefined, 0],
522 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground242.png?1556142651459", 750, "Dead end", "SAS Zombie Assault 3", undefined, 0],
523 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground243.png?1556379776934", 825, "Fires fade", "Dark Souls", undefined, 0],
524 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground244.jpg?1556379779436", 350, "The Bay city", "Altered Carbon", undefined, 0],
525 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground245.png?1556379786683", 475, "Airport security", "SAS Zombie Assault 3", undefined, 0],
526 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground246.png?1556379788689", 875, "New wave", "The Division", undefined, 0],
527 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground247.png?1557333122021", 725, "Dragonhearted", "Captainsparklez", undefined, 0],
528 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground248.png?1558020522402", 800, "Blocky team", "Minecraft", undefined, 0],
529 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground249.png?1558020557790", 675, "Amigos", "Unknown", undefined, 0],
530 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground250.png?1558020564397", 800, "Saloon", "Red Dead Redemption 1", undefined, 0],
531 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground251.png?1558020569519", 725, "Frost mage", "Unknown", undefined, 0],
532 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground252.png?1558020571967", 675, "Last stand", "Unknown", undefined, 0],
533 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground253.png?1558020744639", 725, "Skull trooper", "Unknown", undefined, 0],
534 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground254.png?1558020748286", 625, "The fire dude", "League of Legends", undefined, 0],
535 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground255.png?1558174296475", 375, "Storm Walk", "Ryan Shirley", undefined, 0],
536 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground256.png?1558038095405", 750, "Evolved", "Evolve", undefined, 0],
537 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground257.png?1558038099146", 675, "Stormy night", "Unknown", undefined, 0],
538 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground258.png?1558038101105", 725, "Dahaka", "Prince of Persia", undefined, 0],
539 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground259.png?1558038103055", 825, "Floor full of killers", "Killing Floor 2", undefined, 0],
540 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground260.png?1558038106758", 700, "Revolution", "We. The Revolution", undefined, 0],
541 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground261.png?1558103378145", 725, "Post delivery", "A Hat in Time", undefined, 0],
542 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground262.png?1558103379729", 675, "Ashen", "Ashen", undefined, 0],
543 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground263.png?1558103382341", 525, "Roll out!", "Unknown", undefined, 0],
544 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground264.png?1558103383792", 725, "The Ghost", "Call of Duty Ghosts", undefined, 0],
545 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground265.jpg?1558783572490", 200, "Gun Kid", "Unknown", undefined, 0],
546 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground266.jpg?1558783583054", 575, "Sleeping King", "Shrek", undefined, 0],
547 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground267.png?1558783596081", 425, "Gaming Pattern", "Discord", undefined, 0],
548 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground268.png?1558783610734", 375, "Afterthoughts", "Discord", undefined, 0],
549 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground269.png?1558783624153", 525, "Tales of the Borderlands", "Tales from the Borderlands", undefined, 0],
550 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground270.png?1558783636471", 725, "Deep in the Shadows", "Unknown", undefined, 0],
551 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground271.png?1558783647904", 375, "Stupid little prick named Rick", "AMC's The Walking Dead", undefined, 0],
552 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground272.png?1558783659166", 675, "Fallen kingdom", "Unknown", undefined, 0],
553 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground273.png?1558783669451", 825, "Why?", "Just Cause", undefined, 0],
554 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground274.png?1558783679870", 725, "Toy gang", "To Story 4", undefined, 0],
555 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground275.png?1558783691312", 775, "Mad lad", "Mad Max", undefined, 0],
556 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground276.png?1558783702786", 925, "Abyss", "Unknown", undefined, 0],
557 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground277.png?1558783726173", 525, "Nowadays Rick", "Rick Astley", undefined, 0],
558 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground278.png?1558783748699", 775, "Active chaos", "Battlefield Hardline", undefined, 0],
559 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground279.png?1558783759802", 375, "Abstract pattern", "Unknown", undefined, 0],
560 ["https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fbackground280.png?1558783770529", 475, "Spirit tower", "Unknown", undefined, 0],
561 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground281.png?1558874631584", 875, "Isaac's nightmare", "Unknown", undefined, 0],
562 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground282.png?1558874666863", 425, "Spiritual butterflies", "Judith Haddad", undefined, 0],
563 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground283.png?1558877694122", 1000000, "Golden", "Unknown", undefined, 0],
564 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground284.png?1558874673658", 825, "War with zombies", "World War Z", undefined, 0],
565 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground285.png?1558888970896", 425, "Morning", "Unknown", undefined, 0],
566 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground286.png?1558888974600", 575, "Zoink", "Unknown", undefined, 0],
567 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground287.png?1558888976922", 750, "Paladin", "Unknown", undefined, 0],
568 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground288.png?1558986681527", 475, "Factory", "Unknown", undefined, 0],
569 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground289.png?1558986683278", 725, "Firewatch tower", "Firewatch", undefined, 0],
570 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground290.png?1558986687005", 775, "On the edge", "Tomb Raider", undefined, 0],
571 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground291.png?1558986689511", 400, "Flower field", "Unknown", undefined, 0],
572 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground292.png?1558986693656", 625, "Distant island", "Unknown", undefined, 0],
573 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground293.png?1558987597972", 50, "Pink red", "No one", undefined, 0],
574 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground294.png?1558987600482", 50, "Dye blue", "No one", undefined, 0],
575 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground295.png?1558987601832", 50, "Colorblind orange", "No one", undefined, 0],
576 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground296.png?1559103056756", 925, "Robotic warfare", "Sarahhamyied", undefined, 0],
577 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground297.png?1559189577583", 275, "Ahhhhh", "Five nights at Freddy's", undefined, 0],
578 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground298.png?1559231851015", 775, "The other elves", "Forgotten Realms", undefined, 0],
579 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground299.png?1559231854665", 675, "Victarion's charge", "A Song of Ice and Fire", undefined, 0],
580 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground300.png?1559237158322", 425, "Space gamer", "Vojtěch Jílovec", `108899856889737216`, 0],
581 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground301.png?1559234593103", 825, "Batman", "Batman: Arkham Knight", undefined, 0],
582 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground302.png?1559234599790", 800, "Atom apocalypse", "Atom", undefined, 0],
583 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground303.png?1559234617296", 850, "Wondering bear", "Samorost 3", undefined, 0],
584 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground304.png?1559234625544", 700, "Hidden peace", "Indivisible", undefined, 0],
585 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground305.png?1559274593485", 50, "Blurple", "No one", undefined, 0],
586 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground306.png?1559274595817", 375, "Wall of flesh", "Doom", undefined, 0],
587 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground307.png?1559274597356", 675, "Wearing gold", "PAYDAY 2", undefined, 0],
588 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground308.png?1559274598337", 725, "Modernized", "Call of Duty Modern Warfare", undefined, 0],
589 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground309.png?1559312632224", 775, "Intermission", "Prey", undefined, 0],
590 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground310.png?1559312635724", 750, "Street fight", "Battlefield 3", undefined, 0],
591 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground311.png?1559326557864", 725, "Just joking", "Unknown", undefined, 0],
592 ["https://cdn.glitch.com/46947ddd-36b7-479e-8616-87eb256d5e93%2Fbackground312.jpg?1559331433267", 725, "Oiled Down", "Unknown", undefined, 0],
593 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground313.png" , 775, "Lara Croft", "Shadow of the Tomb Raider", undefined, 0],
594 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground314.png" , 825, "Servant", "Dark Souls 2", undefined, 0],
595 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground315.png" , 425, "Bean Gansta", "Killer Bean Animation", undefined, 0],
596 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground316.png?v=1559999276673", 625, "Deer sighting", "Luboš Houska", undefined, 0],
597 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground317.png?v=1559999302765", 450, "This... is... Minecraft!", "Unknown", undefined, 0],
598 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground318.png?v=1559999314369", 775, "Futuristic police", "Detroit Cecome Human", undefined, 0],
599 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground319.png?v=1559999328518", 675, "Impacted", "Vojtěch Jílovec", `108899856889737216`, 0],
600 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground320.png?v=1560087604377", 825, "Consumption", "Black Mirror", undefined, 0],
601 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground321.png?v=1560087605507", 850, "Going dark", "Call of Duty Modern Warfare", undefined, 0],
602 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground322.png?v=1560087608782", 800, "Extraction", "The Division", undefined, 0],
603 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground323.png?v=1560087610295", 525, "The rune", "Deltarune", undefined, 0],
604 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground324.png?v=1560087614558", 775, "Jungle crysis", "Crysis", undefined, 0],
605 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground325.png?v=1560280962628", 125, "Skin from Fortnite", "Jameskii", undefined, 0],
606 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground326.jpg?v=1560281017823", 100, "Grass", "WHASonYT", `339177677326123018`, 0],
607 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground327.png?v=1560283107053", 825 , "Camp liberation", "Kingdom Come Deliverance", undefined, 0],
608 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground328.png?v=1560283108264", 775, "Commander Lilith", "Borderlands 2", undefined, 0],
609 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground329.png?v=1560716844287", 400 , "Pet fox", "Vojtěch Jílovec", `108899856889737216`, 0],
610 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground330.png?v=1560703323947", 775, "Nuke", "Counter Strike Global Offensive", undefined, 0],
611 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground331.png?v=1560768909337", 250, "Creeper Buddy", "Unknown", undefined, 0],
612 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground332.png?v=1560768910957", 775, "Flare Abyss", "The Division", undefined, 0],
613 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground333.png?v=1560777175191", Exclusive, "Happy year", "Vojtěch Jílovec", undefined, 0],
614 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground334.png?v=1560779898774", 725, "Hype beast", "Counter Strike Global Offensive ", undefined, 0],
615 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground335.png?v=1560779904859", 675, "Roblox gang", "ROBLOX", undefined, 0],
616 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground336.png?v=1560779909615", 525, "Sanctuary leader", "Joji", undefined, 0],
617 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground337.png?v=1560779912403", 675, "Raven buds", "Unknown", undefined, 0],
618 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground338.png?v=1560964929302", 875, "Hold Tight", "World War Z", undefined, 0],
619 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground339.png?v=1560964938885", 500, "Knight's Camp", "Shovel Knight", undefined, 0],
620 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground340.jpg?v=1560964940754", 750, "The Legion", "Watchdogs 3 Legion", undefined, 0],
621 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground341.png?v=1563911692560", 325, "Green Shapes", "Gerd Altmann", undefined, 0],
622 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground342.png?v=1563911684073", 575, "Aw man", "CaptainSparklez", undefined, 0],
623 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground343.png?v=1563911683620", 825, "Surrounded", "Alien Isolation", undefined, 0],
624 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground344.png?v=1563911687667", 850, "High-Tech", "Call of Duty Modern Warfare", undefined, 0],
625 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground345.png?v=1563911688280", 825, "Midnight breakfast", "Vampyr", undefined, 0],
626 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground346.png?v=1563911687954", 575, "Joseph Joestar", "JoJo's Bizarre Adventures Battle Tendency", undefined, 0],
627 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground347.jpg?v=1563911682560", 650, "Village trade", "Minecraft", undefined, 0],
628 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground348.png?v=1563922180572", 925, "Water Sheep's memorial", "u/neytirixx", undefined, 0],
629 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground349.jpg?v=1563911682933", 825, "Bird's cage", "Resident Evil 7", undefined, 0],
630 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground350.png?v=1563922201014", 675, "The beach", "Unknown", undefined, 0],
631 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground351.jpg?v=1563911683311", 775, "The plan of attack", "Unknown", undefined, 0],
632 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground352.png?v=1563930075225", 950, "Washington survivors", "The Division 2", undefined, 0],
633 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground353.png?v=1563930630325", 625, "Roots of a tragedy", "Jojo's Bizarre Adventures Phantom Blood", undefined, 0],
634 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground354.png?v=1563930629902", 550, "Farm club", "Stardew Valley", undefined, 0],
635 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground355.png?v=1563930633397", 675, "Cthulhu", "Andrée Wallin", undefined, 0],
636 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground356.png?v=1563931884386", 399, "PewDiePie's pattern", "PewDiePie", undefined, 0],
637 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground357.jpg?v=1563931889909", 625, "Neon ride", "u/mattystoe", undefined, 0],
638 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground358.png?v=1563931895048", 725, "Robot", "The Surge 2", undefined, 0],
639 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground359.png?v=1563964603301", 850, "Gunfight", "Call of Duty Modern Warfare", undefined, 0],
640 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground360.png?v=1563964903981", 900, "Dragon's return", "The Elder Scrolls Online", undefined, 0],
641 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground361.png?v=1563964756492", 875, "The prophecy", "The Elder Scrolls Online", undefined, 0],
642 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground362.png?v=1563970489879", 725, "Dragon rider", "Unknown", undefined, 0],
643 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground363.png?v=1563983696291", 775, "The inferno", "Endless Legend", undefined, 0],
644 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground364.png?v=1564017185333", 125, "Office night", "Five Nights at Freddy's", undefined, 0],
645 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground365.png?v=1564058813872", 675, "Joergen's rollercoaster", "u/neytirixx", undefined, 0],
646 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground366.png?v=1564058885585", 750, "Dangerous hunt", "Monster Hunters World", undefined, 0],
647 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground367.png?v=1564068410313", 675, "Pillar men", "Jojo's Bizarre Adventure Battle Tendency", undefined, 0],
648 ["https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fbackground368.png?v=1564068462711", 475, "Canary", "Unknown", undefined, 0],
649 ["https://cdn.glitch.com/bb3aad24-5d49-4fdf-ba07-725b7b1750e9%2Fbackground369.png?v=1564222331497", 550, "Dead men", "Kane and Lynch Dead Men", undefined, 0],
650 ["https://cdn.glitch.com/bb3aad24-5d49-4fdf-ba07-725b7b1750e9%2Fbackground370.png?v=1564225161116", 675, "Journey", "u/BeastScrollGames", undefined, 0],
651 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground371.png?v=1564261114754", 850, "Campfire tales", "Unknown", undefined, 0],
652 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground372.jpg?v=1564261330942", 725, "Orcs vs. humans", "Unknown", undefined, 0],
653 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground373.jpg?v=1564261391413", 675, "The fire sorcerer", "Unknown", undefined, 0],
654 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground374.jpg?v=1564346562475", 525, "Startdust battle", "Jojo's Bizarre Adventures Stardust Crusaders", undefined, 0],
655 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground375.jpg?v=1564395161731", 575, "Deadra warrior", "The Elder Scrolls V Skyrim", undefined, 0],
656 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground376.jpg?v=1564395226382", 475, "Kunětická hora", "Bersekr21", `266579411162103808`, 0],
657 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground377.jpg?v=1564395286909", 625, "Bunny rabbit", "Unknown", undefined, 0],
658 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground378.jpg?v=1564447926358", 825, "New contract", "Hitman 2", undefined, 0],
659 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground379.jpg?v=1564447989239", 225, "Horse friend", "Unknown", undefined, 0],
660 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground380.jpg?v=1564448048338", 775, "Japaneese terrace", "Unknown", undefined, 0],
661 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground381.png?v=1564448236674", 325, "Desolate park", "Zach Soza", undefined, 0],
662 ["https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fbackground382.jpg?v=1564448921669", 275, "Playful dogs", "Unknown", undefined, 0],
663 ["https://cdn.glitch.com/b3d0aad8-d8f7-425f-8098-d1660ab6a43d%2Fbackground383.png?v=1565240397152", 875, "Dedicated", "Call of Duty Modern Warfare", undefined, 0],
664 ["https://cdn.glitch.com/b3d0aad8-d8f7-425f-8098-d1660ab6a43d%2Fbackground384.png?v=1565616356300", 850, "Breaking point", "Ghost Recon Breakpoint", undefined, 0],
665 ["https://cdn.glitch.com/b3d0aad8-d8f7-425f-8098-d1660ab6a43d%2Fbackground385.png?v=1565616359450", 675, "Conflict", "Total War", undefined, 0],
666 ["https://cdn.glitch.com/b3d0aad8-d8f7-425f-8098-d1660ab6a43d%2Fbackground386.png?v=1565616365518", 725, "Interrogation", "Ghost Recon Wildlands", undefined, 0],
667 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground387.png?v=1565961253024", 525, "Father's pose", "JoJo's Bizarre Adventure Golden Wind", undefined, 0],
668 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground388.png?v=1565715181405", 750, "Beyond", "No Man's Sky", undefined, 0],
669 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground389.png?v=1565715183258", 475, "Steve hunt", "RobenSikk", undefined, 0],
670 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground390.png?v=1565715470915", 875, "Right ahead", "Call of Duty Modern Warfare", undefined, 0],
671 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground391.png?v=1565715547975", 350, "Samurai", "u/vrtman", undefined, 0],
672 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground392.png?v=1565715555358", 825, "Annoying villains", "Borderlands 3", undefined, 0],
673 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground393.png?v=1565715558429", 850, "Seeking", "GreedFall", undefined, 0],
674 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground394.jpg?v=1565715561043", 775, "Elven kingdom", "Unknown", undefined, 0],
675 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground395.png?v=1565715568265", 800, "Three kingdoms", "Total War", undefined, 0],
676 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground396.png?v=1565844170105", 875, "Midnight", "u/SnookyZun", undefined, 0],
677 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground397.png?v=1565844176033", 775, "Turtle friend", "Jojo's Bizarre Adventures Golden Wind", undefined, 0],
678 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground398.jpg?v=1565844185444", 825, "Penguin trip", "Unknown", undefined, 0],
679 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground399.png?v=1565844196700", 750, "Quail", "Unknown", undefined, 0],
680 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground400.png?v=1565844199887", 650, "Tiger", "Jack Merlin", undefined, 0],
681 ["https://cdn.glitch.com/25a353a8-b52c-4952-b9ff-833fcdaee8f2%2Fbackground401.png?v=1565953633386", 725, "Monster of the east", "Fallout New Vegas", undefined, 0],
682 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground402.png?v=1566128627988", 850, "Los thanos", "Harry Osborn", undefined, 0],
683 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground403.png?v=1566128632167", 775, "To the rescue", "Ghost Recond Breakpoint", undefined, 0],
684 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground404.png?v=1566128626627", 575, "Torture dance", "u/Arbitrarium_", undefined, 0],
685 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground405.png?v=1567050251316", 925, "Left hanging", "Dead by Daylight", undefined, 0],
686 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground406.png?v=1576425633251", 475, "Cubic Tanks", "Battle Zone", undefined, 0],
687 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground407.png?v=1576425698741", 275, "Diavolo", "Jojo's Bizarre Adventures Golden Wind", undefined, 0],
688 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground408.png?v=1567938199867", 875, "Ice breaker", "u/neytirixx", undefined, 0],
689 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground409.png?v=1568824760554", 825, "Copper sööp", "Unknown", undefined, 0],
690 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground410.png?v=1568913126645", 450, "Link's awakening", "The Legend of Zelda Link's Awakening", undefined, 0],
691 ["https://cdn.glitch.com/42356302-206d-447f-8c79-4ee43df1a258%2Fbackground411.png?v=1569261662317", 250, "Pudla", "Vlaďka Lišková", `583902709745188875`, 0],
692 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground412.png?v=1572542839518", 775, "Storming", "Battlefield 4", undefined, 0],
693 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground413.png?v=1569744679704", 625, "Passione", "JoJo's Bizarre Adventures", undefined, 0],
694 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground414.png?v=1569780678572", 250, "Stříbro", "Vlaďka Lišková", `583902709745188875`, 0],
695 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground415.png?v=1569829711380", 575, "Flayed", "Stranger Things", undefined, 0],
696 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground416.png?v=1573313860160", 825, "Beyond hell", "Nioh", undefined, 0],
697 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground417.png?v=1573313897257", 925, "Sleeping river", "GreedFall", undefined, 0],
698 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground418.png?v=1573313898157", 925, "Awakening", "Project Awakening Arise", undefined, 0],
699 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground419.png?v=1573313903056", 825, "Spider-man", "Sony Pictures", undefined, 0],
700 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground420.png?v=1573313975804", 625, "Sleeping streamer", "Alexandrev Perstev", undefined, 0],
701 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground421.png?v=1573891420218", 550, "Emoji saviour", "twlefth", undefined, 0],
702 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground422.png?v=1575141704791", 825, "Giorno's piano", "u/Rockman17", undefined, 0],
703 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground423.png?v=1575141706988", 875, "Norbinbad", "Lord of the Rings War in the North", undefined, 0],
704 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground424.png?v=1575141708491", 675, "Mouse's flower", "Unknown", undefined, 0],
705 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground425.png?v=1575345556036", 825, "Chaotic home", "PewDiePie's Tuber Simulaor", undefined, 1575345511274],
706 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground426.png?v=1575345938913", 850, "Deer hunt", "Red Dead Redemption 2", undefined, 1575345944280],
707 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground427.png?v=1575345939547", 950, "International squad", "Call of Duty Modern Warfare", undefined, 1575345952003] ,
708 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground428.png?v=1575716944152", 750, "The Cyrodill fields", "Unknown", undefined, 1575716942140],
709 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground429.png?v=1575795807391", 825, "Mount Doom", "Unknown", undefined, 1575795807985],
710 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground430.png?v=1575908013402", 875, "The nazgul", "Uknown", undefined, 1575908014014],
711 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground431.png?v=1575908009200", 725, "Rivindell", "Unknown", undefined, 1575908017191],
712 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground432.png?v=1575908019408", 675, "Fall of noldor", "Unknown", undefined, 1575908012308],
713 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground433.png?v=1575908033170", 575, "Compound defense", "Wasteland 3", undefined, 1575908028110],
714 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground434.png?v=1575981245557", 750, "Quindecim", "仙田", undefined, 1575981269516],
715 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground435.png?v=1576139263681", 950, "Jill", "Resident Evil 3 Remake", undefined, 1576139256904],
716 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground436.png?v=1576143916348", 925, "Agent's mood", "u/bobemil", undefined, 1576143910590],
717 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground437.png?v=1576163566667", Exclusive, "Christmas mood", "Vojtěch Jílovec", undefined, 1576163667563],
718 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground438.png?v=1576227042690", 825, "Spartans", "Halo Reach", undefined, 1576227058363],
719 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground439.png?v=1576227115180", 775, "Flu survivors", "Left 4 Dead 2", undefined, 1576227050372],
720 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground440.png?v=1577453807639", 875, "Iceborn", "Monster Hunter World", undefined, 1577453675228],
721 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground441.png?v=1577453753300", 950, "Plantera", "Bohrokki", undefined, 1577453676896],
722 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground442.png?v=1577453764354", 925, "Destroyer", "Bohrokki", undefined, 1577453678226],
723 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground443.png?v=1577453903759", 850, "Ride 'round", "Final Fantasy XV", undefined, 1577453680481],
724 ["https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fbackground444.png?v=1577453768498", 675, "Park", "Unknown", undefined, 1577453682331]
725
726];
727
728const DefaultDescriptions = [
729
730 "I'm very busy and important.",
731 "I sip water quite slowly.",
732 "Battery low, I'm scared.",
733 "I have a car for each day of the month.",
734 "I make up a dream in my head before I go to bed.",
735 "My life is a green screen.",
736 "I don't believe in showers.",
737 "Certified troublemaker.",
738 "I'm a Bacon Guru.",
739 "Smarter than a 5th grader.",
740 "I took an arrow to the knee.",
741 "Pikachu chooses me.",
742 "I'm real, I hope my followers are too.",
743 "I have invincible minions.",
744 "Is this water dry?",
745 "I yell at inanimate objects.",
746 "I sneak drinks into movie theatres.",
747 "I hide my sweat well.",
748 "I unleashed the zombie apocalypse.",
749 "I'm a very mysterious person.",
750 "I am so funny.",
751 "I slapped a chicken once.",
752 "I don't know what alt-tab does.",
753 "Hitting things to make them work.",
754 "I put fries into my straw.",
755 "I walk faster when I see a creepy van.",
756 "More than meets the eye.",
757 "I draw on fogged up windows.",
758 "Born at a very young age.",
759 "Is this a JoJo reference?",
760 "I did not set this description, I think."
761
762];
763
764const RandomAvatars = [
765
766 "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fpeeky_icon_1.png?v=1560717936708",
767 "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fpeeky_icon_2.png?v=1560717937510",
768 "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fpeeky_icon_3.png?v=1560717937123"
769
770];
771
772const RandomSongs = [
773
774 "https://www.youtube.com/watch?v=tklQ47Hpfxw",
775 "https://www.youtube.com/watch?v=N6hF3EaICxk",
776 "https://www.youtube.com/watch?v=NU3aCNQAqwc",
777 "https://www.youtube.com/watch?v=K3Qzzggn--s",
778 "https://www.youtube.com/watch?v=PEBS2jbZce4",
779 "https://www.youtube.com/watch?v=8Vlej7QUGGE",
780 "https://www.youtube.com/watch?v=k92Bgqz-p_8",
781 "https://www.youtube.com/watch?v=R_N15egKj6c",
782 "https://www.youtube.com/watch?v=-WpnPSChVRQ",
783 "https://www.youtube.com/watch?v=ktvTqknDobU",
784 "https://www.youtube.com/watch?v=pXRviuL6vMY",
785 "https://www.youtube.com/watch?v=UprcpdwuwCg",
786 "https://www.youtube.com/watch?v=L3wKzyIN1yk",
787 "https://www.youtube.com/watch?v=PHgc8Q6qTjc",
788 "https://www.youtube.com/watch?v=I-sH53vXP2A",
789 "https://www.youtube.com/watch?v=FTQbiNvZqaY",
790 "https://www.youtube.com/watch?v=1vrEljMfXYo",
791 "https://www.youtube.com/watch?v=V5XOwWOAQBQ",
792 "https://www.youtube.com/watch?v=bl0e5DrYLyY",
793 "https://www.youtube.com/watch?v=jjjaU5kQV8k",
794 "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
795 "https://www.youtube.com/watch?v=P5QbkjnCvl4",
796 "https://www.youtube.com/watch?v=i7fnlJ60RO8",
797 "https://www.youtube.com/watch?v=oY9m2sHQwLs",
798 "https://www.youtube.com/watch?v=eVTXPUF4Oz4",
799 "https://www.youtube.com/watch?v=fPO76Jlnz6c",
800 "https://www.youtube.com/watch?v=PVjiKRfKpPI",
801 "https://www.youtube.com/watch?v=DKL4X0PZz7M",
802 "https://www.youtube.com/watch?v=gUcisIlT7sM",
803 "https://www.youtube.com/watch?v=ytWz0qVvBZ0",
804 "https://www.youtube.com/watch?v=G_Nl5xDNXIs",
805 "https://www.youtube.com/watch?v=t_q1SDzeCqo",
806 "https://www.youtube.com/watch?v=hbrpmQ09juQ",
807 "https://www.youtube.com/watch?v=YWN81V7ojOE",
808 "https://www.youtube.com/watch?v=pcSLtIYLbLQ",
809 "https://www.youtube.com/watch?v=6okxuiiHx2w",
810 "https://www.youtube.com/watch?v=NqpnbSFprB4",
811 "https://www.youtube.com/watch?v=hWfbUTwzzZA",
812 "https://www.youtube.com/watch?v=BGkRUYjflbY",
813 "https://www.youtube.com/watch?v=WTJSt4wP2ME",
814 "https://www.youtube.com/watch?v=al1BNB8bKaE",
815 "https://www.youtube.com/watch?v=3vVSBLkpO-8",
816 "https://www.youtube.com/watch?v=vOXZkm9p_zY",
817 "https://www.youtube.com/watch?v=d5Ql4Sjo-GU",
818 "https://www.youtube.com/watch?v=zKFzKIa_pIM",
819 "https://www.youtube.com/watch?v=PoVgCOCt4KA",
820 "https://www.youtube.com/watch?v=Sk-U8ruIQyA",
821 "https://www.youtube.com/watch?v=y8a65a-B5Zw",
822 "https://www.youtube.com/watch?v=eFVj0Z6ahcI",
823 "https://www.youtube.com/watch?v=GO5utuvcZps",
824 "https://www.youtube.com/watch?v=JRfuAukYTKg",
825 "https://www.youtube.com/watch?v=16y1AkoZkmQ"
826
827];
828
829const GuessTheSong = [
830
831 ["https://www.youtube.com/watch?v=HRDp-Q_DsfE", "Bloody Stream", "Medium"],
832 ["https://www.youtube.com/watch?v=cPJUBQd-PNM", "Revenge", "Easy"],
833 ["https://www.youtube.com/watch?v=5-uWlFq380M", "Sanctuary", "Medium"],
834 ["https://www.youtube.com/watch?v=bpOSxM0rNPM", "Do I Wanna Know", "Medium"],
835 ["https://www.youtube.com/watch?v=2uRLJZxINAQ", "PEPE", "Hard"],
836 ["https://www.youtube.com/watch?v=aiSdTQ9DW9g", "Rasputin", "Easy"],
837 ["https://www.youtube.com/watch?v=6E5m_XtCX3c", "Ocean Man", "Easy"],
838 ["https://www.youtube.com/watch?v=3vVSBLkpO-8", "Baby I'm yours", "Hard"],
839 ["https://www.youtube.com/watch?v=rnO-MflYxCw", "Pumped Up Kicks", "Easy"],
840 ["https://www.youtube.com/watch?v=yGHBcpO-M0s", "Gotta Let Go", "Medium"],
841 ["https://www.youtube.com/watch?v=VMtarj8Ua0s", "Mr. Blue Sky", "Medium"],
842 ["https://www.youtube.com/watch?v=Gs069dndIYk", "September", "Medium"],
843 ["https://www.youtube.com/watch?v=pgN-vvVVxMA", "SAD!", "Easy"],
844 ["https://www.youtube.com/watch?v=kx0Z0B8Xox0", "Rodeo", "Easy"],
845 ["https://www.youtube.com/watch?v=DPVCNK74ZBI", "Hurt", "Medium"],
846 ["https://www.youtube.com/watch?v=52Gg9CqhbP8", "Let's Go", "Medium"],
847 ["https://www.youtube.com/watch?v=5ZYgIrqELFw", "All Star", "Easy"],
848 ["https://www.youtube.com/watch?v=7pzOBI3PD8E", "Sweater Weather", "Hard"],
849 ["https://www.youtube.com/watch?v=L3wKzyIN1yk", "Human", "Medium"],
850 ["https://www.youtube.com/watch?v=hWfbUTwzzZA", "Caramelldansen", "Hard"],
851 ["https://www.youtube.com/watch?v=oG7jKUHsLfY", "Last Train Home", "Hard"],
852 ["https://www.youtube.com/watch?v=XUhVCoTsBaM", "Awaken", "Medium"],
853 ["https://www.youtube.com/watch?v=DwPWGUhEtP0", "Roundabout", "Medium"],
854 ["https://www.youtube.com/watch?v=vOXZkm9p_zY", "Birds", "Medium"],
855 ["https://www.youtube.com/watch?v=RiifAqNwHoo", "THE HERO", "Medium"],
856 ["https://www.youtube.com/watch?v=fcsvE1zv1ek", "Gangsta's Paradise", "Easy"],
857 ["https://www.youtube.com/watch?v=d5Ql4Sjo-GU", "Midsummer Madness", "medium"],
858 ["https://www.youtube.com/watch?v=ZONlGIshF3o", "Where Does The Time Go", "Hard"],
859 ["https://www.youtube.com/watch?v=3kCWT57h4J0", "Devilman no Uta", "Hard"],
860 ["https://www.youtube.com/watch?v=dv13gl0a-FA", "Deja Vu", "Medium"],
861 ["https://www.youtube.com/watch?v=_ubnhgZgsfc", "Stronger", "Medium"],
862 ["https://www.youtube.com/watch?v=zKFzKIa_pIM", "Chlorine", "Easy"],
863 ["https://www.youtube.com/watch?v=HUHC9tYz8ik", "Bury a friend", "Medium"],
864 ["https://www.youtube.com/watch?v=gBRi6aZJGj4", "Bellyache", "Hard"],
865 ["https://www.youtube.com/watch?v=k1ATPhkVWi0", "My Strange Addiction", "Medium"],
866 ["https://www.youtube.com/watch?v=PoVgCOCt4KA", "Alien Boy", "Medium"],
867 ["https://www.youtube.com/watch?v=Sk-U8ruIQyA", "Blood // Water", "hard"],
868 ["https://www.youtube.com/watch?v=eFVj0Z6ahcI", "Last Surprise", "medium"]
869
870];
871
872const TriviaQuestions = [
873
874 ["Who painted the Mona Lisa?", ["Da Vinci"], ["Mona Lisa"], ["Kars"], "Art"],
875 ["When did the Second World War end?", ["1945"], ["1939"], ["1944"], "History"],
876 ["Who starts first in chess?", ["White"], ["Black"], ["Arbitrary"], "Games"],
877 ["What year did Elvis Presley die?", ["1977"], ["1979"], ["1972"], "History"],
878 ["What colours make purple?", ["Red & Blue"], ["Blue & Black"], ["Pink & Red"], "Other"],
879 ["When was President Kennedy killed?", ["1963"], ["1969"], ["1961"], "History"],
880 ["What is the first letter on a typewriter?", ["Q"], ["A"], ["W"], "History"],
881 ["The average human body contains how many pints of blood?", ["9"], ["10"], ["8"], "Biology"],
882 ["Which of the planets is closest to the sun?", ["Mercury"], ["Mars"], ["Earth"], "Space"],
883 ["What was Twitter’s original name?", ["Twttr"], ["Twitter"], ["Tweeter"], "Internet"],
884 ["Which year was Minecraft released?", ["2009"], ["2010"], ["2008"], "Video Games"],
885 ["Resident Evil 7 was released in which year?", ["2017"], ["2016"], ["2018"], "Video Games"],
886 ["Name of the character abused by Mario?", ["Donkey Kong"], ["Yoshi"], ["Luigi"], "Video Games"],
887 ["How many layers are there in the Sun?", ["6"], ["4"], ["10"], "Space"],
888 ["How much water is evaporated every day?", ["1 Trillion Tons"], ["58 Billion Tons"], ["100 Trillion Tons"], "Space"],
889 ["Unlike most other fish, sharks have no ...?", ["Bones"], ["Gills"], ["Liver"], "Biology"],
890 ["Which of the following has more bones?", ["Baby"], ["Adult"], ["Teenager"], "Biology"],
891 ["Which game was delayed because it had a hidden photo of a developer's butt?", ["Halo 2"], ["Saints Row 3"], ["GTA V"], "Video Games"],
892 ["What Spanish artist said he would eat his wife when she died?", ["Dali"], ["Pablo Picasso"], ["El Greco"], "History"],
893 ["What was the first Nazi concentration camp?", ["Dachau"], ["Aushwitz"], ["Chelmno"], "History"],
894 ["How many U.S. presidents have been assassinated prior to 2019?", ["4"], ["9"], ["2"], "History"],
895 ["What three colors appear on the Italian flag?", ["Red, white and green"], ["Orange, white and green"], ["Red, blue and white"], "Other"],
896 ["How is CzechoSlovakia called today?", ["Czechia"], ["Bohemia"], ["Still CzechoSlovakia"], "History"],
897 ["Which war took place between 1950 and 1953?", ["The Korean War"], ["The second World War"], ["Nothing"], "History"],
898 ["Who was the first democratically elected President of Russia?", ["Boris Yeltsin"], ["Vladimir Putin"], ["Nikita Krushcev"], "History"],
899 ["What did ancient Egyptians use as pillows?", ["Stones"], ["Animal Pelts"], ["Bundles of Wheat"], "History"],
900 ["In the film Babe, what type of animal was Babe?", ["Pig"], ["Dog"], ["Bunny"], "Other"],
901 ["What’s the total number of dots on a pair of dice?", ["42"], ["6"], ["64"], "Other"],
902 ["Which of these is the tallest mammal?", ["Giraffe"], ["Sauropod"], ["Whale"], "Biology"]
903
904];
905
906const RandomWords = [
907
908 "Life",
909 "Happiness",
910 "Goal",
911 "School",
912 "Board",
913 "Sun",
914 "Space",
915 "Videogame",
916 "Restaurant",
917 "Discord",
918 "Worker",
919 "Website",
920 "Face",
921 "Human",
922 "PEEKY",
923 "Smile",
924 "Dog",
925 "Cat",
926 "Creeper",
927 "Devil",
928 "Fridge",
929 "Rose",
930 "Car",
931 "Donuts",
932 "Golf",
933 "Deer",
934 "Storage",
935 "Spiderman",
936 "Parents",
937 "Sheep",
938 "Photographer",
939 "Bunny",
940 "Pikachu",
941 "Pokemon",
942 "Store",
943 "Dress",
944 "Grapes",
945 "Hero",
946 "Minecraft",
947 "Weapon",
948 "Sleep",
949 "Fruit",
950 "Flower",
951 "Lover",
952 "Number",
953 "Trophy",
954 "Friends",
955 "Doctor",
956 "Donkey",
957 "Shrek",
958 "JoJo",
959 "Bus",
960 "Rat",
961 "Fedora",
962 "Money",
963 "Gems",
964 "Cocktail",
965 "Dance",
966 "Inventory"
967
968];
969
970//FUNCTIONS
971
972//CANVAS: Welcome Messages embed
973async function function_WelcomeMessagesEmbed(member, type, detected) {
974
975 var attachment = null;
976 const key = member.user.id;
977 var Failed = false;
978
979 const canvas = Canvas.createCanvas(500, 95);
980 const ctx = canvas.getContext('2d');
981
982 ctx.globalAlpha = 0.75;
983
984 var TheBannerShown = DefaultBackground;
985 if (peeky.userData.has(key)) {
986 TheBannerShown = function_GetBackground(key);
987 };
988
989 const background = await Canvas.loadImage(TheBannerShown)//.catch(error => {Failed = true; peeky.userData.set(member.id, DefaultBackground, "Background");});
990
991 if (Failed == false) {
992
993 ctx.drawImage(background, 0, 0, canvas.width, 300);
994
995 const layout = await Canvas.loadImage("http://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fwelcome_messages_layout_3.png?v=1561018982206");
996 ctx.drawImage(layout, 0, 0, canvas.width, canvas.height);
997
998 ctx.shadowColor = "black";
999 ctx.shadowOffsetX = 1;
1000 ctx.shadowOffsetY = 1;
1001 ctx.globalAlpha = 1;
1002
1003 //Draw Events
1004
1005 //Joined String
1006 ctx.font = "20px " + Setting.DefaultFont;
1007 ctx.textAlign = "right";
1008 ctx.fillStyle = "white";
1009
1010 if (type == "join") { ctx.fillStyle = "lightgreen"; }
1011 else if (type == "leave") { ctx.fillStyle = "pink"; };
1012
1013 ctx.fillText("●", canvas.width - 5, 18);
1014
1015 //Name String
1016 ctx.font = "25px " + Setting.DefaultFont;
1017 ctx.fillStyle = "white";
1018 ctx.textAlign = "left";
1019
1020 if (detected == true) {
1021 ctx.fillStyle = "pink";
1022 var NameString = "Censored";
1023 } else {
1024 ctx.fillStyle = "white";
1025 var NameString = peeky.users.get(key).username;
1026 };
1027
1028 ctx.fillText(NameString, 125, 40, canvas.width - 175);
1029
1030 if (peeky.userData.has(key)) {
1031
1032 //Description String
1033 var text = peeky.userData.get(key, "Description");
1034 var y_position = 75;
1035 ctx.fillStyle = "white";
1036
1037 if (text.includes("\n")) { y_position = 62.5; };
1038 ctx.font = "18px " + Setting.DefaultFont;
1039 ctx.fillText(text, 125, y_position, canvas.width - 175);
1040 }
1041 else if (!member.user.bot) {
1042 ctx.font = "18px " + Setting.DefaultFont;
1043 ctx.fillStyle = "pink";
1044 ctx.fillText("No Profile" , 125, 75);
1045 }
1046 else {
1047 ctx.font = "18px " + Setting.DefaultFont;
1048 ctx.fillStyle = "lightblue";
1049 ctx.fillText("Bot" , 125, 75);
1050 };
1051
1052 //Avatar
1053 ctx.shadowOffsetX = 0;
1054 ctx.shadowOffsetY = 0;
1055 const avatar = await Canvas.loadImage(member.user.displayAvatarURL.replace("https", "http"));
1056 ctx.drawImage(avatar, 7, 7, 82, 82);
1057
1058 return attachment = new Discord.Attachment(canvas.toBuffer(), 'peeky.png', { quality: 0.1 });
1059
1060 };
1061
1062};
1063
1064//CANVAS: Music embed
1065async function function_MusicEmbed(Title, Thumbnail, Author, Length, User, Type) {
1066
1067 var attachment = null;
1068
1069 var Now = new Date();
1070
1071 const canvas = Canvas.createCanvas(500, 370);
1072 const ctx = canvas.getContext('2d');
1073
1074 const background = await Canvas.loadImage(PrismPattern);
1075 ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
1076
1077 /*ctx.globalAlpha = 0.5;
1078 ctx.fillRect(5, 5, canvas.width - 10, canvas.height - 10);
1079
1080 ctx.stroke();*/
1081
1082 ctx.fillStyle = Setting.Dark;
1083 ctx.globalAlpha = 1;
1084 ctx.fillRect(10, 10, canvas.width - 20, 270);
1085
1086 ctx.stroke();
1087
1088 ctx.globalAlpha = 1;
1089 const thumbnail = await Canvas.loadImage(Thumbnail);
1090 ctx.drawImage(thumbnail, 15, 15, canvas.width - 30, 260);
1091
1092 //String Setting
1093 ctx.fillStyle = "black";
1094 ctx.textAlign = "left";
1095 ctx.fillStyle = "white";
1096 ctx.shadowColor = "black";
1097 ctx.shadowOffsetX = 1;
1098 ctx.shadowOffsetY = 1;
1099 ctx.globalAlpha = 1;
1100
1101 //Header
1102 ctx.font = "15px " + Setting.DefaultFont;
1103 if (Type == "Started") {
1104 ctx.fillText(peeky.users.get(User).username + " has requested " + Author + "'s song.", 15, 310);
1105 } else if (Type == "Playlist") {
1106 //ctx.font = "13px " + Setting.DefaultFont;
1107 ctx.fillText(peeky.users.get(User).username + " has requested a random song from " + peeky.userData.get(User, "PlaylistName") + ".", 15, 310, canvas.width - 30);
1108 } else if (Type == "Random") {
1109 ctx.fillText(peeky.users.get(User).username + " has requested a random song.", 15, 310);
1110 } else if (Type == "Previous") {
1111 ctx.fillText(peeky.users.get(User).username + " has requested the previous song.", 15, 310);
1112 } else if (Type == "Current") {
1113 ctx.fillText("Currently playing with approximately " + function_TimeLeft(Length, "minutes", null) + " minutes left.", 15, 310);
1114 };
1115
1116 //Song Name
1117 ctx.font = "20px " + Setting.DefaultFont;
1118 ctx.fillText(Title, 15, 345, canvas.width - 30);
1119
1120 return attachment = new Discord.Attachment(canvas.toBuffer(), 'peeky.png', { quality: 0.1 });
1121
1122};
1123
1124//FUNCTION: Stream Announcements
1125function function_StreamAnnouncements(member) {
1126
1127 CurrentlyStreaming.add(member.user.id + member.guild.id + "SA2");
1128 setTimeout(() => {CurrentlyStreaming.delete(member.user.id + member.guild.id + "SA2")}, 1800000);
1129
1130 var type = undefined;
1131
1132 if (member.presence.game.url.startsWith("https://youtube.com")) {
1133
1134 type = "youtube";
1135
1136 } else if (member.presence.game.url.startsWith("https://www.twitch.tv")) {
1137
1138 type = "twitch";
1139
1140 };
1141
1142 if (member.presence.game.name == "Twitch") {
1143
1144 var GameName = function_RemoveFormatting(member.presence.game.details, "other", false);
1145 var GameLink = member.presence.game.url;
1146 var GameColor = 6570404;
1147 var GameHost = "Twitch";
1148
1149 } else
1150
1151 if (member.presence.game.name == "YouTube") {
1152
1153 var GameName = function_RemoveFormatting(member.presence.game.details, "other", false);
1154 var GameLink = member.presence.game.url;
1155 var GameColor = 13632027;
1156 var GameHost = "YouTube";
1157
1158 } else
1159
1160 if (type == "discord") {
1161
1162 var GameName = function_RemoveFormatting(member.presence.game.name, "other", false);
1163 var GameLink = "https://discordapp.com/channels/" + member.guild.id + "/" + member.voiceChannel.id;
1164 var GameColor = 7506394;
1165 var GameHost = "Discord";
1166
1167 };
1168
1169 return { "description": " \n **Name:** " + GameName + " \n **Link:** " + GameLink + " \n\n ", "color": GameColor, "author": { "name": function_RemoveFormatting(member.displayName, "other", true) + " has started live streaming on " + GameHost + "!", "icon_url": member.user.displayAvatarURL } };
1170
1171};
1172
1173function UpdateLeaderboardTypes(type) {
1174
1175 if (type == "Gredit") {
1176 var filtered = peeky.userData.filter( p => p.Gredit && p.FashionBadge == true ).array();
1177 var sorted = filtered.sort((a, b) => b.Gredit - a.Gredit);
1178 };
1179
1180 if (type == "Karma") {
1181 var filtered = peeky.userData.filter( p => p.Karma && p.FashionBadge == true ).array();
1182 var sorted = filtered.sort((a, b) => b.Karma - a.Karma);
1183 };
1184
1185 if (type == "Levels") {
1186 var filtered = peeky.userData.filter( p => p.Level && p.FashionBadge == true ).array();
1187 var sorted = filtered.sort((a, b) => b.Level - a.Level);
1188 };
1189
1190 const top = sorted.splice(0, 50);
1191 var currentplace = 0;
1192 var CurrentID = 0;
1193 var GotBadge = true;
1194 const Leaderboard = [];
1195 const LeaderboardTop = [];
1196
1197 for (var data of top) {
1198
1199 currentplace ++;
1200
1201 if (currentplace == 1) {CurrentID = "first"} else if (currentplace == 2) {CurrentID = "second"} else if (currentplace == 3){CurrentID = "third"} else {CurrentID = "other"};
1202 if (currentplace > 3) {GotBadge = false};
1203
1204 if (peeky.users.has(data.UserID)) {
1205
1206 var CurrentUser = peeky.users.get(data.UserID);
1207
1208 if (type == "Gredit") {
1209 var PlaceInfo = peeky.userData.get(`${data.UserID}`, 'Gredit').toLocaleString('en') + " Gredit";
1210 };
1211
1212 if (type == "Karma") {
1213 var PlaceInfo = peeky.userData.get(`${data.UserID}`, 'Karma').toLocaleString('en') + " Karma";
1214 };
1215
1216 if (type == "Levels") {
1217 var PlaceInfo = peeky.userData.get(`${data.UserID}`, 'Level').toLocaleString('en') + " Levels";
1218 };
1219
1220 if (GotBadge == true) {
1221 peeky.userData.set(`${data.UserID}`, true, "MedallistBadge");
1222 };
1223
1224 var TheBannerShown = DefaultBackground;
1225 TheBannerShown = function_GetBackground(data.UserID);
1226
1227 var SavedProfile = "<div class='leaderboarditem' id='" + CurrentID + "' style='background-image: url(" + TheBannerShown + ")'> <b class='leaderboardname' id='" + CurrentUser.id + "'> <img src='" + CurrentUser.displayAvatarURL + "' class='leaderboardicon'> " + function_RemoveTags(CurrentUser.tag) + "</b> <br><br> <b class='leaderboardstats'>" + currentplace + ". place with " + PlaceInfo + "</b> </div>";
1228 if (currentplace == 1 || currentplace == 2 || currentplace == 3) {
1229 LeaderboardTop.push(SavedProfile);
1230 } else {
1231 Leaderboard.push(SavedProfile);
1232 };
1233
1234 }
1235 else
1236 {
1237 Leaderboard.push("<div class='leaderboarditem' id='" + CurrentID + "' style='background-image: url(" + DefaultBackground + ")'> <b class='unknown'>UNAVAILABLE PROFILE <br> <font size='2'> If this profiles stays unavailable for " + function_TimeLeft(peeky.userData.get(data.UserID, "lastSeen"), "days", InactiveTime) + " more days, it will get deleted. </font></b> </div>");
1238 };
1239
1240 };
1241
1242 if (type == "Gredit") {
1243 return "<center> <div class='leaderboardtop'>" + LeaderboardTop.join("<br><br>") + " <br><br> <b class='toptext'> Get in the TOP 3 for the Medallist badge! </b> </div> </center>" + Leaderboard.join("<br><br>");
1244 };
1245
1246 if (type == "Karma") {
1247 return "<center> <div class='leaderboardtop'>" + LeaderboardTop.join("<br><br>") + " <br><br> <b class='toptext'> Get in the TOP 3 for the Medallist badge! </b> </div> </center>" + Leaderboard.join("<br><br>");
1248 };
1249
1250 if (type == "Levels") {
1251 return "<center> <div class='leaderboardtop'>" + LeaderboardTop.join("<br><br>") + " <br><br> <b class='toptext'> Get in the TOP 3 for the Medallist badge! </b> </div> </center>" + Leaderboard.join("<br><br>");
1252 };
1253
1254};
1255
1256//Create Server Data
1257function function_ServerData(key) {
1258
1259 if (!peeky.serverData.has(key)) {
1260
1261 peeky.serverData.ensure(key , {
1262 GuildID: key,
1263 lastSeen: Date.now(),
1264 server_upgraded: false,
1265 server_invite: "no_invite",
1266 prefix: Setting.DefaultPrefix,
1267 language: 0,
1268 muted_role: "Muted",
1269 highlighted_channel: "treasures",
1270 function_notifications: false,
1271 level_notifications: false,
1272
1273 Title: "None",
1274 Thumbnail: DefaultBackground,
1275 Author: "No one",
1276 Length: 60,
1277 Started: new Date(),
1278 Link: "None",
1279
1280 welcome_messages_bonus: false,
1281 welcome_messages_bonus_setting: "welcome_messages",
1282 join_role_bonus: false,
1283 join_role_bonus_setting: "Member",
1284 streamer_role_bonus: false,
1285 streamer_role_bonus_setting: "Streamer",
1286 automatic_reactions_bonus_setting: "peeky",
1287 server_message_bonus: false,
1288 image_only_bonus_setting: 0,
1289 server_message_bonus_setting: "Welcome to the server!",
1290 message_log_bonus_setting: "logged_messages",
1291 member_counter_bonus: false,
1292 member_counter_bonus_setting: "Members",
1293 member_counter_bonus_id: null,
1294 clear_nicknames_bonus: false,
1295 clear_nicknames_bonus_setting: "Cleared Nickname",
1296 suspicion_alert_bonus: false,
1297 suspicion_alert_bonus_setting: 10,
1298 flood_protection_bonus: false,
1299 flood_protection_bonus_setting: 2,
1300 donor_wall_bonus_setting: "Booster",
1301 donor_wall_bonus: false,
1302 donor_wall_bonus_id: null,
1303 donor_wall_bonus_channel: "boosters",
1304 donor_wall_bonus_array: [],
1305 banned_words_bonus_setting: [],
1306 spoiler_only_bonus: false,
1307 spoiler_lock_bonus_setting: 0,
1308 event_countdown_bonus: false,
1309 event_countdown_bonus_setting: 0,
1310 event_countdown_bonus_id: 0,
1311 vote_kick_bonus_bonus: false,
1312 vote_kick_bonus_setting: 10,
1313 stream_announcements_bonus: false,
1314 stream_announcements_bonus_setting: "twitch",
1315 role_saver_bonus: false,
1316 role_saver_bonus_setting: [],
1317 role_saver_bonus_array: [],
1318 game_roles_bonus: false,
1319 game_roles_bonus_setting: [],
1320 nick_saver_bonus: false,
1321 nick_saver_array: [],
1322 server_age_bonus: false,
1323 server_age_bonus_id: null,
1324 dash_remover_bonus: false,
1325 reddit_posts_bonus: false,
1326 reddit_posts_bonus_setting: "discordapp",
1327 reddit_posts_bonus_last: [],
1328 ticket_system_bonus: false,
1329 ticket_system_bonus_setting: "Staff",
1330 ticket_system_bonus_id: null,
1331 reaction_roles_bonus: false,
1332 reaction_roles_bonus_setting: [],
1333 reaction_roles_bonus_id: null,
1334 });
1335
1336 console.log("Created server data for " + key + ".");
1337
1338 };
1339
1340};
1341
1342//Create Channel Data
1343function function_ChannelData(key) {
1344
1345 if (!peeky.channelData.has(key)) {
1346
1347 peeky.channelData.ensure(key , {
1348 ChannelID: key,
1349
1350 automatic_reactions_bonus: false,
1351 image_only_bonus: false,
1352 message_log_bonus: false,
1353 banned_words_bonus: false,
1354 flood_protection_bonus_lastdate: null,
1355 flood_protection_bonus_lastuser: null,
1356 flood_protection_bonus_lastmsg: null,
1357 safe_chat_bonus: false
1358 });
1359
1360 console.log("Created channel data for " + key + ".");
1361
1362 };
1363
1364};
1365
1366//Direct Message
1367function function_DirectMessage(id, message) {
1368
1369 if (!FailedDMs.has(id)) {
1370
1371 peeky.users.get(id).send(message).catch(err => {
1372 ErrorBag.add(err);
1373
1374 FailedDMs.add(id);
1375 setTimeout(() => {FailedDMs.delete(id)}, 300000);
1376 });
1377
1378 };
1379
1380};
1381
1382//Update Bans
1383function function_UpdateBans() {
1384
1385 BannedUsers.splice(0, BannedUsers.length);
1386 peeky.guilds.get(SupportServer).fetchBans().then(banned => {
1387
1388 banned.array().forEach(i => {
1389 BannedUsers.push(i.id);
1390 });
1391
1392 });
1393
1394 console.log("The banned users have been updated.");
1395
1396};
1397
1398function function_UpdateAutowipe(key, type) {
1399
1400 if (type == "server") {
1401 peeky.serverData.set(key, Date.now(), 'lastSeen');
1402 console.log("Updated autowipe for " + key + ".");
1403 };
1404
1405 if (type == "user") {
1406 peeky.userData.set(key, Date.now(), 'lastSeen');
1407 console.log("Updated autowipe for " + key + ".");
1408 };
1409
1410};
1411
1412//Remove Formatting
1413function function_RemoveFormatting(text, type, sliced) {
1414
1415 if (type == "sm") {
1416
1417 var FixedText = function_ProperSlice(text.replace(/[`]/g, '').replace(/\n/g, ' '), 100);
1418
1419 if (FixedText !== "") {
1420 return FixedText;
1421 } else {
1422 return BadFormat;
1423 };
1424
1425 } else
1426
1427 if (type == "channel") {
1428
1429 var FixedText = text.toLowerCase().replace(/[~*|`]/g, '').replace(/[ ]/g, '_').replace(/\n/g, '');
1430
1431 if (sliced == true) {
1432 FixedText.slice(0, 100);
1433 };
1434
1435 if (FixedText !== "") {
1436 return FixedText;
1437 } else {
1438 return BadFormat;
1439 };
1440
1441 } else
1442
1443 if (type == "role") {
1444
1445 var FixedText = text.replace(/[~*|`]/g, '').replace(/\n/g, '');
1446
1447 if (sliced == true) {
1448 FixedText.slice(0, 32);
1449 };
1450
1451 if (FixedText !== "") {
1452 return FixedText;
1453 } else {
1454 return BadFormat;
1455 };
1456
1457 } else
1458
1459 if (type == "other") {
1460
1461 var FixedText = text.replace(/[~*|`_]/g, '').replace(/\n/g, '');
1462
1463 if (sliced == true) {
1464 FixedText = function_ProperSlice(FixedText, 100);
1465 };
1466
1467 if (FixedText !== "") {
1468 return FixedText;
1469 } else {
1470 return BadFormat;
1471 };
1472
1473 } else
1474
1475 if (type == "strict") {
1476
1477 var FixedText = text.replace(/[ ~*|`_]/g, '').replace(/\n/g, '');
1478
1479 if (FixedText !== "") {
1480 return FixedText;
1481 } else {
1482 return BadFormat;
1483 };
1484
1485 };
1486
1487};
1488
1489//Detect Link
1490function function_DetectLink(string) {
1491
1492 if (string.length > 0) {
1493
1494 if (string.match(/(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)/g) !== null) {
1495 return true;
1496 } else {
1497 return false;
1498 };
1499
1500 };
1501
1502};
1503
1504//Remove HTML Tags
1505function function_RemoveTags(text) {
1506 return text.replace(/(<([^>]+)>)/ig, "").replace(/[<>]/g, "");
1507};
1508
1509//Fix Capitalization
1510function function_FixCapitalization(text) {
1511
1512 return text.slice(0, 1).toUpperCase() + text.slice(1, text.length).toLowerCase();
1513
1514};
1515
1516//Proper Slice
1517function function_ProperSlice(text, amount) {
1518
1519 var EndString = "";
1520 text = text.toString();
1521
1522 if (text.length > amount) {
1523 EndString = "...";
1524 };
1525
1526 return text.slice(0, amount) + EndString;
1527
1528};
1529
1530//Random Description
1531function function_RandomDescription() {
1532 return DefaultDescriptions[Math.floor(Math.random()*DefaultDescriptions.length)];
1533};
1534
1535//Get Background
1536function function_GetBackground(key) {
1537
1538 if (peeky.userData.has(key)) {
1539
1540 if (isNaN(peeky.userData.get(key, "Background")) == false) {
1541
1542 for (var i = 0; i < Banners.length; i++) {
1543
1544 if (peeky.userData.get(key, "Background") == i + 1) {
1545 return Banners[i][Banner.Source];
1546 break;
1547 };
1548
1549 };
1550
1551 } else {
1552 return peeky.userData.get(key, "Background");
1553 };
1554
1555 };
1556
1557};
1558
1559//Get Background
1560function function_GetBackgroundInfo(ID, args) {
1561
1562 for (var i = 0; i < Banners.length; i++) {
1563
1564 if (i == ID - 1) {
1565
1566 var Background = [];
1567
1568 if (args.includes("name")) {
1569 Background.push(Banners[i][Banner.Name]);
1570 };
1571
1572 if (args.includes("credit")) {
1573 Background.push(Banners[i][Banner.Credit]);
1574 };
1575
1576 if (args.includes("id")) {
1577 Background.push("`" + ID + "`");
1578 };
1579
1580 if (args.includes("price")) {
1581 Background.push(Banners[i][Banner.Price]);
1582 };
1583
1584 if (args.includes("source")) {
1585 Background.push(Banners[i][Banner.Source]);
1586 };
1587
1588 if (args.includes("date")) {
1589 Background.push(Banners[i][Banner.AddedDate]);
1590 };
1591
1592 return Background.join(" ");
1593 break;
1594
1595 };
1596
1597 };
1598
1599};
1600
1601//Numarize Array
1602function function_NumarizeArray(array, brackets) {
1603
1604 var Current = 0; var List = [];
1605
1606 if (array.length > 0) {
1607 array.forEach(i => {
1608 Current ++;
1609 List.push(Current + ". " + brackets[0] + i + brackets[1] + "\n");
1610 });
1611 } else {
1612 return "None";
1613 }
1614
1615 return List.join("");
1616
1617};
1618
1619//Shuffle Array
1620function function_ShuffleArray(array) {
1621 var j, x, i;
1622 for (i = array.length - 1; i > 0; i--) {
1623 j = Math.floor(Math.random() * (i + 1));
1624 x = array[i];
1625 array[i] = array[j];
1626 array[j] = x;
1627 }
1628 return array;
1629};
1630
1631//Date Format
1632function function_DateFormat(value) {
1633
1634 value = new Date(value);
1635
1636 var ThisDate = value.getUTCDate();
1637 var ThisMonth = value.getUTCMonth() + 1;
1638
1639 if (ThisDate < 10) {
1640 ThisDate = "0" + ThisDate;
1641 };
1642
1643 if (ThisMonth < 10) {
1644 ThisMonth = "0" + ThisMonth;
1645 };
1646
1647 return Days[value.getUTCDay()] + ", " + ThisDate + "/" + ThisMonth + "/" + value.getFullYear();
1648
1649};
1650
1651//Time Left
1652function function_TimeLeft(value, type, since) {
1653
1654 value = new Date(value);
1655
1656 if (!isNaN(value)) {
1657
1658 if (type == "days") {
1659
1660 if (since !== null) {
1661 return since - (Math.abs((new Date() - value) / (1000 * 60 * 60 * 24)).toFixed(0));
1662 } else {
1663 return (Math.abs((new Date() - value) / (1000 * 60 * 60 * 24)).toFixed(0));
1664 };
1665
1666 } else if (type == "hours") {
1667
1668 if (since !== null) {
1669 return since - (Math.abs((new Date() - value) / (1000 * 60 * 60)).toFixed(0));
1670 } else {
1671 return (Math.abs((new Date() - value) / (1000 * 60 * 60)).toFixed(0));
1672 };
1673
1674 } else if (type == "minutes") {
1675
1676 if (since !== null) {
1677 return since - (Math.abs((new Date() - value) / (1000 * 60)).toFixed(0));
1678 } else {
1679 return (Math.abs((new Date() - value) / (1000 * 60)).toFixed(0));
1680 };
1681
1682 };
1683
1684 } else {
1685
1686 return "Invalid Date";
1687
1688 };
1689
1690};
1691
1692function UpdateBackgrounds() {
1693
1694 fetch('https://peeky.glitch.me/backgrounds.txt')
1695 .then(response => response.text()).then((data) => {
1696 document.getElementById("BackgroundList").innerHTML = data;
1697 });
1698
1699 fetch('https://peeky.glitch.me/workshop.txt')
1700 .then(response => response.text()).then((data) => {
1701 document.getElementById("Workshop").innerHTML = data;
1702 });
1703
1704};
1705
1706function UpdateRandomSongs() {
1707
1708 fetch('https://peeky.glitch.me/random_songs.txt')
1709 .then(response => response.text()).then((data) => {
1710 document.getElementById("RandomSongsList").innerHTML = data;
1711 });
1712
1713};
1714
1715function UpdateSupporters() {
1716
1717 fetch('https://peeky.glitch.me/supporters.txt')
1718 .then(response => response.text()).then((data) => {
1719 document.getElementById("SupporterList").innerHTML = data;
1720 });
1721
1722};
1723
1724function UpdateLeaderboard() {
1725
1726 fetch('https://peeky.glitch.me/leaderboard.txt')
1727 .then(response => response.text()).then((data) => {
1728 document.getElementById("Leaderboard").innerHTML = data;
1729 });
1730
1731
1732};
1733
1734function UpdateServerList() {
1735
1736 fetch('https://peeky.glitch.me/server_list.txt')
1737 .then(response => response.text()).then((data) => {
1738 document.getElementById("ServerList").innerHTML = data;
1739 });
1740
1741};
1742
1743function UpdateServerLog() {
1744
1745 fetch('https://peeky.glitch.me/server_log.txt')
1746 .then(response => response.text()).then((data) => {
1747 document.getElementById("ServerList").innerHTML = data;
1748 });
1749
1750};
1751
1752function UpdateHome(text) {
1753
1754 fetch('https://peeky.glitch.me/stats.txt')
1755 .then(response => response.text()).then((data) => {
1756 document.getElementById("ServerCount").innerHTML = data
1757 });
1758
1759 fetch('https://peeky.glitch.me/botdescription.txt')
1760 .then(response => response.text()).then((data) => {
1761 document.getElementById("botdescription").innerHTML = data
1762 });
1763
1764 fetch('https://peeky.glitch.me/randomreview.txt')
1765 .then(response => response.text()).then((data) => {
1766 document.getElementById("Reviews").innerHTML = data
1767 });
1768
1769 fetch('https://peeky.glitch.me/news.txt')
1770 .then(response => response.text()).then((data) => {
1771 document.getElementById("News").innerHTML = data;
1772 });
1773
1774 fetch('https://peeky.glitch.me/staff.txt')
1775 .then(response => response.text()).then((data) => {
1776 document.getElementById("StaffList").innerHTML = data;
1777 });
1778
1779 fetch('https://peeky.glitch.me/featured_profile.txt')
1780 .then(response => response.text()).then((data) => {
1781 document.getElementById("FeaturedProfile").innerHTML = data;
1782 });
1783
1784 fetch('https://peeky.glitch.me/messageheader.txt')
1785 .then(response => response.text()).then((data) => {
1786 document.getElementById("messageheader").innerHTML = data;
1787 });
1788
1789};
1790
1791peeky.on('ready', () => {
1792
1793 console.log("PEEKY is now online.");
1794 peeky.user.setActivity('people type p!help', { type: 'WATCHING' }).catch(error => ErrorBag.add(error));
1795
1796 //Update Banned Users
1797 setTimeout(() => {
1798 function_UpdateBans();
1799 peeky.guilds.get(SupportServer).fetchMembers();
1800 }, 10000);
1801
1802 setInterval(() => {
1803
1804 var GuildSize = peeky.guilds.size;
1805
1806 //Set user info
1807 peeky.user.setAvatar(RandomAvatars[Math.floor(Math.random()*RandomAvatars.length)]).catch(error => ErrorBag.add(error));
1808 peeky.user.setActivity('people type p!help', { type: 'WATCHING' }).catch(error => ErrorBag.add(error));
1809 console.log("Updated PEEKY's avatar.");
1810
1811 //Post Server Counts - DDBL
1812 ddbl.postStats(GuildSize).catch(err => {console.log("Failed to post the server count to DDBL."); ErrorBag.add(err)});
1813
1814 //Post Server Counts - BLS
1815 bls.postServerCount(GuildSize).catch(err => {console.log("Failed to post the server count to BLS."); ErrorBag.add(err)});
1816
1817 //Post Server Counts - BFD
1818 node_fetch(`https://botsfordiscord.com/api/bot/${peeky.user.id}`, {
1819 method: 'POST',
1820 headers: {
1821 'Authorization': process.env.BFD_TOKEN,
1822 'Content-Type': 'application/json'
1823 },
1824 body: JSON.stringify({ server_count: GuildSize })
1825 }).catch(err => {console.log("Failed to post the server count to BFD."); ErrorBag.add(err)});
1826
1827 //Post Server Counts - BD
1828 node_fetch(`https://discord.boats/api/v2/bot/${peeky.user.id}`, {
1829 method: 'POST',
1830 headers: {
1831 'Authorization': process.env.BD_TOKEN,
1832 'Content-Type': 'application/json'
1833 },
1834 body: JSON.stringify({ server_count: GuildSize })
1835 }).catch(err => {console.log("Failed to post the server count to DB."); ErrorBag.add(err)});
1836
1837 //Post Server Counts - CL
1838 node_fetch(`https://www.cloudlist.xyz/api/stats/${peeky.user.id}`, {
1839 method: 'POST',
1840 headers: {
1841 'Authorization': process.env.CL_TOKEN,
1842 'Content-Type': 'application/json'
1843 },
1844 body: JSON.stringify({ server_count: GuildSize })
1845 }).catch(err => {console.log("Failed to post the server count to CL."); ErrorBag.add(err)});
1846
1847 console.log("Stats posted to Bot Lists.");
1848
1849 //Update Banned Users
1850 function_UpdateBans();
1851
1852 //Fix ServerData
1853 peeky.guilds.forEach(guild => {
1854 function_ServerData(`${guild.id}`);
1855 });
1856
1857 //Fix ChannelData
1858 peeky.channels.forEach(channel => {
1859 function_ChannelData(`${channel.id}`);
1860 });
1861
1862 }, 7200000);
1863
1864});
1865
1866peeky.on('reconnecting', () => {
1867 console.log("PEEKY is now reconnecting.");
1868});
1869
1870peeky.on('disconnect', () => {
1871 console.log("PEEKY is now disconnected.");
1872});
1873
1874//Fixes
1875process.on('uncaughtException', function (err) { ErrorBag.add(err) });
1876peeky.on('error', function (err) { ErrorBag.add(err) });
1877
1878//Stats System
1879peeky.on('message', async (message) => {
1880
1881 if (message.channel.type !== "dm") {
1882
1883 const key = `${message.author.id}`;
1884 const keyCF = `${message.channel.id}`;
1885 const keySF = `${message.guild.id}`;
1886
1887 if (!message.author.bot && !message.webhookID) {
1888
1889 peeky.userData.ensure(key , {
1890 UserID: message.author.id,
1891 OverviewID: null,
1892 LanguageID: null,
1893 lastSeen: new Date(),
1894
1895 Background: 1,
1896 Description: function_RandomDescription(),
1897 Inventory: [1],
1898 Gredit: 0,
1899 Karma: 0,
1900 Exp: 1,
1901 Level: 1,
1902 Chests: 0,
1903 Badges: 0,
1904 UpgradedServers: 0,
1905 SupporterSince: 0,
1906 SupporterLastPurchase: 0,
1907 BoosterStart: 0,
1908 DailyRewarded: 0,
1909
1910 Playlist: [],
1911 PlaylistName: "Favorite Songs",
1912 PlaylistThumbnail: null,
1913
1914 ContributorBadge: false,
1915 BugHunterBadge: false,
1916 VeteranBadge: false,
1917 GamblerBadge: 0,
1918 CharityBadge: false,
1919 FashionBadge: false,
1920 VoterBadge: false,
1921 OwnershipBadge: false,
1922 MedallistBadge: false,
1923 MovieNighterBadge: false,
1924 CelebratorBadge: false,
1925 PollerBadge: false,
1926 PublisherBadge: false,
1927 PartyBadge: false,
1928 HorderBadge: false,
1929 PainterBadge: false,
1930 MinerBadge: false,
1931 GamerBadge: false,
1932 EvilBadge: false,
1933 GoodBadge: false,
1934 GopbotBadge: false,
1935 TranslatorBadge: false,
1936
1937 BadgeGredit: 0,
1938 BadgeExp: 0,
1939
1940 ParticipatedEvents: [],
1941 Bans: 0
1942 });
1943
1944 };
1945
1946 if (!message.author.bot && !message.webhookID) {
1947
1948 //Add Stats
1949 if (!GainCooldown.has(message.author.id)) {
1950
1951 GainCooldown.add(message.author.id);
1952 setTimeout(() => {GainCooldown.delete(message.author.id)}, 10000);
1953
1954 var BadgeExpAmount = 0;
1955 var BadgeGreditAmount = 0;
1956 var BadgesAmount = 0;
1957
1958 //Default gain
1959 BadgeGreditAmount += 5;
1960 BadgeExpAmount += 5;
1961
1962 //Upgraded Server
1963 if (peeky.serverData.get(keySF, "server_upgraded") == true) {
1964 BadgeGreditAmount += 2;
1965 BadgeExpAmount += 2;
1966 };
1967
1968 //Staff
1969 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(StaffRole)) { BadgeExpAmount += 2; BadgesAmount ++; };
1970
1971 //Translator
1972 if (peeky.userData.get(key, "TranslatorBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
1973
1974 //Veteran
1975 if (peeky.userData.get(key, "VeteranBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
1976
1977 //Supporter
1978 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) { BadgeGreditAmount += 2; BadgeExpAmount += 2; BadgesAmount ++; };
1979
1980 //Booster
1981 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(BoosterRole)) { BadgeGreditAmount += 2; BadgeExpAmount += 2; BadgesAmount ++; };
1982
1983 //Bug Hunter
1984 if (peeky.userData.get(key, "BugHunterBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
1985
1986 //Contributor
1987 if (peeky.userData.get(key, "ContributorBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
1988
1989 //Celebrator
1990 if (peeky.userData.get(key, "CelebratorBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
1991
1992 //Movie Nighter
1993 if (peeky.userData.get(key, "MovieNighterBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
1994
1995 //Medallist
1996 if (peeky.userData.get(key, "MedallistBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
1997
1998 //Evil
1999 if (peeky.userData.get(key, "EvilBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
2000
2001 //Good
2002 if (peeky.userData.get(key, "GoodBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
2003
2004 //Party
2005 if (peeky.userData.get(key, "PartyBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
2006
2007 //Poller
2008 if (peeky.userData.get(key, "PollerBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
2009
2010 //Voter
2011 if (peeky.userData.get(key, "VoterBadge") == true) { BadgeGreditAmount += 2; BadgesAmount ++; };
2012
2013 //Publisher
2014 if (peeky.userData.get(key, "PublisherBadge") == true) { BadgeExpAmount += 2; BadgesAmount ++; };
2015
2016 //Ownership
2017 if (peeky.userData.get(key, "OwnershipBadge") == true) { BadgeExpAmount += 1; BadgesAmount ++; };
2018
2019 //Gopbot
2020 if (peeky.userData.get(key, "GopbotBadge") == true) { BadgeGreditAmount += 1; BadgesAmount ++; };
2021
2022 //Miner
2023 if (peeky.userData.get(key, "MinerBadge") == true) { BadgeGreditAmount += 1; BadgesAmount ++; };
2024
2025 //Gamer
2026 if (peeky.userData.get(key, "GamerBadge") == true) { BadgeExpAmount += 1; BadgesAmount ++; };
2027
2028 //Horder
2029 if (peeky.userData.get(key, "HorderBadge") == true) { BadgeGreditAmount += 1; BadgesAmount ++; };
2030
2031 //Gambler
2032 if (peeky.userData.get(key, "GamblerBadge") >= 10) { BadgeGreditAmount += 1; BadgesAmount ++; };
2033
2034 //Charity
2035 if (peeky.userData.get(key, "CharityBadge") == true) { BadgeGreditAmount += 1; BadgesAmount ++; };
2036
2037 //Painter
2038 if (peeky.userData.get(key, "PainterBadge") == true) { BadgeExpAmount += 1; BadgesAmount ++; };
2039
2040 //Fashion
2041 if (peeky.userData.get(key, "FashionBadge") == true) { BadgeExpAmount += 1; BadgesAmount ++; };
2042
2043 BadgeExpAmount += peeky.userData.get(key, "UpgradedServers");
2044 BadgeGreditAmount += peeky.userData.get(key, "UpgradedServers");
2045
2046 //EVENT DOUBLE EXP
2047 if (Setting.EventStatus == true) {
2048 BadgeExpAmount = BadgeExpAmount * 2;
2049 };
2050
2051 //PROFILE BOOSTER DOUBLE EXP
2052 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(ProfileBoosterRole)) {
2053 BadgeExpAmount = BadgeExpAmount * 2;
2054 };
2055
2056 peeky.userData.math(key, "+", Math.round(Math.random() * BadgeGreditAmount), "Gredit");
2057 peeky.userData.math(key, "+", Math.round(Math.random() * BadgeExpAmount), "Exp");
2058
2059 peeky.userData.set(key, BadgeGreditAmount, "BadgeGredit");
2060 peeky.userData.set(key, BadgeExpAmount, "BadgeExp");
2061 peeky.userData.set(key, BadgesAmount, "Badges");
2062
2063 };
2064
2065 //Level Up
2066 if (peeky.userData.get(key, "Exp") >= Setting.ExpNeeded * peeky.userData.get(key, "Level")) {
2067
2068 peeky.userData.set(key, 1, "Exp");
2069 peeky.userData.math(key, "+", 1, "Level");
2070 peeky.userData.math(key, "+", 1, "Chests");
2071
2072 if (peeky.serverData.get(keySF, "level_notifications") == true) {
2073
2074 //Level Up Message
2075 const canvas = Canvas.createCanvas(500, 95);
2076 const ctx = canvas.getContext('2d');
2077 var Failed = false;
2078
2079 ctx.globalAlpha = 0.75;
2080
2081 var TheBannerShown = DefaultBackground;
2082 var ProfileName = message.member.displayName;
2083
2084 message.channel.startTyping();
2085
2086 var TheBannerShown = DefaultBackground;
2087 if (peeky.userData.has(key)) {
2088 TheBannerShown = function_GetBackground(key);
2089 };
2090
2091 const background = await Canvas.loadImage(TheBannerShown)//.catch(error => {Failed = true; peeky.userData.set(message.author.id, DefaultBackground, "Background");});
2092
2093 if (Failed == false) {
2094
2095 ctx.drawImage(background, 0, 0, canvas.width, 300);
2096
2097 const layout = await Canvas.loadImage("http://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Flevel_up_layout_2.png?v=1561018982613");
2098 ctx.drawImage(layout, 0, 0, canvas.width, canvas.height);
2099
2100 //Setting
2101 ctx.shadowColor = "black";
2102 ctx.shadowOffsetX = 1;
2103 ctx.shadowOffsetY = 1;
2104 ctx.globalAlpha = 1;
2105 ctx.textAlign = "left";
2106
2107 //Draw Events
2108
2109 //Name String
2110 ctx.font = "25px " + Setting.DefaultFont;
2111 ctx.fillStyle = "white";
2112 ctx.fillText(ProfileName, 125, 40, canvas.width - 125);
2113
2114 //Level Up String
2115 ctx.font = "18px " + Setting.DefaultFont;
2116 ctx.fillStyle = "lightgreen";
2117 ctx.fillText("Has reached Level " + peeky.userData.get(key, "Level") + "!", 125, 75);
2118
2119 //Avatar
2120 ctx.shadowOffsetX = 0;
2121 ctx.shadowOffsetY = 0;
2122 const avatar = await Canvas.loadImage(message.author.displayAvatarURL.replace("https", "http"));
2123 ctx.drawImage(avatar, 7, 7, 82, 82);
2124
2125 const attachment = new Discord.Attachment(canvas.toBuffer(), 'peeky.png', { quality: 0.1 });
2126
2127 message.channel.send("", attachment).catch(error => ErrorBag.add(error));
2128
2129 message.channel.stopTyping();
2130
2131 console.log("The Notifications function has been triggered in " + message.guild.name + ".");
2132 function_UpdateAutowipe(keySF, "server");
2133
2134 };
2135
2136 };
2137
2138 };
2139 };
2140
2141};
2142
2143//API
2144if (!WebsiteCooldowns.has("api")) {
2145
2146 WebsiteCooldowns.add("api");
2147 setTimeout(() => {WebsiteCooldowns.delete("api")}, 300000);
2148
2149 const UpdatedApi = {
2150 "botName": peeky.user.username,
2151 "botDescription": Setting.Description,
2152 "botShortDescription": Setting.ShortDescription,
2153 "botSummary": Setting.Summary,
2154 "botAvatar": peeky.user.avatarURL,
2155 "botId": peeky.user.id,
2156 "ownerId": OwnerId,
2157
2158 "defaultPrefix": Setting.DefaultPrefix,
2159 "ageCount": function_TimeLeft(peeky.user.createdAt, "days", null),
2160 "serverLimit": Setting.MaxServers,
2161 "serverCount": peeky.guilds.size,
2162 "upgradedServers": peeky.serverData.filter(i => i.server_upgraded == true).size,
2163 "profileCount": peeky.userData.count,
2164 "supporterCount": peeky.guilds.get(SupportServer).members.filter(m => m.roles.has(SupporterRole)).size,
2165 "backgroundsCount": Banners.length,
2166
2167 "eventName": Setting.EventName,
2168 "eventStatus": Setting.EventStatus,
2169
2170 "customBackground": Setting.CustomBackgroundPrice,
2171 "sellMultiplier": Setting.SellMultiplier,
2172 "expMultiplier": Setting.ExpNeeded
2173 };
2174
2175 await fs.writeFile('public/api.json', JSON.stringify(UpdatedApi, null, 2), (err) => {
2176 if (err) console.log(err);
2177 });
2178
2179 console.log("The API has been updated.");
2180
2181};
2182
2183//Auto Wipe
2184if (!WebsiteCooldowns.has("autowipe")) {
2185
2186 WebsiteCooldowns.add("autowipe");
2187 setTimeout(() => {WebsiteCooldowns.delete("autowipe")}, 3600000);
2188
2189 const rightNow = Date.now();
2190
2191 //Guilds
2192 var filtered = peeky.serverData.filter( p => p.GuildID && p.lastSeen);
2193 var toRemoveGuilds = filtered.filter(data => rightNow - InactiveWipe > data.lastSeen);
2194
2195 toRemoveGuilds.forEach(async data => {
2196
2197 if (data.server_upgraded !== true && !ImmuneServers.includes(data.GuildID)) {
2198
2199 peeky.serverData.delete(data.GuildID);
2200
2201 var Guild = peeky.guilds.get(data.GuildID);
2202 if (Guild !== undefined) {
2203 if (Guild.owner) {
2204 await function_DirectMessage(Guild.owner.user.id, "I'm leaving your server called **" + Guild.name + "** because of inactivity.");
2205 };
2206 await Guild.leave();
2207 };
2208
2209 console.log("I have removed an inactive server.");
2210
2211 };
2212
2213 });
2214
2215 //Profiles
2216 var filtered = peeky.userData.filter( p => p.UserID && p.lastSeen );
2217 var toRemoveProfiles = filtered.filter(data => rightNow - InactiveWipe > data.lastSeen);
2218
2219 toRemoveProfiles.forEach(data => {
2220 if (!peeky.users.has(data.UserID) || data.FashionBadge == false) {
2221 console.log("I have wiped an inactive profile.");
2222 peeky.userData.delete(`${data.UserID}`);
2223 };
2224 });
2225
2226};
2227
2228//Leaderboard
2229if (!WebsiteCooldowns.has("leaderboard")) {
2230
2231 WebsiteCooldowns.add("leaderboard");
2232 setTimeout(() => {WebsiteCooldowns.delete("leaderboard")}, 600000);
2233
2234 peeky.userData.filter( p => p.MedallistBadge == true ).array().forEach(data => {
2235 peeky.userData.set(`${data.UserID}`, false, "MedallistBadge");
2236 });
2237
2238 var LeaderboardGredit = await UpdateLeaderboardTypes("Gredit");
2239 var LeaderboardKarma = await UpdateLeaderboardTypes("Karma");
2240 var LeaderboardLevel = await UpdateLeaderboardTypes("Levels");
2241
2242 await fs.writeFile('public/leaderboard.txt', "<div id='gredit'>" + LeaderboardGredit + "</div> <div id='karma'>" + LeaderboardKarma + "</div> <div id='levels'>" + LeaderboardLevel + "</div>", (err) => {
2243 if (err) console.log(err);
2244 });
2245
2246 console.log("The leaderboard has been updated.");
2247
2248};
2249
2250//Backgrounds
2251if (!WebsiteCooldowns.has("backgrounds")) {
2252
2253 WebsiteCooldowns.add("backgrounds");
2254 setTimeout(() => {WebsiteCooldowns.delete("backgrounds")}, 600000);
2255
2256 const BackgroundList = [];
2257 var Current = 0;
2258 var Fillers = 0;
2259
2260 Banners.forEach(background_info => {
2261
2262 Current ++;
2263
2264 var CommandString = Setting.DefaultPrefix + 'seebackground ' + Current;
2265 var NewString = "";
2266 var RevenueString = "";
2267 var Price = "";
2268
2269 if (background_info[4] !== undefined && peeky.userData.has(background_info[4])) {
2270 RevenueString = " <font color='lightgreen'>Revenue Enabled</font>";
2271 };
2272
2273 if (background_info[1] == Exclusive) {
2274 Price = Exclusive;
2275 } else {
2276 Price = background_info[1] + " Gredit";
2277 };
2278
2279 if (Date.now() - background_info[5] < DayMs) {
2280 NewString = " <font color='lightgreen'>New</font>";
2281 };
2282
2283 var BackgroundString = '<div class="background"> <img src="' + background_info[0] + '" width="500" height="300" class="background_image"> <div id="' + Current + '"> <div class="background_centered"> <b class="background_text"> <font size="3"> ' + background_info[2] + RevenueString + NewString + ' </font> <br> <font size="2" color="lightgray">' + background_info[3] + '</font> <br><br> <font size="2" color="lightgray">' + Price.toLocaleString('en') + '</font> <br> <font size="1" color="lightgray"> ' + CommandString + '</font></b> </div> </div> </div>';
2284
2285 BackgroundList.push(BackgroundString);
2286
2287 });
2288
2289 await fs.writeFile('public/backgrounds.txt', "<div> " + BackgroundList.reverse().join(" ") + " </div>", (err) => {
2290 if (err) console.log(err);
2291 });
2292
2293 console.log("The backgrounds have been updated.");
2294
2295};
2296
2297//Workshop
2298if (!WebsiteCooldowns.has("workshop")) {
2299
2300 WebsiteCooldowns.add("workshop");
2301 setTimeout(() => {WebsiteCooldowns.delete("workshop")}, 600000);
2302
2303 var WorkshopList = [];
2304
2305 peeky.channels.get(WorkshopChannel).fetchMessages({ limit: 50 }).then(async (messages) => {
2306
2307 messages.forEach(m => {
2308
2309 if (!m.reactions.find(r => r.emoji.name == "?") && m.reactions.find(r => r.emoji.id == DefaultUpvote) && m.reactions.find(r => r.emoji.id == DefaultDownvote) && m.attachments.size > 0 && m.content.includes("Name: ") && m.content.includes("Credit: ") && m.content.includes("Price: ")) {
2310
2311 var BackgroundString = '<div class="background"> <img src="' + m.attachments.array()[0].url + '" width="500" height="300" class="background_image"> <div class="background_centered"> <b class="background_text"> <font size="3"> ' + function_FixCapitalization(m.content.split("\n")[0].replace("Name: ", "")) + ' </font> <br> <font size="2" color="lightgray"> ' + m.content.split("\n")[1].replace("Credit: ", "") + ' </font> <br><br> <font size="2"> ~ ' + m.content.split("\n")[2].replace("Price: ", "").toLocaleString('en') + ' Gredit </font> <br> <font size="1" color="lightgreen"> ' + (m.reactions.find(r => r.emoji.id == DefaultUpvote).count - 1) + ' Upvotes</font> <font size="1">?</font> <font size="1" color="pink"> ' + (m.reactions.find(r => r.emoji.id == DefaultDownvote).count - 1) + ' Downvotes</font> </b> </div> </div>';
2312 WorkshopList.push(BackgroundString);
2313
2314 };
2315
2316 });
2317
2318 await fs.writeFile('public/workshop.txt', "<div class='workshop'>" + WorkshopList.join(" ") + "</div>", (err) => {
2319 if (err) console.log(err);
2320 });
2321
2322 console.log("The workshop has been updated.");
2323
2324 }).catch(error => ErrorBag.add(error));
2325
2326};
2327
2328//Message Header
2329if (!WebsiteCooldowns.has("messageheader")) {
2330
2331 WebsiteCooldowns.add("messageheader");
2332 setTimeout(() => {WebsiteCooldowns.delete("messageheader")}, 300000);
2333
2334 var Message = "";
2335
2336 if (Setting.EventStatus == true) {
2337 Message = '<b class="messageheader">You can currently participate in the ' + Setting.EventName + ' event!</b>';
2338 }
2339 else if (Setting.Announcement !== "") {
2340 Message = '<b class="messageheader">' + Setting.Announcement + ' </b>';
2341 };
2342
2343 await fs.writeFile('public/messageheader.txt', Message, (err) => {
2344 if (err) console.log(err);
2345 });
2346
2347 console.log("The message header has been updated.");
2348
2349};
2350
2351//Random Songs
2352if (!WebsiteCooldowns.has("randomsongs")) {
2353
2354 WebsiteCooldowns.add("randomsongs");
2355
2356 const SongList = [];
2357 var Current = 0;
2358
2359 RandomSongs.forEach(song_info => {
2360 Current ++;
2361 SongList.push('<iframe width="560" height="315" src="' + song_info.replace("watch?v=", "embed/") + '" frameborder="0"></iframe>');
2362 });
2363
2364
2365 await fs.writeFile('public/random_songs.txt', SongList.join(" <br> "), (err) => {
2366 if (err) console.log(err);
2367 });
2368
2369 console.log("The random songs have been updated.");
2370
2371};
2372
2373//Server List
2374if (!WebsiteCooldowns.has("serverlist")) {
2375
2376 WebsiteCooldowns.add("serverlist");
2377 setTimeout(() => {WebsiteCooldowns.delete("serverlist")}, 600000);
2378
2379 var serverlist = peeky.serverData.filter( p => p.server_upgraded == true && p.GuildID ).array();
2380 var ServerList = [];
2381
2382 for (var data of serverlist) {
2383
2384 if (peeky.guilds.has(data.GuildID)) {
2385
2386 if (peeky.serverData.get(`${data.GuildID}`, "server_invite") !== "no_invite") {
2387 var ServerInfo = "<font size='2' color='lightgray'>" + peeky.guilds.get(data.GuildID).members.filter(m => !m.user.bot).size.toLocaleString('en') + " members</font>";
2388 } else {
2389 var ServerInfo = "<font size='2' color='pink'>No Invite</font>";
2390 };
2391
2392 ServerList.push("<a href='https://discordapp.com/invite/" + data.server_invite + "'> <div class='displayitem' id='" + data.GuildID + "' style='background-image: url(" + peeky.guilds.get(data.GuildID).iconURL + ")'> <b class='displayname'>" + function_RemoveTags(peeky.guilds.get(data.GuildID).name) + " <br> " + ServerInfo + " </b> </div> </a>");
2393
2394 };
2395
2396 };
2397
2398 await fs.writeFile('public/server_list.txt', ServerList.join(" "), (err) => {
2399 if (err) console.log(err);
2400 });
2401
2402 console.log("The server list has been updated.");
2403
2404};
2405
2406//Supporters
2407if (!WebsiteCooldowns.has("supporters")) {
2408
2409 WebsiteCooldowns.add("supporters");
2410 setTimeout(() => {WebsiteCooldowns.delete("supporters")}, 600000);
2411
2412 var SupporterList = [];
2413 peeky.guilds.get(SupportServer).members.filter(m => m.roles.has(SupporterRole)).forEach(m => {
2414 if (peeky.userData.has(m.user.id)) {
2415
2416 /*
2417 var TheBannerShown = DefaultBackground;
2418 TheBannerShown = function_GetBackground(m.user.id);
2419 */
2420
2421 var SupporterDate = new Date();
2422 if (peeky.userData.has(m.user.id, "SupporterSince")) {
2423 var SupporterDate = peeky.userData.get(m.user.id, "SupporterSince");
2424 };
2425
2426 SupporterList.push("<div class='displayitem' id='" + m.user.id + "' style='background-image: url(" + m.user.displayAvatarURL + ")'> <b class='displayname'>" + function_RemoveTags(m.user.username) + " <br> <font size='1' color='lightgray'> Supporter for " + function_TimeLeft(peeky.userData.get(m.user.id, "SupporterSince"), "days", null).toLocaleString('en') + " days" + ". </font> </b> </div>");
2427
2428 };
2429 });
2430
2431 if (SupporterList.length == 0) {
2432 SupporterList.push('<center><font size="4"> You can become a supporter in the store! </font></center>')
2433 };
2434
2435 await fs.writeFile('public/supporters.txt', SupporterList.join(" "), (err) => {
2436 if (err) console.log(err);
2437 });
2438
2439 console.log("The supporters list has been updated.");
2440
2441};
2442
2443//Server Log
2444if (!WebsiteCooldowns.has("serverlog")) {
2445
2446 WebsiteCooldowns.add("serverlog");
2447 setTimeout(() => {WebsiteCooldowns.delete("serverlog")}, 600000);
2448
2449 var serverloglist = peeky.serverData.filter( p => p.GuildID ).array();
2450 var ServerLogList = [];
2451
2452 serverloglist.forEach(data => {
2453
2454 if (peeky.guilds.has(data.GuildID)) {
2455
2456 if (ImmuneServers.includes(data.GuildID) || data.server_upgraded == true) {
2457 var ImmuneString = "Immune";
2458 } else {
2459 var ImmuneString = "Not Immune";
2460 };
2461
2462 ServerLogList.push("<div class='displayitem' style='background-image: url(" + peeky.guilds.get(data.GuildID).iconURL + ")'> <b class='displayname' value='" + data.GuildID + "'>" + function_RemoveTags(peeky.guilds.get(data.GuildID).name) + " <br> " + function_TimeLeft(peeky.serverData.get(data.GuildID, "lastSeen"), "days", InactiveTime) + " days left" + " <br> " + peeky.guilds.get(data.GuildID).members.filter(m => m.user.bot).size + " bots" + " <br> " + ImmuneString + " </b></div>");
2463
2464 };
2465
2466 });
2467
2468 await fs.writeFile('public/server_log.txt', ServerLogList.join(" "), (err) => {
2469 if (err) console.log(err);
2470 });
2471
2472 console.log("The server log has been updated.");
2473
2474};
2475
2476//News
2477if (!WebsiteCooldowns.has("news")) {
2478
2479 WebsiteCooldowns.add("news");
2480 setTimeout(() => {WebsiteCooldowns.delete("news")}, 600000);
2481
2482 var NewsList = [];
2483
2484 peeky.channels.get(AnnouncementsChannel).fetchMessages({ limit: 10 }).then(async (messages) => {
2485
2486 await messages.forEach(m => {
2487 var Header = m.content.split("\n")[0];
2488 var Body = m.content.split("\n").join(" ").replace(Header, "");
2489 var Image = [];
2490 var PrefixImage = "";
2491 var ImageLink = "https://cdn.glitch.com/dc816b2d-b8c8-4e70-bd44-28cadfd2342f%2Fpattern_fog.png?v=1576095415615";
2492
2493 if (m.attachments.size > 0) {
2494 ImageLink = m.attachments.array()[0].url;
2495 }
2496
2497 NewsList.push('<div class="newsitem" style="background-image: url(' + ImageLink + ')"> <div class="textbackground"> <b class="newsheader"> ' + function_RemoveFormatting(Header, "other", true) + ' </b> <br> <b class="newsauthor"> <font color="#7289DA">' + m.author.tag + '</font> @ <font color="#7289DA">' + function_DateFormat(m.createdAt) + '</font> </b> <b class="newsbody"> ' + function_ProperSlice(function_RemoveFormatting(Body, "other", false), 250) + ' </b> <a class="button" href="' + m.url + '">?</a> </div> </div>');
2498 });
2499
2500 await fs.writeFile('public/news.txt', NewsList.join(""), (err) => {
2501 if (err) console.log(err);
2502 });
2503
2504 }).catch(error => ErrorBag.add(error));
2505
2506 console.log("The news have been updated.");
2507
2508};
2509
2510//Staff
2511if (!WebsiteCooldowns.has("staff")) {
2512
2513 WebsiteCooldowns.add("staff");
2514 setTimeout(() => {WebsiteCooldowns.delete("staff")}, 600000);
2515
2516 var DevList = [];
2517 var ModList = [];
2518
2519 peeky.guilds.get(SupportServer).members.forEach(m => {
2520
2521 if (m.roles.has(StaffRole)) {
2522
2523 var CurrentContact = '<div class="container"> <img src=' + '"' + m.user.displayAvatarURL + '" width="200px" height="200px" class="stafficon"> <b class="description"> <font size="3"> ' + function_RemoveTags(m.displayName) + ' </font> <br> <font size="1" color="lightgray"> ' + function_RemoveTags(m.user.tag) + ' </font> </b> </div>';
2524
2525 if (m.roles.has("574255080069398543")) {
2526 DevList.push(CurrentContact);
2527 };
2528
2529 if (m.roles.has("574255771840282625")) {
2530 ModList.push(CurrentContact);
2531 };
2532
2533 };
2534
2535 });
2536
2537 if (ModList.length == 0) {
2538 ModList = ["There are currently no Moderators in the Support Server."];
2539 };
2540
2541 await fs.writeFile('public/staff.txt', '<font size="5" class="item_header">Developers of PEEKY</font> <br> <div class="inlinediv"> ' + DevList.join(" ") + ' </div> <font size="5" class="item_header">Moderators of the Support Server</font> <br> <div class="inlinediv"> ' + ModList.join(" ") + ' </div>', (err) => {
2542 if (err) console.log(err);
2543 });
2544
2545 console.log("The staff has been updated.");
2546
2547};
2548
2549//Random Review
2550if (!WebsiteCooldowns.has("randomreview")) {
2551
2552 WebsiteCooldowns.add("randomreview");
2553 setTimeout(() => {WebsiteCooldowns.delete("randomreview")}, 600000);
2554
2555 node_fetch(`https://ls.terminal.ink/api/v2/bots/${peeky.user.id}`, {
2556 method: 'GET'
2557 }).then(response => response.json()).then(async (data) => {
2558
2559 var FilteredReviews = data.data.reviews.filter(r => r.text.length >= Setting.MinReviewLength);
2560
2561 var Length = FilteredReviews.length;
2562 var RandomReview = Math.round(Math.random() * Length);
2563
2564 if (RandomReview >= Length) { RandomReview = 0 };
2565
2566 var DaysOld = Math.ceil((new Date() - peeky.user.createdAt) / 8.64e7) - 1;
2567 var ReviewDate = new Date(FilteredReviews[RandomReview].date);
2568 var ReviewFullDate = function_DateFormat(ReviewDate);
2569
2570 await fs.writeFile('public/randomreview.txt', "<font color='#7289DA' size='1'>Review with " + FilteredReviews[RandomReview].rating + "/5 Star rating from " + ReviewFullDate + ".</font>" + "<br>" + " <font color='white' size='3'>" + FilteredReviews[RandomReview].text + "</font> <br><br> <center><font color='#7289DA' size='1'>Your review must be atleast " + Setting.MinReviewLength + " characters long to show up.</font></center>", (err) => {
2571 if (err) console.log(err);
2572 });
2573
2574 }).catch(err => {
2575 ErrorBag.add(err);
2576 });
2577
2578 console.log("The featured review have been updated.");
2579
2580};
2581
2582//Stats
2583if (!WebsiteCooldowns.has("stats")) {
2584
2585 WebsiteCooldowns.add("stats");
2586 setTimeout(() => {WebsiteCooldowns.delete("stats")}, 600000);
2587
2588 await fs.writeFile('public/stats.txt', "<a class='botstats'><font color='#7289DA'>" + peeky.guilds.size + " / " + Setting.MaxServers + "</font> Servers</a> <br> <a class='botstats'><font color='#7289DA'>" + peeky.userData.count + "</font> Profiles</a> <br> <a class='botstats'><font color='#7289DA'>" + function_TimeLeft(peeky.user.createdAt, "days", null) + "</font> Days Old</a>", (err) => {
2589 if (err) console.log(err);
2590 });
2591
2592 console.log("The stats have been updated.");
2593
2594};
2595
2596//Bot Description
2597if (!WebsiteCooldowns.has("botdescription")) {
2598
2599 WebsiteCooldowns.add("botdescription");
2600
2601 await fs.writeFile('public/botdescription.txt', Setting.Description, (err) => {
2602 if (err) console.log(err);
2603 });
2604
2605 console.log("The bot description has been updated.");
2606
2607};
2608
2609});
2610
2611//MISC
2612peeky.on("guildCreate", async (guild) => {
2613
2614const keySF = `${guild.id}`;
2615
2616const embed = {"description": " I have been added to a server called **" + function_RemoveFormatting(guild.name, "other", true) + "** with **" + guild.members.filter(m => m.user.bot).size + " bots**.", "footer": { "text": guild.id }, "color": 8311585};
2617peeky.channels.get(ServerLogChannel).send({ embed });
2618
2619if (peeky.guilds.size > Setting.MaxServers || BannedUsers.includes(guild.owner.user.id)) {
2620
2621 await function_DirectMessage(guild.owner.user.id, "Something went wrong while joining your server, try again later.");
2622 guild.leave();
2623
2624} else {
2625
2626 function_ServerData(keySF);
2627
2628};
2629
2630});
2631
2632peeky.on("guildDelete", async (guild) => {
2633
2634const keySF = `${guild.id}`;
2635
2636const embed = {"description": " I have been removed from a server called **" + function_RemoveFormatting(guild.name, "other", true) + "**.", "footer": { "text": guild.id }, "color": 12854839};
2637peeky.channels.get(ServerLogChannel).send({ embed });
2638
2639});
2640
2641peeky.on("channelDelete", async (channel) => {
2642
2643const keyCF = `${channel.id}`;
2644
2645if (peeky.channelData.has(keyCF)) {
2646 console.log("I have wiped the settings of a channel because it got deleted.");
2647 peeky.channelData.delete(keyCF);
2648};
2649
2650});
2651
2652peeky.on("guildBanAdd", async (guild, user) => {
2653
2654const key = `${user.id}`;
2655
2656//Log Bans
2657if (peeky.userData.has(key)) {
2658
2659 if (peeky.userData.has(key, "Bans")) {
2660 peeky.userData.math(key, "+", 1, "Bans");
2661 } else {
2662 peeky.userData.set(key, 1, "Bans");
2663 };
2664
2665};
2666
2667});
2668//END
2669
2670//FUNCTIONS
2671
2672//MEMBER JOINED EVENTS
2673peeky.on('guildMemberAdd', async (member) => {
2674
2675const key = `${member.user.id}`;
2676const keySF = `${member.guild.id}`;
2677var Failed = false;
2678
2679if (member.user.id !== PeekyId && peeky.serverData.has(keySF)) {
2680
2681const VerificationLevels = [ "None", "Low", "Medium", "High", "Very High" ];
2682
2683//Server Message
2684if (peeky.serverData.get(keySF, "server_message_bonus") == true && !member.user.bot) {
2685
2686 function_DirectMessage(member.user.id, peeky.serverData.get(keySF, "server_message_bonus_setting").replace(GuildNameTag, function_RemoveFormatting(member.guild.name, "other", true)).replace(GuildSizeTag, member.guild.members.filter(m => !m.user.bot).size).replace(GuildOwnerTag, member.guild.owner.user.tag).replace(GuildVerificationTag, VerificationLevels[member.guild.verificationLevel]).replace(GuildAcronymTag, member.guild.nameAcronym));
2687
2688};
2689
2690//Suspicion Alert
2691if (peeky.serverData.get(keySF, "suspicion_alert_bonus") == true && !member.user.bot) {
2692
2693 var owner = member.guild.owner.user.id;
2694 var Suspicions = 0;
2695 var Reasons = [];
2696 const BanLimit = peeky.serverData.get(keySF, "suspicion_alert_bonus_setting");
2697
2698 //Account created less than 7 days ago
2699 if (new Date() - new Date(member.user.createdAt) <= 604800000 ) {
2700 Reasons.push("Account created less than 7 days ago.");
2701 };
2702
2703 //Account has alot of logged bans
2704 if (peeky.userData.has(key) && peeky.userData.get(key, "Bans") >= BanLimit) {
2705 Reasons.push("Banned more than " + peeky.userData.get(key, "Bans") + " times in other servers.");
2706 };
2707
2708 //Account is banned from using PEEKY
2709 if (BannedUsers.includes(member.user.id)) {
2710 Reasons.push("Banned from using PEEKY.");
2711 };
2712
2713 if (Reasons.length > 0) {
2714 function_DirectMessage(owner, "**Someone suspicious has joined " + function_RemoveFormatting(member.guild.name, "other", true) + "!**\nBe wary about this user but don't punish them just because you've got this message!\n\n**Suspect:** " + function_RemoveFormatting(member.user.tag, "other", true) + " (<@" + member.user.id + ">)\n**Reasons:** " + Reasons.join(" / ") + "\n");
2715
2716 console.log("The Suspicion Alert function has been triggered in " + member.guild.name + ".");
2717 function_UpdateAutowipe(keySF, "server");
2718 };
2719
2720};
2721
2722//Join Role
2723if (peeky.serverData.get(keySF, "join_role_bonus") == true) {
2724
2725 if (member.guild.me.hasPermission("MANAGE_ROLES")) {
2726
2727 var name = peeky.serverData.get(keySF, "join_role_bonus_setting");
2728 var Role = member.guild.roles.find(role => role.name == name);
2729
2730 if (Role) {
2731 member.addRole(Role.id, "Triggered by the Join Role function.").catch(error => ErrorBag.add(error));
2732
2733 console.log("The Join Role function has been triggered in " + member.guild.name + ".");
2734 function_UpdateAutowipe(keySF, "server");
2735 };
2736
2737 };
2738
2739};
2740
2741//Role Saver
2742if (peeky.serverData.get(keySF, "role_saver_bonus") == true) {
2743
2744 if (!member.user.bot && member.guild.me.hasPermission("MANAGE_ROLES")) {
2745
2746 if (peeky.serverData.has(keySF, "role_saver_bonus_array")) {
2747
2748 var SavedRoles = peeky.serverData.get(keySF, "role_saver_bonus_array");
2749
2750 SavedRoles.forEach(current => {
2751
2752 if (current[0] == member.user.id) {
2753
2754 const ValidRoles = [];
2755
2756 current[1].forEach(role => {
2757
2758 if (member.guild.roles.find(r => r.id == role)) {
2759 ValidRoles.push(role);
2760 };
2761
2762 });
2763
2764 if (ValidRoles.length > 0) {
2765
2766 member.setRoles(ValidRoles, "Triggered by the Role Saver function.").catch(error => ErrorBag.add(error));
2767
2768 console.log("The Role Saver function has been triggered in " + member.guild.name + ".");
2769 function_UpdateAutowipe(keySF, "server");
2770
2771 };
2772
2773 };
2774
2775 });
2776
2777 };
2778
2779 };
2780
2781};
2782
2783//Nickname Saver
2784if (peeky.serverData.get(keySF, "nick_saver_bonus") == true) {
2785
2786 if (member.guild.me.hasPermission("MANAGE_NICKNAMES")) {
2787
2788 if (peeky.serverData.has(keySF, "nick_saver_array")) {
2789
2790 var SavedNicks = peeky.serverData.get(keySF, "nick_saver_array");
2791
2792 SavedNicks.forEach(current => {
2793
2794 if (current[0] == member.user.id && current[1] !== null) {
2795
2796 member.setNickname(current[1], "Triggered by the Nickname Saver function.");
2797
2798 console.log("The Nickname Saver function has been triggered in " + member.guild.name + ".");
2799 function_UpdateAutowipe(keySF, "server");
2800
2801 };
2802
2803 });
2804 };
2805
2806 };
2807
2808};
2809
2810//Clear Nicknames
2811if (peeky.serverData.get(keySF, "clear_nicknames_bonus") == true) {
2812
2813 if (member.guild.me.hasPermission("MANAGE_NICKNAMES") && !member.user.bot) {
2814
2815 var Username = member.user.username.toLowerCase().toString();
2816 var NewNickname = Username.match(/[aábcčdďeéěfghiíjklmnňoópqrřsštuůúvwxyýzž0123465789 ]/g);
2817
2818 if (NewNickname !== null) {
2819 NewNickname = NewNickname.join("");
2820 };
2821
2822 if (Username !== NewNickname) {
2823
2824 var NotSaved = true;
2825 peeky.serverData.get(keySF, "nick_saver_array").forEach(current => {
2826
2827 if (current[0] == member.user.id && current[1] !== null) {
2828 NotSaved = false;
2829 };
2830
2831 });
2832
2833 if (NotSaved == true) {
2834
2835 if (NewNickname == null) {
2836 NewNickname = peeky.serverData.get(keySF, "clear_nicknames_bonus_setting") + " (" + Math.random().toString(36).substr(2, 6) + ")";
2837 } else {
2838 NewNickname = function_FixCapitalization(NewNickname);
2839 };
2840
2841 member.setNickname(NewNickname, "Triggered by the Clear Nicknames function.").catch(error => ErrorBag.add(error));
2842
2843 console.log("The Clear Nicknames function has been triggered in " + member.guild.name + ".");
2844 function_UpdateAutowipe(keySF, "server");
2845
2846 };
2847
2848 };
2849
2850 };
2851
2852};
2853
2854//Welcome Messages
2855if (peeky.serverData.get(keySF, "welcome_messages_bonus") == true) {
2856
2857 const guild = member.guild;
2858 var ProfileName = member.user.username;
2859 const name = peeky.serverData.get(keySF, "welcome_messages_bonus_setting");
2860 var Detected = false;
2861
2862 var channel = guild.channels.find(c=> c.name == name);
2863
2864 if (channel && channel.permissionsFor(peeky.user).has('SEND_MESSAGES' && 'ATTACH_FILES')) {
2865
2866 if (BlacklistedWebsites.some(word => function_RemoveFormatting(member.user.username.toLowerCase(), "other", false).includes(word))) {
2867 Detected = true;
2868 };
2869
2870 if (Detected == true) {
2871
2872 await member.guild.ban(member.id, "Triggered by the Welcome Messages function.").catch(error => {
2873 ErrorBag.add(error);
2874 var Failed = true;
2875 });
2876
2877 if (Failed == true) {
2878 member.send("**You have been automatically banned for having a possible website advertisment in your username.** \n Contact the server owner " + member.guild.owner.user.tag + " to get your ban revoked.").catch(error => ErrorBag.add(error));
2879 };
2880
2881 };
2882
2883 await channel.send("", await function_WelcomeMessagesEmbed(member, "join", Detected)).catch(error => ErrorBag.add(error));
2884
2885 console.log("The Welcome Messages function has been triggered in " + member.guild.name + ".");
2886 function_UpdateAutowipe(keySF, "server");
2887
2888 };
2889
2890};
2891
2892};
2893
2894});
2895
2896//MEMBER LEFT EVENTS
2897peeky.on("guildMemberRemove", async (member) => {
2898
2899const key = `${member.user.id}`;
2900const keySF = `${member.guild.id}`;
2901
2902if (member.user.id !== PeekyId && peeky.serverData.has(keySF)) {
2903
2904//Welcome Messages
2905if (peeky.serverData.get(keySF, "welcome_messages_bonus") == true) {
2906
2907 const guild = member.guild;
2908 var ProfileName = member.user.username;
2909 const name = peeky.serverData.get(keySF, "welcome_messages_bonus_setting");
2910 var Detected = false;
2911
2912 var channel = guild.channels.find(c=> c.name == name);
2913
2914 if (channel && channel.permissionsFor(peeky.user).has('SEND_MESSAGES' && 'ATTACH_FILES')) {
2915
2916 if (BlacklistedWebsites.some(word => function_RemoveFormatting(member.user.username.toLowerCase(), "other", false).includes(word))) {
2917 Detected = true;
2918 };
2919
2920 await channel.send("", await function_WelcomeMessagesEmbed(member, "leave", Detected)).catch(error => ErrorBag.add(error));
2921
2922 console.log("The Welcome Messages function has been triggered in " + member.guild.name + ".");
2923 function_UpdateAutowipe(keySF, "server");
2924
2925 };
2926
2927};
2928
2929};
2930});
2931
2932//GUILD MEMBER UPDATE EVENTS
2933peeky.on("guildMemberUpdate", async (oldMember, newMember) => {
2934
2935const key = `${newMember.user.id}`;
2936const keySF = `${newMember.guild.id}`;
2937const member = newMember;
2938
2939//FUNCTIONS
2940if (member.user.id !== PeekyId && peeky.serverData.has(keySF)) {
2941
2942//Role Saver System
2943if (peeky.serverData.get(keySF, "role_saver_bonus") == true) {
2944
2945 if (!member.user.bot && member.guild.me.hasPermission("MANAGE_ROLES")) {
2946
2947 if (peeky.serverData.has(keySF, "role_saver_bonus_array")) {
2948
2949 const SavedRoles = peeky.serverData.get(keySF, "role_saver_bonus_array");
2950 const Setting = peeky.serverData.get(keySF, "role_saver_bonus_setting");
2951 const MemberIndex = SavedRoles.findIndex(i => i[0] == member.user.id);
2952
2953 if (MemberIndex >= 0) {
2954 SavedRoles[MemberIndex][1] = member.roles.filter(r => r.name !== "@everyone" && !Setting.includes(r.name)).map(r => r.id);
2955 } else {
2956 SavedRoles.push([member.user.id, member.roles.filter(r => r.name !== "@everyone" && !Setting.includes(r.name)).map(r => r.id)]);
2957 };
2958
2959 };
2960
2961 };
2962
2963};
2964
2965//Nickname Saver System
2966if (peeky.serverData.get(keySF, "nick_saver_bonus") == true) {
2967
2968 if (member.guild.me.hasPermission("MANAGE_NICKNAMES")) {
2969
2970 if (peeky.serverData.has(keySF, "nick_saver_array")) {
2971
2972 var SavedNicks = peeky.serverData.get(keySF, "nick_saver_array");
2973 var MemberIndex = SavedNicks.findIndex(i => i[0] == member.user.id);
2974
2975 if (MemberIndex >= 0) {
2976 SavedNicks[MemberIndex][1] = member.nickname;
2977 } else {
2978 SavedNicks.push([member.user.id, member.nickname]);
2979 };
2980
2981 };
2982
2983 };
2984
2985};
2986
2987//Store Rewards System
2988if (keySF == SupportServer) {
2989
2990 var PurchaseComplete = false;
2991 var Failed = false;
2992 var Rewards = [];
2993 var Notes = [];
2994
2995 if (new Date() - new Date(member.joinedAt) > 5000) {
2996
2997 //Server Boost
2998 if (peeky.userData.has(key)) {
2999
3000 var HadRole = oldMember.roles.find(r => r.id == BoosterRole);
3001 var HasRole = newMember.roles.find(r => r.id == BoosterRole);
3002
3003 if (HadRole == null && HasRole) {
3004
3005 PurchaseComplete = true;
3006
3007 var PurchaseHeader = "**You have Server Boosted the [Support Server](https://peeky.glitch.me/server.html)!**";
3008
3009 Notes.push("Your reward expires once you stop boosting.");
3010
3011 };
3012
3013 };
3014
3015 //Supporter
3016 if (peeky.userData.has(key)) {
3017
3018 var HadRole = oldMember.roles.find(r => r.id == SupporterRole);
3019 var HasRole = newMember.roles.find(r => r.id == SupporterRole);
3020
3021 if (HadRole == null && HasRole) {
3022
3023 PurchaseComplete = true;
3024
3025 var PurchaseHeader = "**You have purchased Supporter from the [store](https://peeky.glitch.me/store.html)!**";
3026
3027 peeky.userData.set(key, new Date(), "SupporterLastPurchase");
3028 Notes.push("Your reward expires on **" + function_DateFormat(new Date().getTime() + (30 * DayMs)) + "**.");
3029
3030 if ( (peeky.userData.has(key, "SupporterSince") == false) || (peeky.userData.has(key, "SupporterSince") && (new Date(peeky.userData.get(key, "SupporterSince")) - new Date() > (MonthMs + (DayMs * 5)))) ) {
3031 peeky.userData.set(key, new Date(), "SupporterSince");
3032 };
3033
3034
3035 };
3036
3037 };
3038
3039 //Server Upgrade
3040 if (peeky.userData.has(key)) {
3041
3042 var HadRole = oldMember.roles.find(r => r.id == ServerUpgradeRole);
3043 var HasRole = newMember.roles.find(r => r.id == ServerUpgradeRole);
3044
3045 if (HadRole == null && HasRole) {
3046
3047 PurchaseComplete = true;
3048
3049 var PurchaseHeader = "**You have purchased Server Upgrade from the [store](https://peeky.glitch.me/store.html)!**";
3050
3051 };
3052
3053 };
3054
3055 //Profile Booster
3056 if (peeky.userData.has(key)) {
3057
3058 var HadRole = oldMember.roles.find(r => r.id == ProfileBoosterRole);
3059 var HasRole = newMember.roles.find(r => r.id == ProfileBoosterRole);
3060
3061 if (HadRole == null && HasRole) {
3062
3063 PurchaseComplete = true;
3064
3065 var PurchaseHeader = "**You have purchased Profile Booster from the [store](https://peeky.glitch.me/store.html)!**";
3066 Notes.push("Your reward expires on **" + function_DateFormat(new Date().getTime() + (1 * DayMs)) + "**.");
3067
3068 peeky.userData.set(key, new Date(), "BoosterStart");
3069
3070 };
3071
3072 };
3073
3074 //Chests
3075 if (newMember.roles.has(RedeemRoleChests)) {
3076
3077 newMember.removeRole(RedeemRoleChests).catch(error => {ErrorBag.add(error); Failed = true});
3078
3079 if (Failed !== true) {
3080
3081 PurchaseComplete = true;
3082
3083 var PurchaseHeader = "**You have purchased Additional Chests from the [store](https://peeky.glitch.me/store.html)!**";
3084
3085 peeky.userData.math(key, "+", 10, "Chests");
3086
3087 };
3088
3089 };
3090
3091 //Complete Purchase
3092 if (PurchaseComplete == true) {
3093
3094 if (peeky.userData.get(key, "ContributorBadge") == false) {
3095 peeky.userData.set(key, true, "ContributorBadge");
3096 Rewards.push("The **Contributor** badge");
3097 };
3098
3099 if (Rewards.length == 0) {
3100 Rewards = ["None"];
3101 };
3102
3103 if (Notes.length == 0) {
3104 Notes = ["None"];
3105 };
3106
3107 const embed = {
3108 "description":
3109 "" + PurchaseHeader
3110 + "\n"
3111 + "Thank you very much!"
3112 + "\n\n"
3113 + "**Bonus rewards:**"
3114 + "\n"
3115 + "" + Rewards.join("\n")
3116 + "\n\n"
3117 + "**Notes:**"
3118 + "\n"
3119 + "" + Notes.join("\n"),
3120
3121 "color": EmbedColor
3122 };
3123
3124 function_DirectMessage(newMember.user.id, { embed });
3125
3126 };
3127
3128 }
3129
3130};
3131
3132};
3133});
3134
3135//VOICE STATE UPDATE EVENTS
3136peeky.on("voiceStateUpdate", async (oldMember, newMember) => {
3137
3138 const member = newMember;
3139
3140 if (oldMember.voiceChannel && !newMember.voiceChannel) {
3141
3142 var ChannelMap = oldMember.voiceChannel.members.map(member => member.id);
3143
3144 if (ChannelMap.length == 1 && ChannelMap.includes(PeekyId)) {
3145 oldMember.voiceChannel.leave();
3146 };
3147 };
3148
3149});
3150
3151//CHANNEL CREATE EVENTS
3152peeky.on("channelCreate", async (channel) => {
3153
3154if (channel.guild) {
3155
3156const keySF = `${channel.guild.id}`;
3157const keyCF = `${channel.id}`;
3158
3159function_ChannelData(keyCF, channel.id);
3160
3161//FUNCTIONS
3162
3163//Dash Remover
3164if (peeky.serverData.has(keySF)) {
3165
3166 if (channel.guild.me.hasPermission('MANAGE_CHANNELS')) {
3167
3168 if (peeky.serverData.get(keySF, "dash_remover_bonus") == true && true == false) {
3169
3170 var FinalName = channel.name.replace(/[-]/g, "\u2005");
3171
3172 if (TextChannels.includes(channel.type) && channel.name !== FinalName) {
3173
3174 await channel.setName(FinalName, "Triggered by the Dash Remover function.").catch(error => ErrorBag.add(error));
3175 console.log("The Dash Remover function has been triggered in " + channel.guild.name + ".");
3176
3177 function_UpdateAutowipe(keySF, "server");
3178
3179 };
3180
3181 };
3182
3183 };
3184
3185};
3186
3187};
3188
3189});
3190
3191//CHANNEL UPDATE EVENTS
3192peeky.on("channelUpdate", async (oldChannel, newChannel) => {
3193
3194const keySF = `${newChannel.guild.id}`;
3195const channel = newChannel;
3196
3197//FUNCTIONS
3198
3199//Dash Remover
3200if (peeky.serverData.has(keySF)) {
3201
3202 if (channel.guild.me.hasPermission('MANAGE_CHANNELS')) {
3203
3204 if (peeky.serverData.get(keySF, "dash_remover_bonus") == true && true == false) {
3205
3206 var FinalName = channel.name.replace(/[-]/g, "\u2005");
3207
3208 if (TextChannels.includes(channel.type) && channel.name !== FinalName) {
3209
3210 await channel.setName(FinalName, "Triggered by the Dash Remover function.").catch(error => ErrorBag.add(error));
3211 console.log("The Dash Remover function has been triggered in " + channel.guild.name + ".");
3212
3213 function_UpdateAutowipe(keySF, "server");
3214
3215 };
3216
3217 };
3218
3219 };
3220
3221};
3222
3223});
3224
3225//PRESENCE UPDATE EVENTS
3226peeky.on("presenceUpdate", async (oldMember, newMember) => {
3227
3228const key = `${newMember.user.id}`;
3229const keySF = `${newMember.guild.id}`;
3230
3231//FUNCTIONS
3232if (peeky.serverData.has(keySF)) {
3233
3234const member = newMember;
3235
3236//Streamer Role
3237if (peeky.serverData.get(keySF, "streamer_role_bonus") == true) {
3238
3239 if (member.guild.me.hasPermission('MANAGE_ROLES')) {
3240
3241 if (!member.user.bot) {
3242
3243 var HasRole = member.roles.find(r => r.name == peeky.serverData.get(keySF, "streamer_role_bonus_setting"));
3244 var GuildRole = member.guild.roles.find(r => r.name == peeky.serverData.get(keySF, "streamer_role_bonus_setting"));
3245
3246 if (member.presence.game && member.presence.game.type == 1) {
3247
3248 if (!HasRole && !CurrentlyStreaming.has(member.user.id + member.guild.id + "SR")) {
3249
3250 member.addRole(GuildRole.id).catch(error => ErrorBag.add(error));
3251
3252 CurrentlyStreaming.add(member.user.id + member.guild.id + "SR");
3253 setTimeout(() => {CurrentlyStreaming.delete(member.user.id + member.guild.id + "SR")}, 1800000);
3254
3255 console.log("The Streamer Role function has been triggered in " + member.guild.name + ".");
3256 function_UpdateAutowipe(keySF, "server");
3257
3258 };
3259
3260 } else {
3261
3262 if (HasRole) {
3263 member.removeRole(GuildRole.id).catch(error => ErrorBag.add(error));
3264 };
3265
3266 };
3267
3268 };
3269
3270 };
3271
3272};
3273
3274//Stream Announcements
3275if (peeky.serverData.get(keySF, "stream_announcements_bonus") == true) {
3276
3277 if (!member.user.bot && !CurrentlyStreaming.has(member.user.id + member.guild.id + "SA2")) {
3278
3279 CurrentlyStreaming.add(member.user.id + member.guild.id + "SA2");
3280 setTimeout(() => {CurrentlyStreaming.delete(member.user.id + member.guild.id + "SA2")}, 300000);
3281
3282 var Channel = member.guild.channels.find(c => c.name == peeky.serverData.get(keySF, "stream_announcements_bonus_setting"));
3283
3284 if (Channel && Channel.permissionsFor(peeky.user).has('SEND_MESSAGES')) {
3285
3286 if (member.presence.game !== null && member.presence.game.type == 1) {
3287
3288 if (oldMember.presence.game !== null && oldMember.presence.game.type == 1) {
3289 var AlreadyStreaming = true;
3290 };
3291
3292 if (AlreadyStreaming !== true) {
3293
3294 var SavedMember = member;
3295
3296 const embed = function_StreamAnnouncements(member);
3297 Channel.send({ embed }).catch(error => ErrorBag.add(error));
3298
3299 console.log("The Stream Announcements function has been triggered in " + member.guild.name + ".");
3300 function_UpdateAutowipe(keySF, "server");
3301
3302 };
3303
3304 };
3305
3306 };
3307
3308 };
3309
3310};
3311
3312//Game Roles
3313if (peeky.serverData.get(keySF, "game_roles_bonus") == true) {
3314
3315 if (member.guild.me.hasPermission('MANAGE_ROLES')) {
3316
3317 if (!member.user.bot) {
3318
3319 peeky.serverData.get(keySF, "game_roles_bonus_setting").forEach(GameName => {
3320
3321 var GameName = GameName.toLowerCase();
3322 var HasRole = member.roles.find(r => r.name.toLowerCase() == GameName);
3323 var Role = member.guild.roles.find(r => r.name.toLowerCase() == GameName);
3324
3325 if (Role) {
3326
3327 if (member.presence.game !== null && member.presence.game.type == 0 && member.presence.game.name.toLowerCase() == GameName) {
3328
3329 if (!HasRole && !RoleCooldown.has(member.user.id + member.guild.id)) {
3330 member.addRole(Role.id, "Triggered by the Game Roles function.").catch(error => ErrorBag.add(error));
3331
3332 console.log("The Game Roles function has been triggered in " + member.guild.name + ".");
3333 function_UpdateAutowipe(keySF, "server");
3334 };
3335
3336 RoleCooldown.add(member.user.id + member.guild.id);
3337 setTimeout(() => {RoleCooldown.delete(member.user.id + member.guild.id)}, RoleCooldownMS);
3338
3339 } else {
3340
3341 if (HasRole) {
3342 member.removeRole(Role.id, "Triggered by the Game Roles function.").catch(error => ErrorBag.add(error));
3343 };
3344
3345 };
3346
3347 } else {
3348
3349 if (!RoleCooldown.has(member.guild.id)) {
3350
3351 member.guild.createRole({
3352 name: GameName
3353 }, "Triggered by the Game Roles function.").catch(error => ErrorBag.add(error));
3354
3355 RoleCooldown.add(member.guild.id);
3356 setTimeout(() => {RoleCooldown.delete(member.guild.id)}, RoleCooldownMS);
3357
3358 };
3359
3360 };
3361
3362
3363 });
3364
3365 };
3366
3367 };
3368
3369};
3370
3371};
3372});
3373
3374//REACTION ADD EVENTS
3375peeky.on('messageReactionAdd', async (reaction, user) => {
3376
3377const key = `${user.id}`;
3378const keyCF = `${reaction.message.channel.id}`;
3379const keySF = `${reaction.message.guild.id}`;
3380const Language = peeky.serverData.get(keySF, "language");
3381
3382//Poller Badge
3383if (!user.bot && reaction.message.channel.id == AnnouncementsChannel && reaction.message.content.toLowerCase().includes("**voting time**")) {
3384 if (peeky.userData.has(key) && peeky.userData.get(key, "PollerBadge") == false) {
3385 peeky.userData.set(key, true, "PollerBadge");
3386 };
3387};
3388
3389//Workshop Response
3390if (reaction.message.channel.id == WorkshopChannel && user.id == OwnerId) {
3391
3392 if (reaction.emoji.name == "?") {
3393
3394 const embed = {"description": SuccessIcon + " Your submission in the Workshop has been accepted and will be added shortly!", "color": EmbedColor};
3395 function_DirectMessage(reaction.message.author.id, { embed });
3396
3397 function_DirectMessage(OwnerId, '[NoBackground, ' + reaction.message.content.split('\n')[2].replace("Price: ", "") + ', "' + function_FixCapitalization(reaction.message.content.split("\n")[0].replace("Name: ", "")) + '", "' + reaction.message.content.split("\n")[1].replace("Credit: ", "") + '", ' + undefined + ', ' + Date.now() + ']');
3398
3399 };
3400
3401};
3402
3403//Karma System
3404if (!user.bot && KarmaImages.findIndex(i => i[0] == reaction.message.id) >= 0) {
3405
3406 var ReactionEmoji1 = reaction.message.guild.emojis.find(c=> c.name == peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_upvote");
3407 var ReactionEmoji2 = reaction.message.guild.emojis.find(c=> c.name == peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_downvote");
3408 var key2 = reaction.message.author.id;
3409
3410 if ((ReactionEmoji1 && reaction.emoji.name == ReactionEmoji1.name) || (reaction.emoji.id == DefaultUpvote)) {
3411
3412 var Index = KarmaImages.findIndex(i => i[0] == reaction.message.id);
3413
3414 if (Index >= 0) {
3415
3416 var Index2 = KarmaImages[Index][1].indexOf(user.id);
3417
3418 if (Index2 == -1) {
3419
3420 KarmaImages[Index][1].push(user.id);
3421
3422 if (peeky.userData.has(key2)) {
3423
3424 peeky.userData.math(key2, "+", 1, "Karma");
3425
3426 if (peeky.userData.get(key2, "Karma") == 50) {
3427
3428 if (peeky.userData.has(key2) && peeky.userData.get(key2, "GoodBadge") == false) {
3429 peeky.userData.set(key2, true, "GoodBadge");
3430 peeky.userData.set(key2, false, "EvilBadge");
3431 };
3432
3433 };
3434
3435 };
3436
3437 };
3438
3439 };
3440
3441 };
3442
3443 if ((ReactionEmoji2 && reaction.emoji.name == ReactionEmoji2.name) || (reaction.emoji.id == DefaultDownvote)) {
3444
3445 var Index = KarmaImages.findIndex(i => i[0] == reaction.message.id);
3446
3447 if (Index >= 0) {
3448
3449 var Index2 = KarmaImages[Index][1].indexOf(user.id);
3450
3451 if (Index2 == -1) {
3452
3453 KarmaImages[Index][1].push(user.id);
3454
3455 if (peeky.userData.has(key2)) {
3456
3457 peeky.userData.math(key2, "-", 1, "Karma");
3458
3459 if (peeky.userData.get(key2, "Karma") == -50) {
3460
3461 if (peeky.userData.has(key2) && peeky.userData.get(key2, "EvilBadge") == false) {
3462 peeky.userData.set(key2, false, "GoodBadge");
3463 peeky.userData.set(key2, true, "EvilBadge");
3464 };
3465
3466 };
3467
3468 };
3469
3470 };
3471
3472 };
3473
3474 };
3475
3476};
3477
3478if (peeky.userData.has(key) && peeky.channelData.has(keyCF) && peeky.serverData.has(keySF) && reaction.message.channel.permissionsFor(peeky.user).has('SEND_MESSAGES')) {
3479
3480//MISCELLAENOUS
3481
3482//Overview Pages
3483if (peeky.userData.has(key, "OverviewID") && reaction.message.id == peeky.userData.get(key, "OverviewID")) {
3484
3485 if (reaction.message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
3486 reaction.remove(user.id).catch(error => ErrorBag.add(error));
3487 };
3488
3489 if (!CommandCooldown.has("overview" + user.id)) {
3490
3491 CommandCooldown.add("overview" + user.id);
3492 setTimeout(() => {CommandCooldown.delete("overview" + user.id)}, 2500);
3493
3494 var EnabledAmount = 0;
3495 var ServerAmount = 0;
3496 var ChannelAmount = 0;
3497 const Functions = [];
3498
3499 var ServerMessage = peeky.serverData.get(keySF, "server_message_bonus_setting");
3500
3501 if (peeky.channelData.get(keyCF, "automatic_reactions_bonus") == true) { var AR = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var AR = DisabledIcon};
3502 if (peeky.serverData.get(keySF, "welcome_messages_bonus") == true) { var WM = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var WM = DisabledIcon};
3503 if (peeky.serverData.get(keySF, "member_counter_bonus") == true) { var MC = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var MC = DisabledIcon};
3504 if (peeky.serverData.get(keySF, "clear_nicknames_bonus") == true) { var CN = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var CN = DisabledIcon};
3505 if (peeky.serverData.get(keySF, "donor_wall_bonus") == true) { var CW = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var CW = DisabledIcon};
3506 if (peeky.serverData.get(keySF, "ticket_system_bonus") == true) { var ST = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var ST = DisabledIcon};
3507 if (peeky.serverData.get(keySF, "suspicion_alert_bonus") == true) { var SA = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var SA = DisabledIcon};
3508 if (peeky.serverData.get(keySF, "flood_protection_bonus") == true) { var FP = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var FP = DisabledIcon};
3509 if (peeky.serverData.get(keySF, "event_countdown_bonus") == true) { var EC = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var EC = DisabledIcon};
3510 if (peeky.serverData.get(keySF, "server_message_bonus") == true) { var SM = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var SM = DisabledIcon};
3511 if (peeky.serverData.get(keySF, "dash_remover_bonus") == true) { var DR = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var DR = DisabledIcon};
3512 if (peeky.serverData.get(keySF, "vote_kick_bonus") == true) { var VT = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var VT = DisabledIcon};
3513 if (peeky.serverData.get(keySF, "join_role_bonus") == true) { var JR = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var JR = DisabledIcon};
3514 if (peeky.serverData.get(keySF, "game_roles_bonus") == true) { var GR = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var GR = DisabledIcon};
3515 if (peeky.serverData.get(keySF, "role_saver_bonus") == true) { var RS = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var RS = DisabledIcon};
3516 if (peeky.serverData.get(keySF, "nick_saver_bonus") == true) { var NS = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var NS = DisabledIcon};
3517 if (peeky.serverData.get(keySF, "streamer_role_bonus") == true) { var SR = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var SR = DisabledIcon};
3518 if (peeky.serverData.get(keySF, "reddit_posts_bonus") == true) { var RP = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var RP = DisabledIcon};
3519 if (peeky.serverData.get(keySF, "stream_announcements_bonus") == true) { var SA2 = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var SA2 = DisabledIcon};
3520 if (peeky.serverData.get(keySF, "server_age_bonus") == true) { var SA3 = EnabledIcon; EnabledAmount ++; ServerAmount ++; } else { var SA3 = DisabledIcon};
3521 if (peeky.serverData.get(keySF, "spoiler_only_bonus") == true) { var SL = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var SL = DisabledIcon};
3522 if (peeky.serverData.get(keySF, "reaction_roles_bonus") == true) { var RR = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var RR = DisabledIcon};
3523 if (peeky.channelData.get(keyCF, "message_log_bonus") == true) { var ML = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var ML = DisabledIcon};
3524 if (peeky.channelData.get(keyCF, "image_only_bonus") == true) { var IO = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var IO = DisabledIcon};
3525 if (peeky.channelData.get(keyCF, "banned_words_bonus") == true) { var BW = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var BW = DisabledIcon};
3526 if (peeky.channelData.get(keyCF, "safe_chat_bonus") == true) { var SC = EnabledIcon; EnabledAmount ++; ChannelAmount ++; } else { var SC = DisabledIcon};
3527
3528 var BWArray = peeky.serverData.get(keySF, "banned_words_bonus_setting");
3529 if (BWArray.length < 1) { BWArray = "None"; } else { BWArray = BWArray.join("` `"); };
3530
3531 var RRArray = peeky.serverData.get(keySF, "reaction_roles_bonus_setting");
3532 if (RRArray.length < 1) { RRArray = "None"; } else { "@" + RRArray.join("` `@"); };
3533
3534 var GRArray = peeky.serverData.get(keySF, "game_roles_bonus_setting");
3535 if (GRArray.length < 1) { GRArray = "None"; } else { GRArray = "@" + GRArray.join("` `@"); };
3536
3537 var RSArray = peeky.serverData.get(keySF, "role_saver_bonus_setting");
3538 if (RSArray.length < 1) { RSArray = "None"; } else { RSArray = "@" + RSArray.join("` `@"); };
3539
3540 var GivenMinutes = peeky.serverData.get(keySF, "spoiler_lock_bonus_setting");
3541 if (GivenMinutes == 0) {GivenMinutes = "Never"} else {GivenMinutes = GivenMinutes + " minutes"};
3542
3543 if (reaction.emoji.name == "1️⃣") {
3544
3545 const newEmbed = new Discord.RichEmbed({
3546 description: "**Prefix** " + SettingsIcon + "\n" + "`" + peeky.serverData.get(keySF, "prefix") + "`" + "\n\n" +
3547 "**Language** " + SettingsIcon + "\n" + "`" + Languages[Language] + "`" + "\n\n" +
3548 "**Mute Role** " + SettingsIcon + "\n" + "`@" + peeky.serverData.get(keySF, "muted_role") + "`" + "\n\n" +
3549 "**Highlighted Channel** " + SettingsIcon + "\n" + "`#" + peeky.serverData.get(keySF, "highlighted_channel") + "`" + "\n\n" +
3550 "**Function Notifications** " + SettingsIcon + "\n" + "`" + peeky.serverData.get(keySF, "function_notifications").toString().replace("true", "Enabled").replace("false", "Disabled") + "`" + "\n\n" +
3551 "**Level Notifications** " + SettingsIcon + "\n" + "`" + peeky.serverData.get(keySF, "level_notifications").toString().replace("true", "Enabled").replace("false", "Disabled") + "`" + "\n\n" +
3552 "**Server State** " + SettingsIcon + "\n" + "`" + peeky.serverData.get(keySF, "server_upgraded").toString().replace("true", "Upgraded").replace("false", "Not Upgraded") + "`",
3553 color: EmbedColor,
3554 image: { "url": "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Foverview_embed.png" }
3555 });
3556
3557 reaction.message.edit("**Server Settings** `1/1`", newEmbed).catch(error => ErrorBag.add(error));
3558
3559 } else
3560 if (reaction.emoji.name == "2️⃣") {
3561
3562 const newEmbed = new Discord.RichEmbed({
3563 description: "**Welcome Messages** " + WM + "\n" + "`#" + peeky.serverData.get(keySF, "welcome_messages_bonus_setting") + "`" + "\n\n" +
3564 "**Member Counter** " + MC + "\n" + "`" + peeky.serverData.get(keySF, "member_counter_bonus_setting") + "`" + "\n\n" +
3565 "**Server Age** " + SA3 + "\n" + "No setting" + "\n\n" +
3566 "**Ticket System** " + ST + "\n" + "`@" + peeky.serverData.get(keySF, "ticket_system_bonus_setting") + "`" + "\n\n" +
3567 "**Classification Wall** " + CW + "\n" + "`@" + peeky.serverData.get(keySF, "donor_wall_bonus_setting") + "` `#" + peeky.serverData.get(keySF, "donor_wall_bonus_channel") + "`" + "\n\n" +
3568 "**Flood Protection** " + FP + "\n" + "`" + peeky.serverData.get(keySF, "flood_protection_bonus_setting") + " strikes`" + "\n\n" +
3569 "**Spoiler Lock** " + SL + "\n" + "`" + GivenMinutes + "`" + "\n\n" +
3570 "**Vote Kick** " + VT + "\n" + "`" + peeky.serverData.get(keySF, "vote_kick_bonus_setting") + " votes`" + "\n\n" +
3571 "**Role Saver** " + RS + "\n" + "`" + RSArray + "`" + "\n\n" +
3572 "**Nickname Saver** " + NS + "\n" + "No Setting.",
3573 color: EmbedColor,
3574 image: { "url": "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Foverview_embed.png" }
3575 });
3576
3577 reaction.message.edit("**Server Functions** `1/3`", newEmbed).catch(error => ErrorBag.add(error));
3578
3579 } else
3580 if (reaction.emoji.name == "3️⃣") {
3581
3582 const newEmbed = new Discord.RichEmbed({
3583 description: "**Event Countdown** " + EC + "\n" + "`" + peeky.serverData.get(keySF, "event_countdown_bonus_setting") + "`" + "\n\n" +
3584 "**Reddit Posts** " + RP + "\n" + "`r/" + peeky.serverData.get(keySF, "reddit_posts_bonus_setting") + "`" + "\n\n" +
3585 "**Clear Nicknames** " + CN + "\n" + "`" + peeky.serverData.get(keySF, "clear_nicknames_bonus_setting") + "`" + "\n\n" +
3586 "**Reaction Roles** " + RR + "\n" + "`" + RRArray + "`" + "\n\n" +
3587 "**Server Message** " + SM + "\n" + "`" + function_RemoveFormatting(ServerMessage, "sm", true) + "`" + "\n\n" +
3588 "**Dash Remover (Temporarily Disabled)** " + DR + "\n" + "No setting" + "\n\n" +
3589 "**Game Roles** " + GR + "\n" + "`" + GRArray + "`" + "\n\n" +
3590 "**Join Role** " + JR + "\n" + "`@" + peeky.serverData.get(keySF, "join_role_bonus_setting") + "`" + "\n\n" +
3591 "**Stream Announcements** " + SA2 + "\n" + "`#" + peeky.serverData.get(keySF, "stream_announcements_bonus_setting") + "`" + "\n\n" +
3592 "**Streamer Role** " + SR + "\n" + "`@" + peeky.serverData.get(keySF, "streamer_role_bonus_setting") + "`",
3593 color: EmbedColor,
3594 image: { "url": "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Foverview_embed.png" }
3595 });
3596
3597 reaction.message.edit("**Server Functions** `2/3`", newEmbed).catch(error => ErrorBag.add(error));
3598
3599 } else
3600 if (reaction.emoji.name == "4️⃣") {
3601
3602 const newEmbed = new Discord.RichEmbed({
3603 description: "**Suspicion Alert** " + SA + "\n" + "`" + peeky.serverData.get(keySF, "suspicion_alert_bonus_setting") + " bans`",
3604 color: EmbedColor,
3605 image: { "url": "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Foverview_embed.png" }
3606 });
3607
3608 reaction.message.edit("**Server Functions** `3/3`", newEmbed).catch(error => ErrorBag.add(error));
3609
3610 } else
3611 if (reaction.emoji.name == "5️⃣") {
3612
3613 const newEmbed = new Discord.RichEmbed({
3614 description: "**Automatic Reactions** " + AR + "\n" + "`:" + peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_upvote:` `:" + peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_downvote:`" + "\n\n" +
3615 "**Message Log** " + ML + "\n" + "`#" + peeky.serverData.get(keySF, "message_log_bonus_setting") + "`" + "\n\n" +
3616 "**Safe Chat** " + SC + "\n" + "No setting." + "\n\n" +
3617 "**Images Only** " + IO + "\n" + "No setting." + "\n\n" +
3618 "**Banned Words** " + BW + "\n" + "`" + BWArray + "`",
3619 color: EmbedColor,
3620 image: { "url": "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Foverview_embed.png" }
3621 });
3622
3623 reaction.message.edit("**Channel Functions** `1/1`", newEmbed).catch(error => ErrorBag.add(error));
3624
3625 } else
3626 if (reaction.emoji.name == "??" && reaction.message.member.permissions.has("MANAGE_GUILD")) {
3627 peeky.serverData.set(keySF, 0, "language");
3628 } else
3629 if (reaction.emoji.name == "??" && reaction.message.member.permissions.has("MANAGE_GUILD")) {
3630 peeky.serverData.set(keySF, 1, "language");
3631 };
3632
3633 };
3634
3635};
3636
3637//Language Pages
3638if (peeky.userData.has(key, "LanguageID") && reaction.message.id == peeky.userData.get(key, "LanguageID")) {
3639
3640 if (reaction.message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
3641 reaction.remove(user.id).catch(error => ErrorBag.add(error));
3642 };
3643
3644 if (!CommandCooldown.has("languages" + user.id)) {
3645
3646 CommandCooldown.add("languages" + user.id);
3647 setTimeout(() => {CommandCooldown.delete("languages" + user.id)}, 2500);
3648
3649 if (reaction.emoji.name == "??") {
3650 peeky.serverData.set(keySF, 0, "language");
3651
3652 const newEmbed = new Discord.RichEmbed({
3653 description: "**Languages**" + "\n\n" + "The server language has been set to **English**.",
3654 color: EmbedColor
3655 });
3656
3657 reaction.message.edit("", newEmbed).catch(error => ErrorBag.add(error));
3658 } else
3659 if (reaction.emoji.name == "??") {
3660 peeky.serverData.set(keySF, 1, "language");
3661
3662 const newEmbed = new Discord.RichEmbed({
3663 description: "**Languages**" + "\n\n" + "Jazyk serveru byl nastaven na **Češtinu**.",
3664 color: EmbedColor
3665 });
3666
3667 reaction.message.edit("", newEmbed).catch(error => ErrorBag.add(error));
3668 };
3669
3670 };
3671
3672};
3673
3674//FUNCTIONS
3675
3676//Vote Kick
3677if (peeky.serverData.get(keySF, "vote_kick_bonus") == true) {
3678
3679 if (reaction.emoji.name == "?") {
3680
3681 var MemberExists = reaction.message.guild.members.find(m => m.id == reaction.message.author.id);
3682
3683 if (MemberExists && !MemberExists.user.bot && !reaction.message.member.permissions.has("KICK_MEMBERS")) {
3684
3685 if (reaction.count >= peeky.serverData.get(keySF, "vote_kick_bonus_setting") && MemberExists.user.id !== PeekyId && reaction.message.guild.me.hasPermission("KICK_MEMBERS") && reaction.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
3686
3687 await reaction.message.member.send("You have been vote kicked from **" + function_RemoveFormatting(reaction.message.guild.name, "other", true) + "**.").catch(error => ErrorBag.add(error));
3688
3689 reaction.message.guild.members.get(reaction.message.member.user.id).kick("Triggered by the Vote Kick function.").catch(error => ErrorBag.add(error));
3690
3691 reaction.message.clearReactions().catch(error => ErrorBag.add(error));
3692
3693 if (peeky.serverData.get(keySF, "function_notifications") == true) {
3694
3695
3696 var TranslatedMessages = [InfoIcon + " **X001** has been vote kicked with **X002 votes**.", InfoIcon + " **X** byl vyhlasován ze serveru se **X002 hlasy**."];
3697 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(reaction.message.member.displayName, "other", true)).replace("X002", peeky.serverData.get(keySF, "vote_kick_bonus_setting")), "color": EmbedColor};
3698 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3699
3700 };
3701
3702 console.log("The Vote Kick function has been triggered in " + reaction.message.guild.name + ".");
3703 function_UpdateAutowipe(keySF, "server");
3704
3705 } else if (reaction.count == 1) {
3706
3707 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(reaction.message.guild.id + "VK")) {
3708
3709 ResponseCooldowns.add(reaction.message.guild.id + "VK");
3710 setTimeout(() => {ResponseCooldowns.delete(reaction.message.guild.id + "VK")}, ResponseCooldownMS);
3711
3712 var TranslatedMessages = [InfoIcon + " **X001** has started a vote kick against **X002**.", InfoIcon + " **X001** začal hlasovat o vyhození **X002**."];
3713 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(user.username, "other", true)).replace("X002", function_RemoveFormatting(reaction.message.member.displayName, "other", true)), "color": EmbedColor};
3714 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3715
3716 };
3717
3718 };
3719
3720 } else {
3721 var TranslatedMessages = [ErrorIcon + " You cannot start a vote kick against that user, **X001**.", ErrorIcon + " Tohoto uživatele nelze vyhlasovat ze serveru, **X001**."];
3722 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(user.username, "other", true)).replace("X002", ""), "color": EmbedColor};
3723 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3724
3725 reaction.message.clearReactions().catch(error => ErrorBag.add(error));
3726 };
3727
3728 };
3729
3730};
3731
3732//Ticket System
3733if (peeky.serverData.get(keySF, "ticket_system_bonus") == true) {
3734
3735 if (reaction.emoji.name == "?️") {
3736
3737 if (!user.bot & reaction.message.id == peeky.serverData.get(keySF, "ticket_system_bonus_id")) {
3738
3739 if (reaction.message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
3740 reaction.remove(user.id).catch(error => ErrorBag.add(error));
3741 };
3742
3743 if (reaction.message.guild.me.hasPermission("MANAGE_CHANNELS") && !TicketSystemCooldown.has(user.id)) {
3744
3745 TicketSystemCooldown.add(user.id);
3746 setTimeout(() => {TicketSystemCooldown.delete(user.id)}, 300000);
3747
3748 const role = reaction.message.guild.roles.find(r => r.name == peeky.serverData.get(keySF, "ticket_system_bonus_setting"));
3749 const category = reaction.message.guild.channels.find(c => c.name == "Tickets" && c.type == "category");
3750 const owner = reaction.message.guild.owner.user;
3751 const TicketID = Math.random().toString(36).substr(2, 6);
3752
3753 var TranslatedMessages = ["**X001 has created a ticket**" + "\n" + "Staff may close the ticket once the issue has been resolved.", "**X001 potřebuje pomoct**" + "\n" + "Jakmile se tento problém vyřeší, personál může tento lístek uzavřít."];
3754 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(user.username, "other", true)), "color": EmbedColor};
3755
3756 reaction.message.guild.createChannel("Ticket_" + TicketID, { type: 'text', reason: "Channel created by @" + user.tag + " through a function." }).then(async function (channel) {
3757 if (category && category.permissionsFor(peeky.user).has('VIEW_CHANNEL')) {
3758 channel.setParent(category.id).catch(error => ErrorBag.add(error));
3759 };
3760
3761 await channel.overwritePermissions(reaction.message.guild.members.find(r => r.id == PeekyId), { VIEW_CHANNEL: true, MANAGE_CHANNEL: true }).catch(error => ErrorBag.add(error));
3762 await channel.overwritePermissions(reaction.message.guild.members.find(r => r.id == user.id), { VIEW_CHANNEL: true }).catch(error => ErrorBag.add(error));
3763 await channel.overwritePermissions(reaction.message.guild.roles.find(r => r.name == role.name), { VIEW_CHANNEL: true, MANAGE_CHANNEL: true }).catch(error => ErrorBag.add(error));
3764 await channel.overwritePermissions(reaction.message.guild.roles.find(r => r.name == '@everyone'), { VIEW_CHANNEL: false, SEND_MESSAGES: true, MANAGE_MESSAGES: false }).catch(error => ErrorBag.add(error));
3765
3766 await channel.send({ embed }).catch(error => ErrorBag.add(error));
3767 }).catch(function(err) { ErrorBag.add(err); });
3768
3769 function_UpdateAutowipe(keySF, "server");
3770
3771 };
3772
3773 };
3774
3775 };
3776
3777};
3778
3779//Reaction Roles
3780if (peeky.serverData.get(keySF, "reaction_roles_bonus") == true) {
3781
3782 if (EmojiNumbers.includes(reaction.emoji.name)) {
3783
3784 if (!user.bot & reaction.message.id == peeky.serverData.get(keySF, "reaction_roles_bonus_id")) {
3785
3786 if (reaction.message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
3787 reaction.remove(user.id).catch(error => ErrorBag.add(error));
3788 };
3789
3790 if (reaction.message.guild.me.hasPermission("MANAGE_ROLES")) {
3791
3792 if (!ReactionRolesCooldown.has(user.id)) {
3793
3794 ReactionRolesCooldown.add(user.id);
3795 setTimeout(() => {ReactionRolesCooldown.delete(user.id)}, 5000);
3796
3797 const Setting = peeky.serverData.get(keySF, "reaction_roles_bonus_setting");
3798 const Index = EmojiNumbers.indexOf(reaction.emoji.name);
3799 const role = reaction.message.guild.roles.find(r => r.name.toLowerCase() == Setting[Index].toLowerCase());
3800
3801 if (role) {
3802
3803 const Member = reaction.message.guild.members.get(user.id);
3804 if (!Member.roles.has(role.id)) {
3805 Member.addRole(role.id).catch(error => ErrorBag.add(error));
3806 } else {
3807 Member.removeRole(role.id).catch(error => ErrorBag.add(error));
3808 };
3809
3810 function_UpdateAutowipe(keySF, "server");
3811
3812 };
3813
3814 };
3815
3816 };
3817
3818 };
3819
3820 };
3821
3822};
3823
3824//Message Log
3825if (peeky.channelData.get(keyCF, "message_log_bonus") == true) {
3826
3827 if (!user.bot && reaction.message.author.id !== PeekyId && reaction.emoji.name == "?" && reaction.count == 1) {
3828
3829 if (!LoggedMessages.has(reaction.message.id)) {
3830
3831 if (!MessageLogCooldown.has(reaction.message.author.id)) {
3832
3833 LoggedMessages.add(reaction.message.id);
3834
3835 MessageLogCooldown.add(user.id);
3836 setTimeout(() => {MessageLogCooldown.delete(user.id)}, 30000);
3837
3838 var name = peeky.serverData.get(keySF, "message_log_bonus_setting");
3839 var Channel = reaction.message.guild.channels.find(c => c.name == name);
3840 const OriginalMessage = reaction.message;
3841 const OriginalMessageEdited = OriginalMessage.content.replace(/<@?#?&?!?[0-9]{17,20}>/g, "");
3842 var image = "none";
3843
3844 if (Channel && reaction.message.guild.me.hasPermission("MANAGE_WEBHOOKS")) {
3845
3846 if (reaction.message.attachments.size > 0) { image = reaction.message.attachments.array()[0].url; } else { image = HollowImage; };
3847
3848 Channel.fetchWebhooks().then(webhook => {
3849
3850 var FoundHook = webhook.find(w => w.name == "PEEKY");
3851
3852 if (!FoundHook) {
3853
3854 Channel.createWebhook("PEEKY", peeky.user.displayAvatarURL).catch(error => ErrorBag.add(error))
3855 .then(Webhook => {
3856
3857 Webhook.send(OriginalMessageEdited + "\n", {
3858
3859 "username": OriginalMessage.author.tag,
3860 "avatarURL": OriginalMessage.author.displayAvatarURL,
3861 "files": [image],
3862
3863 "embeds": [{
3864 "description": "[?](" + reaction.message.url + ")",
3865 "color": EmbedColor
3866 }]
3867
3868 }).catch(error => ErrorBag.add(error));
3869
3870 });
3871
3872 }
3873 else
3874 {
3875
3876 var Webhook = webhook.find(w => w.name == "PEEKY");
3877
3878 Webhook.send(OriginalMessageEdited + "\n", {
3879
3880 "username": OriginalMessage.author.tag,
3881 "avatarURL": OriginalMessage.author.displayAvatarURL,
3882 "files": [image],
3883
3884 "embeds": [{
3885 "description": "[?](" + reaction.message.url + ")",
3886 "color": EmbedColor
3887 }]
3888
3889 }).catch(error => ErrorBag.add(error));
3890
3891 };
3892
3893 });
3894
3895 if (peeky.serverData.get(keySF, "function_notifications") == true) {
3896
3897 var TranslatedMessages = [InfoIcon + " **X001** has logged **X002**'s message.", InfoIcon + " **X001** připnul zprávu od **X002**."];
3898 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(user.username, "other", true)).replace("X002", function_RemoveFormatting(reaction.message.member.displayName, "other", true)), "color": EmbedColor};
3899 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3900
3901 };
3902
3903 console.log("The Message Log function has been triggered in " + reaction.message.guild.name + ".");
3904 function_UpdateAutowipe(keySF, "server");
3905
3906 };
3907
3908 reaction.remove(user).catch(error => ErrorBag.add(error));
3909
3910 }
3911 else
3912 {
3913 reaction.remove(user).catch(error => ErrorBag.add(error));
3914
3915 const embed = {"description": CooldownMessage4[Language], "color": EmbedColor};
3916 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3917
3918 };
3919
3920 }
3921 else
3922 {
3923 reaction.remove(user).catch(error => ErrorBag.add(error));
3924
3925 var TranslatedMessages = [ErrorIcon + " That message was already logged, **X001**.", ErrorIcon + " Tato zpráva je již připnutá, **X001**."];
3926 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(user.username, "other", true)), "color": EmbedColor};
3927 reaction.message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
3928
3929 };
3930
3931 };
3932};
3933
3934};
3935});
3936
3937//MESSAGE DELETE EVENTS
3938peeky.on("messageDelete", async (message) => {
3939if (message) {
3940
3941//Workshop Response
3942if (message.channel.id == WorkshopChannel && message.author.id !== PeekyId) {
3943 const embed = {"description": ErrorIcon + " Your submission in the Workshop has been denied.", "color": EmbedColor};
3944 function_DirectMessage(message.author.id, { embed });
3945};
3946
3947};
3948});
3949
3950//MESSAGE EVENTS
3951peeky.on('message', async (message) => {
3952
3953if (message.channel.type == "dm") {
3954
3955if (!QueuedSOSMessages.has(message.author.id) && !message.author.bot && !message.webhookID && message.content.toLowerCase() !== "accept") {
3956
3957 if (!BannedUsers.includes(message.author.id)) {
3958
3959 QueuedSOSMessages.add(message.author.id);
3960
3961 const embed = {"description": InfoIcon + " Do you want to send your message to PEEKY's owner?\n" + Hollow + " Type **Accept** in under 30 seconds if you do.", "color": EmbedColor};
3962 function_DirectMessage(message.author.id, { embed });
3963
3964 message.channel.awaitMessages(response => response.content.toLowerCase() == "accept", {
3965 max: 1,
3966 time: 30000,
3967 errors: ['time'],
3968 }).then((collected) => {
3969
3970 QueuedSOSMessages.delete(message.author.id);
3971
3972 if (message.attachments.size > 0) {
3973 const image = message.attachments.array()[0].url;
3974 function_DirectMessage(OwnerId, "**" + function_RemoveFormatting(message.author.tag, "other", true) + ":** " + message.content, { files: [image]});
3975 }
3976 else
3977 {
3978 function_DirectMessage(OwnerId, "**" + function_RemoveFormatting(message.author.tag, "other", true) + ":** " + message.content);
3979 };
3980
3981 const embed = {"description": SuccessIcon + " Your message has been successfuly sent to my owner!", "color": EmbedColor};
3982 function_DirectMessage(message.author.id, { embed });
3983
3984 }).catch(() => {
3985 QueuedSOSMessages.delete(message.author.id);
3986
3987 const embed = {"description": ErrorIcon + " Your message was not sent because the time limit has ran out.", "color": EmbedColor};
3988 function_DirectMessage(message.author.id, { embed });
3989 });
3990
3991 };
3992
3993 };
3994
3995}
3996 else if (TextChannels.includes(message.channel.type))
3997{
3998
3999//SOME VARIABLES
4000const key = `${message.author.id}`;
4001const keyCF = `${message.channel.id}`;
4002const keySF = `${message.guild.id}`;
4003const Language = peeky.serverData.get(keySF, "language");
4004var Failed = false;
4005
4006if (!message.webhookID) {
4007
4008//MISCELLANEOUS
4009
4010//Server Data Checker
4011if (!CheckedDataCreations.has(message.guild.id)) {
4012
4013 CheckedDataCreations.add(message.guild.id);
4014 function_ServerData(keySF);
4015
4016};
4017
4018//Channel Data Checker
4019if (!CheckedDataCreations.has(message.channel.id)) {
4020
4021 CheckedDataCreations.add(message.channel.id);
4022 function_ChannelData(keyCF);
4023
4024};
4025
4026//Badge Checkers
4027if (message.guild.owner !== undefined && !message.author.bot) {
4028
4029 if (!BadgeCheckCooldown.has(message.guild.id + message.author.id)) {
4030
4031 BadgeCheckCooldown.add(message.guild.id + message.author.id);
4032 setTimeout(() => {BadgeCheckCooldown.delete(message.guild.id + message.author.id)}, 300000);
4033
4034 //Ownership Badge
4035 if (peeky.userData.get(key, "OwnershipBadge") == false && message.author.id == message.guild.owner.user.id) {
4036 peeky.userData.set(key, true, "OwnershipBadge");
4037 };
4038
4039 //Gopbot Badge
4040 if (peeky.userData.get(key, "GopbotBadge") == false && message.author.id == message.guild.owner.user.id && message.guild.members.filter(m => m.user.id == GopbotId).size > 0) {
4041 peeky.userData.set(key, true, "GopbotBadge");
4042 };
4043
4044 };
4045
4046};
4047
4048//Workshop Auto-Management
4049if (message.channel.id == WorkshopChannel && !message.author.bot) {
4050
4051 if (message.attachments.size == 1 && message.content.split('\n').length == 3 && message.content.split('\n')[0].startsWith("Name: ") && message.content.split('\n')[1].startsWith("Credit: ") && message.content.split('\n')[2].startsWith("Price: ") && isNaN(message.content.split('\n')[2].replace("Price: ", "")) == false) { // && message.content.toLowerCase().split('\n')[3] == undefined
4052
4053 //Publisher Badge
4054 if (peeky.userData.has(key) && peeky.userData.get(key, "PublisherBadge") == false) {
4055 peeky.userData.set(key, true, "PublisherBadge");
4056 };
4057
4058 }
4059 else
4060 {
4061 message.delete().catch(error => ErrorBag.add(error));
4062 };
4063
4064};
4065
4066//Limited Roles Auto-Management
4067if (!LimitedRolesCooldown.has("cooldown")) {
4068
4069 LimitedRolesCooldown.add("cooldown");
4070 setTimeout(() => {LimitedRolesCooldown.delete("cooldown")}, 1800000);
4071
4072 //Supporter
4073 await peeky.guilds.get(SupportServer).members.filter(m => !m.user.bot && m.roles.has(SupporterRole)).forEach(m => {
4074
4075 if (peeky.userData.has(m.user.id, "SupporterLastPurchase") && (new Date() - new Date(peeky.userData.get(m.user.id, "SupporterLastPurchase")) >= MonthMs)) {
4076 m.removeRole(SupporterRole).catch(error => ErrorBag.add(error));
4077
4078 const embed = {"description": InfoIcon + " Your **Supporter** status has just expired.", "color": EmbedColor};
4079 m.send({ embed }).catch(error => ErrorBag.add(error));
4080 };
4081
4082 });
4083
4084 //Profile Booster
4085 await peeky.guilds.get(SupportServer).members.filter(m => !m.user.bot && m.roles.has(ProfileBoosterRole)).forEach(m => {
4086
4087 if (peeky.userData.has(m.user.id, "BoosterStart") && (new Date() - new Date(peeky.userData.get(m.user.id, "BoosterStart")) >= DayMs)) {
4088 m.removeRole(ProfileBoosterRole).catch(error => ErrorBag.add(error));
4089
4090 const embed = {"description": InfoIcon + " Your **Profile Booster** has just expired.", "color": EmbedColor};
4091 m.send({ embed }).catch(error => ErrorBag.add(error));
4092 };
4093
4094 });
4095
4096};
4097
4098//Random Treasures
4099if (!RandomTreasuresCooldown.has("cooldown")) {
4100
4101 RandomTreasuresCooldown.add("cooldown");
4102 setTimeout(() => {RandomTreasuresCooldown.delete("cooldown")}, 3600000);
4103
4104 var serverlist = peeky.serverData.filter( p => p.server_upgraded == true && p.GuildID ).array();
4105 var server = serverlist[Math.floor(Math.random()*serverlist.length)];
4106
4107 if (peeky.guilds.has(server.GuildID) && peeky.serverData.has(`${server.GuildID}`)) {
4108
4109 var name = peeky.serverData.get(`${server.GuildID}`, "highlighted_channel");
4110 var guild = peeky.guilds.get(server.GuildID);
4111 var channel = guild.channels.find(c => c.name == name);
4112
4113 if (channel) {
4114
4115 if (channel.permissionsFor(peeky.user).has('SEND_MESSAGES')) {
4116
4117 var Rewards = [[GreditIcon, 250, "Gredit"], [ChestIcon, 1, "Chests"], ["Exp", 500, "Exp"]];
4118 var Index = Math.floor((Math.random() * Rewards.length));
4119 var Amount = Math.floor((Math.random() * Rewards[Index][1])) + 1;
4120
4121 var embed = {"description": "**Random Treasure**" + "\n" + "Reward: " + Amount + " " + Rewards[Index][0], "footer": { "icon_url": TreasureImage, "text": "Type \"claim\" to claim this treasure!" }, "color": EmbedColor};
4122 channel.send({ embed }).catch(error => ErrorBag.add(error)).then(async m => {
4123
4124 m.channel.awaitMessages(message => message.content.toLowerCase() == "claim", { maxMatches: 1, time: 3600000, errors: ['time'] }).then(collected => {
4125
4126 var member = collected.first().member;
4127
4128 if (peeky.userData.has(member.user.id)) {
4129
4130 var embed = {"description": SuccessIcon + " **" + member.displayName + "** has claimed the treasure!", "color": EmbedColor};
4131 m.channel.send({ embed }).catch(error => ErrorBag.add(error));
4132
4133 peeky.userData.math(member.user.id, "+", Amount, Rewards[Index][2]);
4134
4135 };
4136
4137 }).catch(collected => {
4138 var embed = {"description": ErrorIcon + " The treasure has expired.", "color": EmbedColor};
4139 m.channel.send({ embed }).catch(error => ErrorBag.add(error));
4140 });
4141
4142 });
4143
4144 };
4145
4146 };
4147
4148 };
4149
4150};
4151
4152//FUNCTIONS
4153if (peeky.channelData.has(keyCF) && peeky.serverData.has(keySF) && message.channel.permissionsFor(peeky.user).has('EMBED_LINKS')) {
4154
4155//Automatic Reactions
4156if (peeky.channelData.get(keyCF, "automatic_reactions_bonus") == true) {
4157
4158 if ((message.attachments.size > 0 || function_DetectLink(message.content) == true) && !message.author.bot) {
4159
4160 if (message.channel.permissionsFor(peeky.user).has('ADD_REACTIONS' && 'EXTERNAL_EMOJIS')) {
4161
4162 var ReactionEmoji1 = message.guild.emojis.find(c=> c.name == peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_upvote");
4163 var ReactionEmoji2 = message.guild.emojis.find(c=> c.name == peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_downvote");
4164
4165 if (ReactionEmoji1 && ReactionEmoji2) {
4166 await message.react(ReactionEmoji1).catch(error => ErrorBag.add(error));
4167 await message.react(ReactionEmoji2).catch(error => ErrorBag.add(error));
4168
4169 KarmaImages.push([message.id, [message.author.id]]);
4170
4171 console.log("The Automatic Reactions function has been triggered in " + message.guild.name + ".");
4172 function_UpdateAutowipe(keySF, "server");
4173 }
4174 else
4175 {
4176 await message.react(DefaultUpvote).catch(error => ErrorBag.add(error));
4177 await message.react(DefaultDownvote).catch(error => ErrorBag.add(error));
4178
4179 KarmaImages.push([message.id, [message.author.id]]);
4180
4181 console.log("The Automatic Reactions function has been triggered in " + message.guild.name + ".");
4182 function_UpdateAutowipe(keySF, "server");
4183 };
4184
4185 };
4186
4187 };
4188
4189};
4190
4191//Safe Chat
4192if (peeky.channelData.get(keyCF, "safe_chat_bonus") == true) {
4193
4194 if (message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
4195
4196 if (!message.member.permissions.has("MANAGE_MESSAGES")) {
4197
4198 if (VulgarPhrases.some(text => function_RemoveFormatting(message.content.toLowerCase(), "strict", false).includes(text))) {
4199
4200 message.delete(AutoDeleteTime).catch(error => ErrorBag.add(error));
4201
4202 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(message.guild.id + "SC")) {
4203
4204 ResponseCooldowns.add(message.guild.id + "SC");
4205 setTimeout(() => {ResponseCooldowns.delete(message.guild.id + "SC")}, ResponseCooldownMS);
4206
4207 var TranslatedMessages = [InfoIcon + " Please restrain yourself from using profanity, **X001**.", InfoIcon + " Přestaňte prosím mluvit sprostě, **X001**."];
4208 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(message.member.displayName, "other", true)), "color": EmbedColor};
4209 message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
4210
4211 };
4212
4213 console.log("The Safe Chat function has been triggered in " + message.guild.name + ".");
4214 function_UpdateAutowipe(keySF, "server");
4215
4216 };
4217
4218 };
4219
4220 };
4221
4222};
4223
4224//Images Only
4225if (peeky.channelData.get(keyCF, "image_only_bonus") == true) {
4226
4227 if (message.author.id !== PeekyId && message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
4228
4229 if (!message.member.permissions.has("MANAGE_MESSAGES") && message.attachments.size < 1) {
4230
4231 message.delete(AutoDeleteTime).catch(error => ErrorBag.add(error));
4232
4233 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(message.guild.id + "IO")) {
4234
4235 ResponseCooldowns.add(message.guild.id + "IO");
4236 setTimeout(() => {ResponseCooldowns.delete(message.guild.id + "IO")}, ResponseCooldownMS);
4237
4238 var TranslatedMessages = [InfoIcon + " You can only send images in this channel, **X001**.", InfoIcon + " V tomto kanále lze posílat pouze obrázky, **X001**."];
4239 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(message.member.displayName, "other", true)), "color": EmbedColor};
4240 message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
4241
4242 };
4243
4244 console.log("The Images Only function has been triggered in " + message.guild.name + ".");
4245 function_UpdateAutowipe(keySF, "server");
4246
4247 };
4248 };
4249
4250};
4251
4252//Reddit Posts
4253if (peeky.serverData.get(keySF, "reddit_posts_bonus") == true) {
4254
4255 if (!RedditPostsCooldown.has(message.guild.id)) {
4256
4257 RedditPostsCooldown.add(message.guild.id);
4258 setTimeout(() => {RedditPostsCooldown.delete(message.guild.id)}, 1800000);
4259
4260 var name = peeky.serverData.get(keySF, "reddit_posts_bonus_setting");
4261 var channel = message.guild.channels.find(c => c.name == name);
4262
4263 if (channel && channel.permissionsFor(peeky.user).has('SEND_MESSAGES')) {
4264
4265 const Channel = channel;
4266
4267 node_fetch("https://api.reddit.com/r/" + name + "/top.json?sort=top&limit=" + Setting.RedditLimit).then(response => response.json()).then(response => {
4268
4269 for (i = 0; i < response.data.children.length; i++) {
4270
4271 var Post = response.data.children[i].data;
4272
4273 if (!peeky.serverData.get(keySF, "reddit_posts_bonus_last").includes(Post.url) && Post.pinned == false) {
4274
4275 if (peeky.serverData.get(keySF, "reddit_posts_bonus_last").length > Setting.RedditLimit) {
4276 peeky.serverData.set(keySF, [], "reddit_posts_bonus_last");
4277 };
4278
4279 peeky.serverData.get(keySF, "reddit_posts_bonus_last").push(Post.url);
4280
4281 if ((Post.url.includes(".png") || Post.url.includes(".gif") || Post.url.includes(".jpg"))) { var image = Post.url; } else { var image = HollowImage; };
4282
4283 const embed = {
4284 "title": function_FixCapitalization(function_RemoveFormatting(function_ProperSlice(Post.title, 100), "other", false)),
4285 "description": "u/" + function_RemoveFormatting(Post.author, "other", false) + " \n ",
4286 "color": EmbedColor,
4287 "image": {
4288 "url": image
4289 },
4290 "fields": [
4291 {
4292 "name": "Links",
4293 "value": "[Post](" + "https://www.reddit.com" + Post.permalink + ") \n [Media](" + Post.url + ")",
4294 "inline": true
4295 },
4296 {
4297 "name": "Rating",
4298 "value": RedditUpvote + " " + Post.ups + " \n " + RedditDownvote + " " + Post.downs,
4299 "inline": true
4300 }
4301 ]
4302 };
4303
4304 Channel.send({ embed }).catch(error => ErrorBag.add(error));
4305
4306 break;
4307
4308 };
4309
4310 };
4311
4312 });
4313
4314 console.log("The Reddit Posts function has been triggered in " + message.guild.name + ".");
4315 function_UpdateAutowipe(keySF, "server");
4316 };
4317
4318 };
4319
4320};
4321
4322//Server Age
4323if (peeky.serverData.get(keySF, "server_age_bonus") == true) {
4324
4325 if (!ServerAgeCooldown.has(message.guild.id)) {
4326
4327 ServerAgeCooldown.add(message.guild.id);
4328 setTimeout(() => {ServerAgeCooldown.delete(message.guild.id)}, 3600000);
4329
4330 if (message.guild.me.hasPermission("MANAGE_CHANNELS")) {
4331
4332 var id = peeky.serverData.get(keySF, "server_age_bonus_id");
4333 var channel = message.guild.channels.find(g => g.id == id);
4334 var TranslatedStrings = [["Server Age", "days"], ["Věk Serveru", "dní"]];
4335 var FinalName = TranslatedStrings[Language][0] + ": " + function_TimeLeft(message.guild.createdAt, "days", null).toLocaleString('en') + " " + TranslatedStrings[Language][1];
4336
4337 if (channel && channel.name !== FinalName && channel.permissionsFor(peeky.user).has('CONNECT')) {
4338 channel.setName(FinalName, "Triggered by the Server Age function.").catch(error => ErrorBag.add(error));
4339
4340 console.log("The Server Age function has been triggered in " + message.guild.name + ".");
4341 function_UpdateAutowipe(keySF, "server");
4342 };
4343
4344 };
4345
4346 };
4347
4348};
4349
4350//Member Counter
4351if (peeky.serverData.get(keySF, "member_counter_bonus") == true) {
4352
4353 if (!MemberCounterCooldown.has(message.guild.id)) {
4354
4355 MemberCounterCooldown.add(message.guild.id);
4356 setTimeout(() => {MemberCounterCooldown.delete(message.guild.id)}, 300000);
4357
4358 if (message.guild.me.hasPermission("MANAGE_CHANNELS")) {
4359
4360 var id = peeky.serverData.get(keySF, "member_counter_bonus_id");
4361 var Prefix = peeky.serverData.get(keySF, "member_counter_bonus_setting");
4362 var channel = message.guild.channels.find(g => g.id == id);
4363 var FinalName = Prefix + ": " + message.guild.members.filter(m => !m.user.bot).size.toLocaleString('en');
4364
4365 if (channel && channel.name !== FinalName && channel.permissionsFor(peeky.user).has('CONNECT')) {
4366 channel.setName(FinalName, "Triggered by the Member Counter function.").catch(error => ErrorBag.add(error));
4367
4368 console.log("The Member Counter function has been triggered in " + message.guild.name + ".");
4369 function_UpdateAutowipe(keySF, "server");
4370 };
4371
4372 };
4373
4374 };
4375
4376};
4377
4378//Event Countdown
4379if (peeky.serverData.get(keySF, "event_countdown_bonus") == true) {
4380
4381 if (!EventCountdownCooldown.has(message.guild.id)) {
4382
4383 var channel = message.guild.channels.find(c => c.id == peeky.serverData.get(keySF, "event_countdown_bonus_id"));
4384
4385 if (channel && channel.permissionsFor(peeky.user).has('CONNECT')) {
4386
4387 EventCountdownCooldown.add(message.guild.id);
4388 setTimeout(() => {EventCountdownCooldown.delete(message.guild.id)}, 300000);
4389
4390 var TheDate = peeky.serverData.get(keySF, "event_countdown_bonus_setting") - new Date();
4391 const EndName = "The Countdown has ended.";
4392
4393 if (peeky.serverData.get(keySF, "event_countdown_bonus_setting") > 0 && TheDate > 0) {
4394
4395 var Time = peeky.serverData.get(keySF, "event_countdown_bonus_setting");
4396 var FixedTime = function_TimeLeft(Time, "hours", null);
4397 var LengthName = "hours";
4398
4399 if (FixedTime > 24) {
4400 FixedTime = function_TimeLeft(Time, "days", null); LengthName = "days";
4401
4402 if (FixedTime >= 365) {
4403 FixedTime = "over"; LengthName = "a year";
4404 };
4405
4406 };
4407
4408 var FinalName = "Starting in " + FixedTime.toLocaleString('en') + " " + LengthName;
4409
4410 if (channel.name !== FinalName) {
4411 channel.setName(FinalName, "Triggered by the Event Countdown function.").catch(error => ErrorBag.add(error));
4412
4413 console.log("The Event Countdown function has been triggered in " + message.guild.name + ".");
4414 function_UpdateAutowipe(keySF, "server");
4415 };
4416
4417 }
4418 else if (channel.name !== EndName)
4419 {
4420 channel.setName(EndName).catch(error => ErrorBag.add(error));
4421
4422 console.log("The Event Countdown function has been triggered in " + message.guild.name + ".");
4423 function_UpdateAutowipe(keySF, "server");
4424 };
4425
4426 };
4427
4428 };
4429
4430};
4431
4432//Flood Protection
4433if (peeky.serverData.get(keySF, "flood_protection_bonus") == true) {
4434
4435 if (!message.member.permissions.has('MANAGE_MESSAGES') && message.guild.me.hasPermission('MANAGE_ROLES')) {
4436
4437 if (!message.content.toLowerCase().startsWith(peeky.serverData.get(keySF, "prefix"))) {
4438
4439 const LastMsgContent = peeky.channelData.get(keyCF, "flood_protection_bonus_lastmsg");
4440 const LastMsgUser = peeky.channelData.get(keyCF, "flood_protection_bonus_lastuser");
4441 const LastMsgDate = peeky.channelData.get(keyCF, "flood_protection_bonus_lastdate");
4442 const ThisMsgDate = Date.now();
4443
4444 if (((LastMsgUser == message.author.id) && (ThisMsgDate - LastMsgDate <= 500)) || (message.content == LastMsgContent)) {
4445
4446 if (FloodProtectionStrikes.filter(i => i == message.author.id).map(i => "Strike").length == peeky.serverData.get(keySF, "flood_protection_bonus_setting")) {
4447
4448 const name = peeky.serverData.get(keySF, "muted_role");
4449 const Role = message.guild.roles.find(role => role.name == name);
4450
4451 if (Role && !message.member.roles.has(Role.id)) {
4452
4453 message.member.addRole(Role.id, "Triggered by the Flood Protection function.").catch(error => ErrorBag.add(error));
4454
4455 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(message.guild.id + "FP")) {
4456
4457 ResponseCooldowns.add(message.guild.id + "FP");
4458 setTimeout(() => {ResponseCooldowns.delete(message.guild.id + "FP")}, ResponseCooldownMS);
4459
4460 var TranslatedMessages = [InfoIcon + " I have muted **X001** because of the **Flood Protection** function.", InfoIcon + " Ztlumil jsem **X001** kvůli **Flood Protection** funkci."];
4461 const embed = {"description": TranslatedMessages[Language].replace("X001", message.member.displayName), "color": EmbedColor};
4462 await message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
4463
4464 };
4465
4466 console.log("The Flood Protection function has been triggered in " + message.guild.name + ".");
4467 function_UpdateAutowipe(keySF, "server");
4468
4469 };
4470
4471 }
4472 else
4473 {
4474 FloodProtectionStrikes.push(message.author.id);
4475
4476 setTimeout(() => {
4477 FloodProtectionStrikes.splice(peeky.userData.get(key, "Inventory").indexOf(i), 1);
4478 }, 30000);
4479
4480 };
4481
4482 };
4483
4484 peeky.channelData.set(keyCF, Date.now(), "flood_protection_bonus_lastdate");
4485 peeky.channelData.set(keyCF, message.author.id, "flood_protection_bonus_lastuser");
4486
4487 if (message.content == "") {
4488 peeky.channelData.set(keyCF, null, "flood_protection_bonus_lastmsg");
4489 } else {
4490 peeky.channelData.set(keyCF, message.content, "flood_protection_bonus_lastmsg");
4491 };
4492
4493 };
4494
4495 };
4496
4497};
4498
4499//Spoiler Lock
4500if (peeky.serverData.get(keySF, "spoiler_only_bonus") == true) {
4501
4502 if (message.author.id !== PeekyId && message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
4503
4504 if (!message.member.permissions.has("MANAGE_MESSAGES")) {
4505
4506 if ((message.attachments.size > 0 && !message.attachments.array()[0].filename.startsWith("SPOILER_")) || function_DetectLink(message.content) == true) {
4507
4508 if ((((new Date() - new Date(message.member.joinedAt)) / 60000) < peeky.serverData.get(keySF, "spoiler_lock_bonus_setting")) || peeky.serverData.get(keySF, "spoiler_lock_bonus_setting") == 0) {
4509
4510 message.delete(AutoDeleteTime).catch(error => ErrorBag.add(error));
4511
4512 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(message.guild.id + "SO")) {
4513
4514 ResponseCooldowns.add(message.guild.id + "SO");
4515 setTimeout(() => {ResponseCooldowns.delete(message.guild.id + "SO")}, ResponseCooldownMS);
4516
4517 var TranslatedMessages = [InfoIcon + " You have to mark your image as a spoiler, **X001**.", InfoIcon + " Musíte označit váš obrázek jako spoiler, **X001**."];
4518 const embed = {"description": TranslatedMessages[Language].replace("X001", function_RemoveFormatting(message.member.displayName, "other", true)), "color": EmbedColor}
4519 message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
4520
4521 };
4522
4523 console.log("The Spoiler Lock function has been triggered in " + message.guild.name + ".");
4524 function_UpdateAutowipe(keySF, "server");
4525
4526 };
4527
4528 };
4529
4530 };
4531
4532 };
4533
4534};
4535
4536//Classification Wall
4537if (peeky.serverData.get(keySF, "donor_wall_bonus") == true) {
4538
4539 const Role = peeky.guilds.get(message.guild.id).roles.find(r => r.name == peeky.serverData.get(keySF, "donor_wall_bonus_setting"));
4540 const Channel = peeky.guilds.get(message.guild.id).channels.find(c => c.name == peeky.serverData.get(keySF, "donor_wall_bonus_channel"));
4541 var WallList = [];
4542 var Tags = [];
4543 var EndString = "";
4544
4545 if (Role && Channel) {
4546
4547 if (!DonorWallCooldown.has(message.guild.id)) {
4548
4549 DonorWallCooldown.add(message.guild.id);
4550 setTimeout(() => {DonorWallCooldown.delete(message.guild.id)}, 300000);
4551
4552 await message.guild.fetchMembers();
4553 message.guild.members.forEach(m => {
4554
4555 Tags = [];
4556
4557 if (m.roles.has(Role.id)) {
4558 if (m.user.id == message.guild.owner.user.id) { Tags.push(OwnerTag); };
4559 if (m.roles.find(r => r.name == "Booster")) { Tags.push(BoostTag); };
4560 if (m.user.bot) { Tags.push(BotTag); };
4561
4562 WallList.push("> " + function_RemoveFormatting(m.displayName, "other", true) + " " + Tags.join(" "));
4563 };
4564 });
4565
4566 Channel.fetchMessages({ limit: 1 }).then(messages => {
4567
4568 const Message = messages.array()[0];
4569 const WallAmount = WallList.length;
4570
4571 if (WallAmount > Setting.ClassificationWallLimit) { EndString = "\n and " + (WallAmount - Setting.ClassificationWallLimit) + " more..." };
4572 if (WallAmount == 0) { WallList = ["No one."] };
4573
4574 if (Message && Message.id == peeky.serverData.get(keySF, "donor_wall_bonus_id")) {
4575
4576 var FinalText = "**" + function_RemoveFormatting(message.guild.name, "other", true) + "'s " + peeky.serverData.get(keySF, "donor_wall_bonus_setting") + "s:**\n" + WallList.slice(0, Setting.ClassificationWallLimit).join("\n") + "" + EndString;
4577
4578 if (Message.content !== FinalText) {
4579 Message.edit(FinalText).catch(error => ErrorBag.add(error));
4580
4581 console.log("The Classification Wall function has been triggered in " + message.guild.name + ".");
4582 function_UpdateAutowipe(keySF, "server");
4583 };
4584
4585 };
4586
4587 }).catch(error => ErrorBag.add(error));
4588
4589 };
4590
4591 };
4592
4593};
4594
4595//Reaction Roles
4596if (peeky.serverData.get(keySF, "reaction_roles_bonus") == true) {
4597
4598 const Channel = peeky.guilds.get(message.guild.id).channels.find(c => c.name == "roles");
4599
4600 if (Channel) {
4601
4602 if (!ReactionRolesCooldown.has(message.guild.id)) {
4603
4604 ReactionRolesCooldown.add(message.guild.id);
4605 setTimeout(() => {ReactionRolesCooldown.delete(message.guild.id)}, 300000);
4606
4607 Channel.fetchMessages({ limit: 1 }).then(async messages => {
4608
4609 const Message = messages.array()[0];
4610 const Setting = peeky.serverData.get(keySF, "reaction_roles_bonus_setting");
4611
4612 if (Message && Message.id == peeky.serverData.get(keySF, "reaction_roles_bonus_id")) {
4613
4614 const Roles = function_NumarizeArray(Setting, ["", ""]);
4615
4616 var FinalText = "**Reaction Roles**" + "\n" + Roles;
4617
4618 if (Message.content !== FinalText) {
4619 await Message.edit(FinalText).catch(error => ErrorBag.add(error));
4620 await Message.clearReactions().catch(error => ErrorBag.add(error));
4621
4622 if (Setting.length > 0) {
4623 for (var i = 0; i < Setting.length; i++) {
4624 await Message.react(EmojiNumbers[i]);
4625 };
4626 };
4627
4628 };
4629
4630 };
4631
4632 }).catch(error => ErrorBag.add(error));
4633
4634 };
4635
4636 };
4637
4638};
4639
4640//Ticket System
4641if (peeky.serverData.get(keySF, "ticket_system_bonus") == true) {
4642
4643 const Role = peeky.guilds.get(message.guild.id).roles.find(r => r.name == peeky.serverData.get(keySF, "ticket_system_bonus_setting"));
4644 const Channel = peeky.guilds.get(message.guild.id).channels.find(c => c.name == "tickets");
4645
4646 if (Role && Channel) {
4647
4648 ActivatedTicketSystems.add(message.guild.id);
4649 Channel.fetchMessages({ limit: 1 });
4650
4651 };
4652
4653};
4654
4655//Banned Words
4656if (peeky.channelData.get(keyCF, "banned_words_bonus") == true) {
4657
4658 if (message.author.id !== PeekyId && message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
4659
4660 if (!message.member.permissions.has("MANAGE_MESSAGES") && peeky.serverData.get(keySF, "banned_words_bonus_setting").some(word => function_RemoveFormatting(message.content.toLowerCase(), "strict", false).includes(word))) {
4661
4662 message.delete(AutoDeleteTime).catch(error => ErrorBag.add(error));
4663
4664 if (peeky.serverData.get(keySF, "function_notifications") == true && !ResponseCooldowns.has(message.guild.id + "BW")) {
4665
4666 ResponseCooldowns.add(message.guild.id + "BW");
4667 setTimeout(() => {ResponseCooldowns.delete(message.guild.id + "BW")}, ResponseCooldownMS);
4668
4669 var TranslatedMessages = [InfoIcon + " That phrase is blocked by the **Banned Words** function, **X001**.", InfoIcon + " Tato fráze je pomocí funkce **Banned Words** zablokována, **X001**."];
4670 const embed = {"description": TranslatedMessages[Language].replace("X001", message.member.displayName), "color": EmbedColor};
4671 message.channel.send({ embed }).catch(error => ErrorBag.add(error)).then(m => {m.delete(10000).catch(error => ErrorBag.add(error))});
4672
4673 };
4674
4675 console.log("The Banned Words function has been triggered in " + message.guild.name + ".");
4676 function_UpdateAutowipe(keySF, "server");
4677
4678 };
4679
4680 };
4681
4682};
4683
4684};
4685
4686//COMMANDS
4687if (!message.webhookID && !message.author.bot && !BannedUsers.includes(message.author.id) && message.channel.permissionsFor(peeky.user).has('SEND_MESSAGES' && 'EMBED_LINKS')) {
4688
4689//Mention Commands
4690
4691//Help
4692if ((message.mentions.members.first() && message.mentions.members.first().id == PeekyId) || (message.content == peeky.serverData.get(keySF, "prefix") + "help")) {
4693
4694 const WebsiteInfo = ["Visit the website to vote, read tutorials, browse the backgrounds, view the leaderboard and pretty much everything PEEKY related.", "Navštivte moji stránku aby jste mohli hlasovat, číst návody, koukat na pozadí, otevřit žebříček a vlastně všechno co se týče PEEKYho."];
4695 const StoreInfo = ["Support PEEKY by purchasing some neat items from the store!", "Podpořte PEEKYho tím, že si koupíte nějaké supr věcičky z obchodu!"];
4696 const SupportServerInfo = ["Join the Support Server for important announcements, assistance with the bot, giveaways and much more!", "Připojte se na můj Discord server pro důležitá upozornění, podporu s botem, soutěže a mnoho dalšího!"];
4697 const BotInvite = ["Add PEEKY to your server and get all the features for free and quick!", "Přidejte si PEEKYho na váš server a dostanete všechny funkce zdarma a rychle."];
4698
4699 const embed = { "description":
4700 "**Website** [[Open]](https://peeky.glitch.me/)\n" + WebsiteInfo[Language] +
4701 "\n\n**Store** [[Open]](https://peeky.glitch.me/store.html) [[Checkout]](https://donatebot.io/checkout/" + SupportServer + ")\n" + StoreInfo[Language] +
4702 "\n\n**Support Server** [[Join]](https://peeky.glitch.me/server.html)\n" + SupportServerInfo[Language] +
4703 "\n\n**Bot Invite** [[Add]](https://peeky.glitch.me/invite.html)\n" + BotInvite[Language] +
4704 "\n\n**Server Prefix: ** " + peeky.serverData.get(keySF, "prefix"),
4705 "image": { "url": "https://cdn.glitch.com/b2a48499-dec5-4ba6-898e-ec1e602d6eb9%2Fnew_header.png?1553884542855" },
4706 "color": 7506394
4707 };
4708
4709 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4710
4711};
4712
4713//Prefixed Commands
4714if (message.content.startsWith(peeky.serverData.get(keySF, "prefix"))) {
4715
4716const Prefix = peeky.serverData.get(keySF, "prefix");
4717const CommandName = message.content.replace(Prefix, "");
4718const InfoMessages = [];
4719
4720function_UpdateAutowipe(key, "user");
4721function_UpdateAutowipe(keySF, "server");
4722
4723//Eval
4724if (CommandName.startsWith("eval ")) {
4725
4726 if (message.author.id == OwnerId) {
4727
4728 function clean(text) {
4729 if (typeof(text) === "string")
4730 return text.replace(/`/g, "`" + String.fromCharCode(8203)).replace(/@/g, "@" + String.fromCharCode(8203));
4731 else
4732 return text;
4733 };
4734
4735 var EvalResult = CommandName.split("eval ")[1]
4736
4737 try {
4738 const code = EvalResult;
4739 let evaled = eval(code);
4740
4741 if (typeof evaled !== "string")
4742 evaled = require("util").inspect(evaled);
4743
4744 message.channel.send(clean(evaled), {code:"xl"});
4745 } catch (err) {
4746 message.channel.send(`\`Error Detected\` \`\`\`xl\n${clean(err)}\n\`\`\``);
4747 };
4748
4749 }
4750 else
4751 {
4752 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
4753 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4754 };
4755
4756};
4757
4758//EventRewards
4759if (CommandName == "eventrewards") {
4760
4761 if (Setting.EventStatus == true) {
4762
4763 if (!peeky.userData.get(key, "ParticipatedEvents").includes(Setting.EventName)) {
4764
4765 peeky.userData.get(key, "ParticipatedEvents").push(Setting.EventName);
4766
4767 //Setting
4768 var Background = 437;
4769 var Chests = 25;
4770 var Gredit = 0;
4771
4772 if (Setting.EventName.includes("PEEKY's Birthday") || Setting.EventName.includes("Christmas")) {
4773 InfoMessages.push("•" + " The **Celebrator** badge.");
4774 peeky.userData.set(key, true, "CelebratorBadge");
4775 };
4776
4777 if (Setting.EventName.includes("Movie Nighter")) {
4778 InfoMessages.push("•" + " The **Movie Nighter** badge.");
4779 peeky.userData.set(key, true, "MovieNighterBadge");
4780 };
4781
4782 if (Background > 0) {
4783 InfoMessages.push("•" + " The **" + function_GetBackgroundInfo(Background, ["name", "id"]) + "** background.");
4784 peeky.userData.get(key, "Inventory").push(Background);
4785 };
4786
4787 if (Gredit > 0) {
4788 InfoMessages.push("•" + " **" + Gredit + "** Gredit.");
4789 peeky.userData.math(key, "+", Gredit, "Gredit");
4790 };
4791
4792 if (Chests > 0) {
4793 InfoMessages.push("•" + " **" + Chests + "** Chests.");
4794 peeky.userData.math(key, "+", Chests, "Chests");
4795 };
4796
4797 const embed = {"description": "You have received some cool rewards from the **" + Setting.EventName + "** event!" + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
4798 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4799
4800 };
4801
4802 };
4803
4804};
4805
4806//Upgrade
4807if (CommandName.startsWith("upgrade")) {
4808
4809 const PeekySupportServer = peeky.guilds.get(SupportServer);
4810 const TheUserWithRole = PeekySupportServer.members.get(message.author.id);
4811
4812 if (PeekySupportServer.members.get(message.author.id)) {
4813
4814 //Server Upgrade
4815 if (TheUserWithRole.roles.has(ServerUpgradeRole) && peeky.serverData.get(keySF, "server_upgraded") == false) {
4816 TheUserWithRole.removeRole(ServerUpgradeRole).catch(error => {ErrorBag.add(error); Failed = true});
4817
4818 if (Failed == false) {
4819
4820 peeky.serverData.set(keySF, true, "server_upgraded");
4821 peeky.userData.math(key, "+", 1, "UpgradedServers");
4822
4823 var TranslatedMessages = [SuccessIcon + " This server is now upgraded!", SuccessIcon + " Tento server je nyní vylepšen!"];
4824 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
4825 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4826
4827 peeky.channels.get("319891596772638744").send("**" + function_RemoveFormatting(message.author.tag, "other", true) + "** has upgraded **" + function_RemoveFormatting(message.guild.owner.user.tag, "other", true) + "**'s server called **" + function_RemoveFormatting(message.guild.name, "other", true) + "**.").catch(error => ErrorBag.add(error));
4828 };
4829 }
4830 else
4831 {
4832 var TranslatedMessages = [ErrorIcon + " You cannot upgrade this server.", ErrorIcon + " Tento server vylepšit nemůžete."];
4833 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
4834 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4835 };
4836
4837 }
4838 else
4839 {
4840 const embed = {"description": ErrorMessage19[Language], "color": EmbedColor};
4841 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4842 };
4843
4844};
4845
4846//SetInvite
4847if (CommandName == "setinvite") {
4848
4849 if (!SetInviteCooldown.has(message.guild.id)) {
4850
4851 SetInviteCooldown.add(message.guild.id);
4852 setTimeout(() => {SetInviteCooldown.delete(message.guild.id)}, 60000);
4853
4854 if (message.author.id == message.guild.owner.user.id) {
4855
4856 if (peeky.serverData.get(keySF, "server_upgraded") == true) {
4857
4858 await message.channel.fetchInvites().then(function(Invites) {
4859 Invites = Invites.array();
4860
4861 if (Invites.length > 0) {
4862 peeky.serverData.set(keySF, Invites[0].code, "server_invite");
4863 var TranslatedMessages = [InfoIcon + " The server's invite code has been set to **X001**.", InfoIcon + " Pozvánka tohoto server byla nastavea na **X001**."];
4864 const embed = {"description": TranslatedMessages[Language].replace("X001", Invites[0].code), "color": EmbedColor};
4865 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4866 } else {
4867 var TranslatedMessages = [ErrorIcon + " I could not find any server invites in this channel.", ErrorIcon + " V tomto kanále jsem nenašel žádné pozvánky."];
4868 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
4869 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4870 };
4871
4872 });
4873
4874 }
4875 else
4876 {
4877 const embed = {"description": ErrorMessage21[Language], "color": EmbedColor};
4878 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4879 };
4880
4881 }
4882 else
4883 {
4884 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
4885 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4886 };
4887
4888 }
4889 else
4890 {
4891 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
4892 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4893 };
4894
4895};
4896
4897//Overview
4898if (CommandName == "overview") {
4899
4900 if (!CommandCooldown.has("overview" + message.guild.id)) {
4901
4902 if (message.channel.permissionsFor(peeky.user).has('ADD_REACTIONS')) {
4903
4904 CommandCooldown.add("overview" + message.guild.id);
4905 setTimeout(() => {CommandCooldown.delete("overview" + message.guild.id)}, 10000);
4906
4907 const embed = {"description": "**Overview Menu**" + "\n\n" + "1️⃣ Server Settings" + "\n\n" + "2️⃣ Server Functions `[1/3]`" + "\n\n" + "3️⃣ Server Functions `[2/3]`" + "\n\n" + "4️⃣ Server Functions `[3/3]`" + "\n\n" + "5️⃣ Channel Functions", "color": EmbedColor};
4908 await message.channel.send({ embed }).catch(error => {ErrorBag.add(error);}).then(async m => {
4909
4910 peeky.userData.set(key, m.id, "OverviewID");
4911 await m.react("1️⃣").catch(error => {ErrorBag.add(error)});
4912 await m.react("2️⃣").catch(error => {ErrorBag.add(error)});
4913 await m.react("3️⃣").catch(error => {ErrorBag.add(error)});
4914 await m.react("4️⃣").catch(error => {ErrorBag.add(error)});
4915 await m.react("5️⃣").catch(error => {ErrorBag.add(error)});
4916
4917 }).catch(error => {ErrorBag.add(error)});
4918
4919 };
4920
4921 } else {
4922 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
4923 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4924 };
4925
4926};
4927
4928//Languages
4929if (CommandName == "languages") {
4930
4931 if (!CommandCooldown.has("languages" + message.guild.id)) {
4932
4933 if (message.channel.permissionsFor(peeky.user).has('ADD_REACTIONS')) {
4934
4935 if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
4936
4937 CommandCooldown.add("languages" + message.guild.id);
4938 setTimeout(() => {CommandCooldown.delete("languages" + message.guild.id)}, 10000);
4939
4940 const embed = {"description": "**Languages**" + "\n\n" + "?? English `100%`" + "\n\n" + "?? Čeština `95%`", "color": EmbedColor};
4941 await message.channel.send({ embed }).catch(error => {ErrorBag.add(error);}).then(async m => {
4942
4943 peeky.userData.set(key, m.id, "LanguageID");
4944 await m.react("??").catch(error => {ErrorBag.add(error)});
4945 await m.react("??").catch(error => {ErrorBag.add(error)});
4946
4947 }).catch(error => {ErrorBag.add(error)});
4948
4949 } else {
4950 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
4951 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4952 };
4953
4954 };
4955
4956 } else {
4957 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
4958 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
4959 };
4960
4961};
4962
4963//Toggle
4964if (CommandName.startsWith("toggle")) {
4965
4966 var FunctioName = CommandName.split("toggle")[1];
4967
4968if (FunctioName.startsWith(" ")) {
4969
4970 FunctioName = FunctioName.replace(" ", "");
4971
4972if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
4973
4974if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
4975
4976 var ManageChannels = false;
4977 var ManageRoles = false;
4978 var EnableStrings = ["enabled", "zapnutá"];
4979 var DisableStrings = ["disabled", "vypnutá"];
4980 var TranslatedMessages = [SuccessIcon + " The **X001** function has been **X002**.", SuccessIcon + " Funkce **X001** je nyní **X002**."];
4981
4982 if (message.guild.me.hasPermission("MANAGE_CHANNELS")) {
4983 ManageChannels = true;
4984
4985 var TranslatedBonuses = [InfoIcon + " Created a channel called **#X001** for the **X002** function.", InfoIcon + " Vytvořil jsem kanál s názvem **#X001** pro funkci **X002**."];
4986 var ChannelCreation = TranslatedBonuses[Language]
4987 };
4988
4989 if (message.guild.me.hasPermission("MANAGE_ROLES")) {
4990 ManageRoles = true;
4991
4992 var TranslatedBonuses = [InfoIcon + " Created a role called **X001** for the **@X002** function.", InfoIcon + " Vytvořil jsem roli s názvem **@X001** pro funkci **X002**."];
4993 var RoleCreation = TranslatedBonuses[Language];
4994 };
4995
4996//Toggle Automatic Reactions
4997if (FunctioName == "automatic reactions") {
4998
4999 if (peeky.channelData.get(keyCF, "automatic_reactions_bonus") == true) {peeky.channelData.set(keyCF, false, "automatic_reactions_bonus")}
5000 else peeky.channelData.set(keyCF, true, "automatic_reactions_bonus");
5001
5002 if (peeky.channelData.get(keyCF, "automatic_reactions_bonus") == true) {
5003 var StatusString = EnableStrings[Language];
5004 } else {
5005 var StatusString = DisableStrings[Language];
5006 };
5007
5008 const embed = {"description": TranslatedMessages[Language].replace("X001", "Automatic Reactions").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5009
5010 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5011
5012}
5013
5014else
5015
5016//Toggle Safe Chat
5017if (FunctioName == "safe chat") {
5018
5019 if (peeky.channelData.get(keyCF, "safe_chat_bonus") == true) {peeky.channelData.set(keyCF, false, "safe_chat_bonus")}
5020 else peeky.channelData.set(keyCF, true, "safe_chat_bonus");
5021
5022 if (peeky.channelData.get(keyCF, "safe_chat_bonus") == true) {
5023 var StatusString = EnableStrings[Language];
5024 } else {
5025 var StatusString = DisableStrings[Language];
5026 };
5027
5028 const embed = {"description": TranslatedMessages[Language].replace("X001", "Safe Chat").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5029
5030 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5031
5032}
5033
5034else
5035
5036//Toggle Welcome Messages
5037if (FunctioName.startsWith("welcome messages")) {
5038
5039 const guild = message.guild;
5040 var name = peeky.serverData.get(keySF, "welcome_messages_bonus_setting");
5041 var channel = guild.channels.find(c=> c.name == name);
5042
5043 if (peeky.serverData.get(keySF, "welcome_messages_bonus") == true) {peeky.serverData.set(keySF, false, "welcome_messages_bonus")}
5044 else peeky.serverData.set(keySF, true, "welcome_messages_bonus");
5045
5046 //Channel Creating
5047 if (!channel) {
5048
5049 if (!ChannelCooldown.has(message.guild.id)) {
5050
5051 if (ManageChannels == true) {
5052
5053 ChannelCooldown.add(message.guild.id);
5054 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5055
5056 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5057 .then(async function (channel) {
5058 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false }).catch(error => ErrorBag.add(error));
5059 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true }).catch(error => ErrorBag.add(error));
5060 }).catch(function(err) { ErrorBag.add(err); });
5061
5062 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Welcome Messages"));
5063
5064 };
5065
5066 } else {
5067 InfoMessages.push(CooldownMessage2[Language]);
5068 };
5069
5070 };
5071
5072 if (peeky.serverData.get(keySF, "welcome_messages_bonus") == true) {
5073 var StatusString = EnableStrings[Language];
5074 } else {
5075 var StatusString = DisableStrings[Language];
5076 };
5077
5078 const embed = {"description": TranslatedMessages[Language].replace("X001", "Welcome Messages").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5079
5080 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5081
5082}
5083
5084else
5085
5086//Toggle Classification Wall
5087if (FunctioName.startsWith("classification wall")) {
5088
5089 const channel = message.guild.channels.find(channel => channel.name == peeky.serverData.get(keySF, "donor_wall_bonus_channel"));
5090 const name = peeky.serverData.get(keySF, "donor_wall_bonus_channel");
5091
5092 if(peeky.serverData.get(keySF, "donor_wall_bonus") == true) { peeky.serverData.set(keySF, false, "donor_wall_bonus"); }
5093 else peeky.serverData.set(keySF, true, "donor_wall_bonus");
5094
5095 //Channel Creating
5096 if (!channel) {
5097
5098 if (!ChannelCooldown.has(message.guild.id)) {
5099
5100 if (ManageChannels == true) {
5101
5102 ChannelCooldown.add(message.guild.id);
5103 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5104
5105 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5106 .then(async function (channel) {
5107 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false, MANAGE_MESSAGES: false }).catch(error => ErrorBag.add(error));
5108 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true, MANAGE_MESSAGES: true }).catch(error => ErrorBag.add(error));
5109 await channel.send("**" + message.guild.name + "'s " + peeky.serverData.get(keySF, "donor_wall_bonus_setting") + "s:**\n\nPreparing... Come back in a few minutes!").catch(error => {ErrorBag.add(error);}).then(m => peeky.serverData.set(keySF, m.id, "donor_wall_bonus_id"));
5110 }).catch(function(err) { ErrorBag.add(err); });
5111
5112 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Classification Wall"));
5113
5114 };
5115
5116 } else {
5117 InfoMessages.push(CooldownMessage2[Language]);
5118 };
5119
5120 };
5121
5122 if (peeky.serverData.get(keySF, "donor_wall_bonus") == true) {
5123 var StatusString = EnableStrings[Language];
5124 } else {
5125 var StatusString = DisableStrings[Language];
5126 };
5127
5128 const embed = {"description": TranslatedMessages[Language].replace("X001", "Classification Wall").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5129
5130 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5131
5132}
5133
5134else
5135
5136//Toggle Ticket System
5137if (FunctioName.startsWith("ticket system")) {
5138
5139 const name = "tickets";
5140 const channel = message.guild.channels.find(channel => channel.name == name);
5141 const category = message.guild.channels.find(c => c.name == "Tickets" && c.type == "category");
5142
5143 if(peeky.serverData.get(keySF, "ticket_system_bonus") == true) { peeky.serverData.set(keySF, false, "ticket_system_bonus"); }
5144 else peeky.serverData.set(keySF, true, "ticket_system_bonus");
5145
5146 //Channel Creating
5147 if (!channel) {
5148
5149 if (!ChannelCooldown.has(message.guild.id)) {
5150
5151 if (ManageChannels == true) {
5152
5153 ChannelCooldown.add(message.guild.id);
5154 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5155
5156 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5157 .then(async function (channel) {
5158 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true, MANAGE_MESSAGES: true, ADD_REACTIONS: true }).catch(error => ErrorBag.add(error));
5159 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false, MANAGE_MESSAGES: false, ADD_REACTIONS: false }).catch(error => ErrorBag.add(error));
5160 await channel.send("**Need help with something?**" + "\n" + "Click on the reaction below to create a ticket.").catch(error => ErrorBag.add(error)).then(m => { m.react("?️"); peeky.serverData.set(keySF, m.id, "ticket_system_bonus_id"); }).catch(error => ErrorBag.add(error));
5161 }).catch(function(err) { ErrorBag.add(err); });
5162
5163 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Ticket System"));
5164
5165 if (!category) {
5166 InfoMessages.push(InfoIcon + " Consider creating a category called **Tickets** to sort tickets.");
5167 };
5168
5169 };
5170
5171 } else {
5172 InfoMessages.push(CooldownMessage2[Language]);
5173 };
5174
5175 };
5176
5177 if (peeky.serverData.get(keySF, "ticket_system_bonus") == true) {
5178 var StatusString = EnableStrings[Language];
5179 } else {
5180 var StatusString = DisableStrings[Language];
5181 };
5182
5183 const embed = {"description": TranslatedMessages[Language].replace("X001", "Ticket System").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5184
5185 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5186
5187}
5188
5189else
5190
5191//Toggle Reaction Roles
5192if (FunctioName.startsWith("reaction roles")) {
5193
5194 const name = "roles";
5195 const channel = message.guild.channels.find(channel => channel.name == name);
5196
5197 if(peeky.serverData.get(keySF, "reaction_roles_bonus") == true) { peeky.serverData.set(keySF, false, "reaction_roles_bonus"); }
5198 else peeky.serverData.set(keySF, true, "reaction_roles_bonus");
5199
5200 //Channel Creating
5201 if (!channel) {
5202
5203 if (!ChannelCooldown.has(message.guild.id)) {
5204
5205 if (ManageChannels == true) {
5206
5207 ChannelCooldown.add(message.guild.id);
5208 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5209
5210 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5211 .then(async function (channel) {
5212 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true }).catch(error => ErrorBag.add(error));
5213 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false, MANAGE_MESSAGES: false, ADD_REACTIONS: false }).catch(error => ErrorBag.add(error));
5214 await channel.send("**Reaction Roles**" + "\n" + "Preparing... Come back in a few minutes!").catch(error => ErrorBag.add(error)).then(m => { peeky.serverData.set(keySF, m.id, "reaction_roles_bonus_id"); }).catch(error => ErrorBag.add(error));
5215 }).catch(function(err) { ErrorBag.add(err); });
5216
5217 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Reaction Roles"));
5218
5219 };
5220
5221 } else {
5222 InfoMessages.push(CooldownMessage2[Language]);
5223 };
5224
5225 };
5226
5227 if (peeky.serverData.get(keySF, "reaction_roles_bonus") == true) {
5228 var StatusString = EnableStrings[Language];
5229 } else {
5230 var StatusString = DisableStrings[Language];
5231 };
5232
5233 const embed = {"description": TranslatedMessages[Language].replace("X001", "Reaction Roles").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5234
5235 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5236
5237}
5238
5239else
5240
5241//Toggle Join role
5242if (FunctioName.startsWith("join role")) {
5243
5244 const guild = message.guild;
5245 var name = peeky.serverData.get(keySF, "join_role_bonus_setting");
5246 var role = guild.roles.find(c=> c.name == name);
5247
5248 if(peeky.serverData.get(keySF, "join_role_bonus") == true) {peeky.serverData.set(keySF, false, "join_role_bonus");}
5249 else peeky.serverData.set(keySF, true, "join_role_bonus");
5250
5251 if (!role) {
5252
5253 if (!RoleCooldown.has(message.guild.id)) {
5254
5255 if (ManageRoles == true) {
5256
5257 RoleCooldown.add(message.guild.id);
5258 setTimeout(() => {RoleCooldown.delete(message.guild.id)}, RoleCooldownMS);
5259
5260 message.guild.createRole({
5261 name: name,
5262 color: Setting.Blurple
5263 }).catch(error => ErrorBag.add(error));
5264
5265 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Join Role"));
5266
5267 };
5268 } else {
5269 InfoMessages.push(CooldownMessage3[Language]);
5270 };
5271 };
5272
5273 if (peeky.serverData.get(keySF, "join_role_bonus") == true) {
5274 var StatusString = EnableStrings[Language];
5275 } else {
5276 var StatusString = DisableStrings[Language];
5277 };
5278
5279 const embed = {"description": TranslatedMessages[Language].replace("X001", "Join role").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5280
5281 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5282
5283}
5284
5285else
5286
5287//Toggle Role Saver
5288if (FunctioName.startsWith("role saver")) {
5289
5290 if(peeky.serverData.get(keySF, "role_saver_bonus") == true) {peeky.serverData.set(keySF, false, "role_saver_bonus");}
5291 else peeky.serverData.set(keySF, true, "role_saver_bonus");
5292
5293 if (peeky.serverData.get(keySF, "role_saver_bonus") == true) {
5294 var StatusString = EnableStrings[Language];
5295 } else {
5296 var StatusString = DisableStrings[Language];
5297 };
5298
5299 const embed = {"description": TranslatedMessages[Language].replace("X001", "Role Saver").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5300
5301 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5302
5303}
5304
5305else
5306
5307//Toggle Images Only
5308if (FunctioName.startsWith("images only")) {
5309
5310 if(peeky.channelData.get(keyCF, "image_only_bonus") == true) {peeky.channelData.set(keyCF, false, "image_only_bonus");}
5311 else peeky.channelData.set(keyCF, true, "image_only_bonus");
5312
5313 if (peeky.channelData.get(keyCF, "image_only_bonus") == true) {
5314 var StatusString = EnableStrings[Language];
5315 } else {
5316 var StatusString = DisableStrings[Language];
5317 };
5318
5319 const embed = {"description": TranslatedMessages[Language].replace("X001", "Images Only").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5320
5321 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5322
5323}
5324
5325else
5326
5327//Toggle Dash Remover
5328if (FunctioName.startsWith("dash remover")) {
5329
5330 if(peeky.serverData.get(keySF, "dash_remover_bonus") == true) {peeky.serverData.set(keySF, false, "dash_remover_bonus");}
5331 else peeky.serverData.set(keySF, true, "dash_remover_bonus");
5332
5333 if (peeky.serverData.get(keySF, "dash_remover_bonus") == true) {
5334 var StatusString = EnableStrings[Language];
5335 } else {
5336 var StatusString = DisableStrings[Language];
5337 };
5338
5339 const embed = {"description": TranslatedMessages[Language].replace("X001", "Dash Remover").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5340
5341 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5342
5343}
5344
5345else
5346
5347//Toggle Server Message
5348if (FunctioName.startsWith("server message")) {
5349
5350 if(peeky.serverData.get(keySF, "server_message_bonus") == true) {peeky.serverData.set(keySF, false, "server_message_bonus");}
5351 else peeky.serverData.set(keySF, true, "server_message_bonus");
5352
5353 if (peeky.serverData.get(keySF, "server_message_bonus") == true) {
5354 var StatusString = EnableStrings[Language];
5355 } else {
5356 var StatusString = DisableStrings[Language];
5357 };
5358
5359 const embed = {"description": TranslatedMessages[Language].replace("X001", "Server Message").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5360
5361 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5362
5363}
5364
5365else
5366
5367//Toggle Message Log
5368if (FunctioName.startsWith("message log")) {
5369
5370 const guild = message.guild;
5371 var name = peeky.serverData.get(keySF, "message_log_bonus_setting");
5372 var channel = guild.channels.find(c=> c.name == name);
5373
5374 if(peeky.channelData.get(keyCF, "message_log_bonus") == true) {peeky.channelData.set(keyCF, false, "message_log_bonus");}
5375 else peeky.channelData.set(keyCF, true, "message_log_bonus");
5376
5377 //Channel Creating
5378 if (!channel) {
5379
5380 if (!ChannelCooldown.has(message.guild.id)) {
5381
5382 if (ManageChannels == true) {
5383
5384 ChannelCooldown.add(message.guild.id);
5385 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5386
5387 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5388 .then(async function (channel) {
5389 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true }).catch(error => ErrorBag.add(error));
5390 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false }).catch(error => ErrorBag.add(error));
5391 }).catch(function(err) { ErrorBag.add(err); });
5392
5393 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Message Log"));
5394
5395 };
5396 } else {
5397 InfoMessages.push(CooldownMessage2[Language]);
5398 };
5399 };
5400
5401 if (peeky.channelData.get(keyCF, "message_log_bonus") == true) {
5402 var StatusString = EnableStrings[Language];
5403 } else {
5404 var StatusString = DisableStrings[Language];
5405 };
5406
5407 const embed = {"description": TranslatedMessages[Language].replace("X001", "Message Log").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5408
5409 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5410
5411}
5412
5413else
5414
5415//Toggle Stream Announcements
5416if (FunctioName.startsWith("stream announcements")) {
5417
5418 const guild = message.guild;
5419 var name = peeky.serverData.get(keySF, "stream_announcements_bonus_setting");
5420 var channel = guild.channels.find(c=> c.name == name);
5421
5422 if(peeky.serverData.get(keySF, "stream_announcements_bonus") == true) {peeky.serverData.set(keySF, false, "stream_announcements_bonus");}
5423 else peeky.serverData.set(keySF, true, "stream_announcements_bonus");
5424
5425 //Channel Creating
5426 if (!channel) {
5427
5428 if (!ChannelCooldown.has(message.guild.id)) {
5429
5430 if (ManageChannels == true) {
5431
5432 ChannelCooldown.add(message.guild.id);
5433 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5434
5435 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5436 .then(async function (channel) {
5437 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true }).catch(error => ErrorBag.add(error));
5438 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false }).catch(error => ErrorBag.add(error));
5439 }).catch(function(err) { ErrorBag.add(err); });
5440
5441 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Stream Announcements"));
5442
5443 };
5444
5445 } else {
5446 InfoMessages.push(CooldownMessage2[Language]);
5447 };
5448 };
5449
5450 if (peeky.serverData.get(keySF, "stream_announcements_bonus") == true) {
5451 var StatusString = EnableStrings[Language];
5452 } else {
5453 var StatusString = DisableStrings[Language];
5454 };
5455
5456 const embed = {"description": TranslatedMessages[Language].replace("X001", "Stream Announcements").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5457
5458 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5459
5460}
5461
5462else
5463
5464//Toggle Member Counter
5465if (FunctioName.startsWith("member counter")) {
5466
5467 const guild = message.guild;
5468 const name = peeky.serverData.get(keySF, "member_counter_bonus_setting") + ": ...";
5469 var id = peeky.serverData.get(keySF, "member_counter_bonus_id");
5470 var channel = guild.channels.find(c=> c.id == id);
5471
5472 if(peeky.serverData.get(keySF, "member_counter_bonus") == true) {peeky.serverData.set(keySF, false, "member_counter_bonus");}
5473 else peeky.serverData.set(keySF, true, "member_counter_bonus");
5474
5475 //Channel Creating
5476 if (!channel) {
5477
5478 if (!ChannelCooldown.has(message.guild.id)) {
5479
5480 if (ManageChannels == true) {
5481
5482 ChannelCooldown.add(message.guild.id);
5483 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5484
5485 await message.guild.createChannel(name, { type: 'voice', reason: "Channel created by @" + message.author.tag + " through a function." })
5486 .then(async function (channel) {
5487 peeky.serverData.set(keySF, channel.id, "member_counter_bonus_id");
5488 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { CONNECT: true }).catch(error => ErrorBag.add(error));
5489 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { CONNECT: false }).catch(error => ErrorBag.add(error));
5490 }).catch(function(err) { ErrorBag.add(err); });
5491
5492 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Member Counter"));
5493
5494 };
5495
5496 } else {
5497 InfoMessages.push(CooldownMessage2[Language]);
5498 };
5499 };
5500
5501 if (peeky.serverData.get(keySF, "member_counter_bonus") == true) {
5502 var StatusString = EnableStrings[Language];
5503 } else {
5504 var StatusString = DisableStrings[Language];
5505 };
5506
5507 const embed = {"description": TranslatedMessages[Language].replace("X001", "Member Counter").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5508
5509 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5510
5511}
5512
5513else
5514
5515//Toggle Reddit Posts
5516if (FunctioName.startsWith("reddit posts")) {
5517
5518 const guild = message.guild;
5519 const name = peeky.serverData.get(keySF, "reddit_posts_bonus_setting");
5520 var channel = guild.channels.find(c=> c.name == name);
5521
5522 if(peeky.serverData.get(keySF, "reddit_posts_bonus") == true) {peeky.serverData.set(keySF, false, "reddit_posts_bonus");}
5523 else peeky.serverData.set(keySF, true, "reddit_posts_bonus");
5524
5525 //Channel Creating
5526 if (!channel) {
5527
5528 if (!ChannelCooldown.has(message.guild.id)) {
5529
5530 if (ManageChannels == true) {
5531
5532 ChannelCooldown.add(message.guild.id);
5533 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5534
5535 await message.guild.createChannel(name, { type: 'text', reason: "Channel created by @" + message.author.tag + " through a function." })
5536 .then(async function (channel) {
5537 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { SEND_MESSAGES: true }).catch(error => ErrorBag.add(error));
5538 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { SEND_MESSAGES: false }).catch(error => ErrorBag.add(error));
5539 }).catch(function(err) { ErrorBag.add(err); });
5540
5541 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Reddit Posts"));
5542
5543 };
5544
5545 } else {
5546 InfoMessages.push(CooldownMessage2[Language]);
5547 };
5548 };
5549
5550 if (peeky.serverData.get(keySF, "reddit_posts_bonus") == true) {
5551 var StatusString = EnableStrings[Language];
5552 } else {
5553 var StatusString = DisableStrings[Language];
5554 };
5555
5556 const embed = {"description": TranslatedMessages[Language].replace("X001", "Reddit Posts").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5557
5558 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5559
5560}
5561
5562else
5563
5564//Toggle Server Age
5565if (FunctioName.startsWith("server age")) {
5566
5567 const guild = message.guild;
5568 const name = "Server Age: ...";
5569 var id = peeky.serverData.get(keySF, "server_age_bonus_id");
5570 var channel = guild.channels.find(c=> c.id == id);
5571
5572 if(peeky.serverData.get(keySF, "server_age_bonus") == true) {peeky.serverData.set(keySF, false, "server_age_bonus");}
5573 else peeky.serverData.set(keySF, true, "server_age_bonus");
5574
5575 //Channel Creating
5576 if (!channel) {
5577
5578 if (!ChannelCooldown.has(message.guild.id)) {
5579
5580 if (ManageChannels == true) {
5581
5582 ChannelCooldown.add(message.guild.id);
5583 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5584
5585 await message.guild.createChannel(name, { type: 'voice', reason: "Channel created by @" + message.author.tag + " through a function." })
5586 .then(async function (channel) {
5587 peeky.serverData.set(keySF, channel.id, "server_age_bonus_id");
5588 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { CONNECT: true }).catch(error => ErrorBag.add(error));
5589 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { CONNECT: false }).catch(error => ErrorBag.add(error));
5590 }).catch(function(err) { ErrorBag.add(err); });
5591
5592 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Server Age"));
5593
5594 };
5595
5596 } else {
5597 InfoMessages.push(CooldownMessage2[Language]);
5598 };
5599 };
5600
5601 if (peeky.serverData.get(keySF, "server_age_bonus") == true) {
5602 var StatusString = EnableStrings[Language];
5603 } else {
5604 var StatusString = DisableStrings[Language];
5605 };
5606
5607 const embed = {"description": TranslatedMessages[Language].replace("X001", "Server Age").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5608
5609 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5610
5611}
5612
5613else
5614
5615//Toggle Event Countdown
5616if (FunctioName.startsWith("event countdown")) {
5617
5618 const guild = message.guild;
5619 const name = "Countdown Starting Soon..."
5620 var id = peeky.serverData.get(keySF, "event_countdown_bonus_id");
5621 var channel = guild.channels.find(c=> c.id == id);
5622
5623 if(peeky.serverData.get(keySF, "event_countdown_bonus") == true) {peeky.serverData.set(keySF, false, "event_countdown_bonus");}
5624 else peeky.serverData.set(keySF, true, "event_countdown_bonus");
5625
5626 //Channel Creating
5627 if (!channel) {
5628
5629 if (!ChannelCooldown.has(message.guild.id)) {
5630
5631 if (ManageChannels == true) {
5632
5633 ChannelCooldown.add(message.guild.id);
5634 setTimeout(() => {ChannelCooldown.delete(message.guild.id)}, ChannelCooldownMS);
5635
5636 await message.guild.createChannel(name, { type: 'voice', reason: "Channel created by @" + message.author.tag + " through a function." })
5637 .then(async function (channel) {
5638 peeky.serverData.set(keySF, channel.id, "event_countdown_bonus_id");
5639 await channel.overwritePermissions(message.guild.members.find(r => r.id == PeekyId), { CONNECT: true }).catch(error => ErrorBag.add(error));
5640 await channel.overwritePermissions(message.guild.roles.find(r => r.name == '@everyone'), { CONNECT: false }).catch(error => ErrorBag.add(error));
5641 }).catch(function(err) { ErrorBag.add(err); });
5642
5643 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Event Countdown"));
5644
5645 };
5646
5647 } else {
5648 InfoMessages.push(CooldownMessage2[Language]);
5649 };
5650 };
5651
5652 if (peeky.serverData.get(keySF, "event_countdown_bonus") == true) {
5653 var StatusString = EnableStrings[Language];
5654 } else {
5655 var StatusString = DisableStrings[Language];
5656 };
5657
5658 const embed = {"description": TranslatedMessages[Language].replace("X001", "Event Countdown").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5659
5660 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5661
5662}
5663
5664else
5665
5666//Toggle Game Roles
5667if (FunctioName.startsWith("game roles")) {
5668
5669 if(peeky.serverData.get(keySF, "game_roles_bonus") == true) {peeky.serverData.set(keySF, false, "game_roles_bonus")}
5670 else peeky.serverData.set(keySF, true, "game_roles_bonus");
5671
5672 if (peeky.serverData.get(keySF, "game_roles_bonus") == true) {
5673 var StatusString = EnableStrings[Language];
5674 } else {
5675 var StatusString = DisableStrings[Language];
5676 };
5677
5678 const embed = {"description": TranslatedMessages[Language].replace("X001", "Game Roles").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5679
5680 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5681
5682}
5683
5684else
5685
5686//Toggle Clear Nicknames
5687if (FunctioName.startsWith("clear nicknames")) {
5688
5689 if(peeky.serverData.get(keySF, "clear_nicknames_bonus") == true) {peeky.serverData.set(keySF, false, "clear_nicknames_bonus");}
5690 else peeky.serverData.set(keySF, true, "clear_nicknames_bonus");
5691
5692 if (peeky.serverData.get(keySF, "clear_nicknames_bonus") == true) {
5693 var StatusString = EnableStrings[Language];
5694 } else {
5695 var StatusString = DisableStrings[Language];
5696 };
5697
5698 const embed = {"description": TranslatedMessages[Language].replace("X001", "Clear Nicknames").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5699
5700 message.channel.send({ embed })
5701 .catch(error => ErrorBag.add(error));
5702
5703}
5704
5705else
5706
5707//Toggle Suspicion Alert
5708if (FunctioName.startsWith("suspicion alert")) {
5709
5710 if(peeky.serverData.get(keySF, "suspicion_alert_bonus") == true) {peeky.serverData.set(keySF, false, "suspicion_alert_bonus");}
5711 else peeky.serverData.set(keySF, true, "suspicion_alert_bonus");
5712
5713 if (peeky.serverData.get(keySF, "suspicion_alert_bonus") == true) {
5714 var StatusString = EnableStrings[Language];
5715 } else {
5716 var StatusString = DisableStrings[Language];
5717 };
5718
5719 const embed = {"description": TranslatedMessages[Language].replace("X001", "Suspicion Alert").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5720
5721 message.channel.send({ embed })
5722 .catch(error => ErrorBag.add(error));
5723
5724}
5725
5726else
5727
5728//Toggle Vote Kick
5729if (FunctioName.startsWith("vote kick")) {
5730
5731 if(peeky.serverData.get(keySF, "vote_kick_bonus") == true) {peeky.serverData.set(keySF, false, "vote_kick_bonus");}
5732 else peeky.serverData.set(keySF, true, "vote_kick_bonus");
5733
5734 if (peeky.serverData.get(keySF, "vote_kick_bonus") == true) {
5735 var StatusString = EnableStrings[Language];
5736 } else {
5737 var StatusString = DisableStrings[Language];
5738 };
5739
5740 const embed = {"description": TranslatedMessages[Language].replace("X001", "Vote Kick").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5741
5742 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5743
5744}
5745
5746else
5747
5748//Toggle Flood Protection
5749if (FunctioName.startsWith("flood protection")) {
5750
5751 if(peeky.serverData.get(keySF, "flood_protection_bonus") == true) {peeky.serverData.set(keySF, false, "flood_protection_bonus");}
5752 else peeky.serverData.set(keySF, true, "flood_protection_bonus");
5753
5754 if (peeky.serverData.get(keySF, "flood_protection_bonus") == true) {
5755 var StatusString = EnableStrings[Language];
5756 } else {
5757 var StatusString = DisableStrings[Language];
5758 };
5759
5760 const embed = {"description": TranslatedMessages[Language].replace("X001", "Flood Protection").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5761
5762 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5763
5764}
5765
5766else
5767
5768//Toggle Nickname Saver
5769if (FunctioName.startsWith("nickname saver")) {
5770
5771 if(peeky.serverData.get(keySF, "nick_saver_bonus") == true) {peeky.serverData.set(keySF, false, "nick_saver_bonus");}
5772 else peeky.serverData.set(keySF, true, "nick_saver_bonus");
5773
5774 if (peeky.serverData.get(keySF, "nick_saver_bonus") == true) {
5775 var StatusString = EnableStrings[Language];
5776 } else {
5777 var StatusString = DisableStrings[Language];
5778 };
5779
5780 const embed = {"description": TranslatedMessages[Language].replace("X001", "Nickname Saver").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5781
5782 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5783
5784}
5785
5786else
5787
5788//Toggle Streamer Role
5789if (FunctioName.startsWith("streamer role")) {
5790
5791 const guild = message.guild;
5792 var name = peeky.serverData.get(keySF, "streamer_role_bonus_setting");
5793 var role = guild.roles.find(c=> c.name == name);
5794
5795 if(peeky.serverData.get(keySF, "streamer_role_bonus") == true) {peeky.serverData.set(keySF, false, "streamer_role_bonus");}
5796 else peeky.serverData.set(keySF, true, "streamer_role_bonus");
5797
5798 if (!role) {
5799
5800 if (!RoleCooldown.has(message.guild.id)) {
5801
5802 if (ManageRoles == true) {
5803
5804 RoleCooldown.add(message.guild.id);
5805 setTimeout(() => {RoleCooldown.delete(message.guild.id)}, RoleCooldownMS);
5806
5807 message.guild.createRole({
5808 name: name,
5809 color: "#6441A4"
5810 }).catch(error => ErrorBag.add(error));
5811
5812 InfoMessages.push(ChannelCreation.replace("X001", name).replace("X002", "Streamer Role"));
5813
5814 };
5815 } else {
5816 InfoMessages.push(CooldownMessage3[Language]);
5817 };
5818 };
5819
5820 if (peeky.serverData.get(keySF, "streamer_role_bonus") == true) {
5821 var StatusString = EnableStrings[Language];
5822 } else {
5823 var StatusString = DisableStrings[Language];
5824 };
5825
5826 const embed = {"description": TranslatedMessages[Language].replace("X001", "Streamer Role").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5827
5828 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5829
5830}
5831
5832else
5833
5834//Toggle Banned Words
5835if (FunctioName.startsWith("banned words")) {
5836
5837 if (peeky.channelData.get(keyCF, "banned_words_bonus") == true) {peeky.channelData.set(keyCF, false, "banned_words_bonus")}
5838 else peeky.channelData.set(keyCF, true, "banned_words_bonus");
5839
5840 if (peeky.channelData.get(keyCF, "banned_words_bonus") == true) {
5841 var StatusString = EnableStrings[Language];
5842 } else {
5843 var StatusString = DisableStrings[Language];
5844 };
5845
5846 const embed = {"description": TranslatedMessages[Language].replace("X001", "Banned Words").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5847
5848 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5849
5850}
5851
5852else
5853
5854//Toggle Spoiler Lock
5855if (FunctioName.startsWith("spoiler lock")) {
5856
5857 if (peeky.serverData.get(keySF, "spoiler_only_bonus") == true) {peeky.serverData.set(keySF, false, "spoiler_only_bonus")}
5858 else peeky.serverData.set(keySF, true, "spoiler_only_bonus");
5859
5860 if (peeky.serverData.get(keySF, "spoiler_only_bonus") == true) {
5861 var StatusString = EnableStrings[Language];
5862 } else {
5863 var StatusString = DisableStrings[Language];
5864 };
5865
5866 const embed = {"description": TranslatedMessages[Language].replace("X001", "Spoiler Lock").replace("X002", StatusString) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
5867
5868 message.channel.send({ embed })
5869 .catch(error => ErrorBag.add(error));
5870
5871}
5872 else
5873{
5874 const embed = {"description": ErrorMessage10[Language], "color": EmbedColor};
5875 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5876};
5877
5878}
5879 else
5880{
5881 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
5882 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5883};
5884
5885}
5886 else
5887{
5888 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
5889 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5890};
5891
5892}
5893 else if (FunctioName == "")
5894{
5895 const embed = {"description": ErrorMessage17[Language], "color": EmbedColor};
5896 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5897};
5898
5899};
5900
5901//Set
5902if (CommandName.startsWith("set")) {
5903
5904 var FunctioName = CommandName.split("set")[1];
5905
5906if (FunctioName.startsWith(" ")) {
5907
5908 FunctioName = FunctioName.replace(" ", "");
5909
5910if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
5911
5912if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
5913
5914 var TranslatedMessages = [SuccessIcon + " The setting for the **X001** function is now **X002**.", SuccessIcon + " Nastavení pro funkci **X001** je nyní **X002**."];
5915 var TranslatedFullSetting = [ErrorIcon + " The setting for the **X001** function is full.", ErrorIcon + " Nastavení pro funcki **X001** je plné."];
5916
5917//Set Welcome Messages
5918if (FunctioName.startsWith("welcome messages ")) {
5919
5920 var ChannelName = CommandName.split("welcome messages ")[1];
5921 var FixedChannelName = function_RemoveFormatting(ChannelName, "channel", true);
5922 peeky.serverData.set(keySF, FixedChannelName, "welcome_messages_bonus_setting");
5923
5924 const embed = {"description": TranslatedMessages[Language].replace("X001", "Welcome Messages").replace("X002", "#" + peeky.serverData.get(keySF, "welcome_messages_bonus_setting")), "color": EmbedColor};
5925 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5926
5927}
5928
5929else
5930
5931//Set Join Role
5932if (FunctioName.startsWith("join role ")) {
5933
5934 var RoleName = CommandName.split("join role ")[1];
5935 peeky.serverData.set(keySF, function_RemoveFormatting(RoleName, "role"), "join_role_bonus_setting", true);
5936
5937 const embed = {"description": TranslatedMessages[Language].replace("X001", "Join Role").replace("X002", "@" + peeky.serverData.get(keySF, "SETTING")), "color": EmbedColor};
5938 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5939
5940}
5941
5942else
5943
5944//Set Streamer Role
5945if (FunctioName.startsWith("streamer role ")) {
5946
5947 var RoleName = CommandName.split("streamer role ")[1];
5948 peeky.serverData.set(keySF, function_RemoveFormatting(RoleName, "role"), "streamer_role_bonus_setting", true);
5949
5950 const embed = {"description": TranslatedMessages[Language].replace("X001", "Streamer Role").replace("X002", "@" + peeky.serverData.get(keySF, "streamer_role_bonus_setting")), "color": EmbedColor};
5951 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5952
5953}
5954
5955else
5956
5957//Set Automatic Reactions
5958if (FunctioName.startsWith("automatic reactions ")) {
5959
5960 var ReactionName = CommandName.split("automatic reactions ")[1];
5961 var FixedReactionName = function_RemoveFormatting(ReactionName, "other", true);
5962 peeky.serverData.set(keySF, FixedReactionName, "automatic_reactions_bonus_setting");
5963
5964 const embed = {"description": TranslatedMessages[Language].replace("X001", "Automatic Reactions").replace("X002", ":" + peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_upvote:** and **:" + peeky.serverData.get(keySF, "automatic_reactions_bonus_setting") + "_downvote:"), "color": EmbedColor};
5965 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5966
5967}
5968
5969else
5970
5971//Set Classification Wall
5972if (FunctioName.startsWith("classification wall ")) {
5973
5974 var ChannelName = CommandName.split("classification wall ")[1];
5975 peeky.serverData.set(keySF, function_RemoveFormatting(ChannelName, "role"), "donor_wall_bonus_setting", true);
5976 peeky.serverData.set(keySF, function_RemoveFormatting(ChannelName, "channel") + "s", "donor_wall_bonus_channel", true);
5977
5978 const embed = {"description": TranslatedMessages[Language].replace("X001", "Classification Wall").replace("X002", "#" + peeky.serverData.get(keySF, "donor_wall_bonus_channel") + "** and **@" + peeky.serverData.get(keySF, "donor_wall_bonus_setting")), "color": EmbedColor};
5979 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5980
5981}
5982
5983else
5984
5985//Set Ticket System
5986if (FunctioName.startsWith("ticket system ")) {
5987
5988 var RoleName = CommandName.split("ticket system ")[1];
5989 peeky.serverData.set(keySF, function_RemoveFormatting(RoleName, "role"), "ticket_system_bonus_setting", true);
5990
5991 const embed = {"description": TranslatedMessages[Language].replace("X001", "Ticket System").replace("X002", "" + peeky.serverData.get(keySF, "ticket_system_bonus_setting")), "color": EmbedColor};
5992 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
5993
5994}
5995
5996else
5997
5998//Set Member Counter
5999if (FunctioName.startsWith("member counter ")) {
6000
6001 var CounterName = CommandName.split("member counter ")[1];
6002
6003 peeky.serverData.set(keySF, function_RemoveFormatting(CounterName, "other"), "member_counter_bonus_setting", true);
6004
6005 const embed = {"description": TranslatedMessages[Language].replace("X001", "Member Counter").replace("X002", "" + peeky.serverData.get(keySF, "member_counter_bonus_setting")), "color": EmbedColor};
6006 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6007
6008}
6009
6010else
6011
6012//Set Event Countdown
6013if (FunctioName.startsWith("event countdown ")) {
6014
6015 var Timestamp = CommandName.split("event countdown ")[1];
6016
6017 if (!isNaN(Timestamp)) {
6018
6019 var GivenDate = new Date(Number(Timestamp));
6020
6021 peeky.serverData.set(keySF, GivenDate.getTime(), "event_countdown_bonus_setting");
6022
6023 const embed = {"description": TranslatedMessages[Language].replace("X001", "Event Countdown").replace("X002", "" + peeky.serverData.get(keySF, "event_countdown_bonus_setting")), "color": EmbedColor};
6024 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6025
6026 }
6027 else
6028 {
6029 const embed = {"description": ErrorIcon + " The provided timestamp is invalid.", "color": EmbedColor};
6030 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6031 };
6032
6033}
6034
6035else
6036
6037//Set Spoiler Lock
6038if (FunctioName.startsWith("spoiler lock ")) {
6039
6040 var GivenMinutes = CommandName.split("spoiler lock ")[1];
6041
6042 if (!isNaN(GivenMinutes) && GivenMinutes >= 0) {
6043
6044 peeky.serverData.set(keySF, GivenMinutes, "spoiler_lock_bonus_setting");
6045
6046 if (GivenMinutes == 0) {GivenMinutes = "never"} else {GivenMinutes = GivenMinutes + " minutes"}
6047
6048 const embed = {"description": TranslatedMessages[Language].replace("X001", "Spoiler Lock").replace("X002", "" + GivenMinutes), "color": EmbedColor};
6049 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6050
6051 }
6052 else
6053 {
6054 const embed = {"description": ErrorMessage9[Language], "color": EmbedColor};
6055 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6056 };
6057
6058}
6059
6060else
6061
6062//Set Suspicion Alert
6063if (FunctioName.startsWith("suspicion alert ")) {
6064
6065 var BanAmount = CommandName.split("suspicion alert ")[1];
6066
6067 if (isNaN(BanAmount) == false) {
6068
6069 peeky.serverData.set(keySF, Number(BanAmount), "suspicion_alert_bonus_setting");
6070
6071 const embed = {"description": TranslatedMessages[Language].replace("X001", "Suspicion Alert").replace("X002", "" + peeky.serverData.get(keySF, "suspicion_alert_bonus_setting") + " bans"), "color": EmbedColor};
6072 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6073
6074 }
6075 else
6076 {
6077 const embed = {"description": ErrorMessage9[Language], "color": EmbedColor};
6078 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6079 };
6080
6081}
6082
6083else
6084
6085//Set Vote Kick
6086if (FunctioName.startsWith("vote kick ")) {
6087
6088 var VoteAmount = CommandName.split("vote kick ")[1];
6089
6090 if (isNaN(VoteAmount) == false && VoteAmount > 0) {
6091
6092 peeky.serverData.set(keySF, Number(VoteAmount), "vote_kick_bonus_setting");
6093
6094 const embed = {"description": TranslatedMessages[Language].replace("X001", "Vote Kick").replace("X002", "" + peeky.serverData.get(keySF, "vote_kick_bonus_setting") + " votes"), "color": EmbedColor};
6095 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6096
6097 }
6098 else
6099 {
6100 const embed = {"description": ErrorIcon + " The provided amount must be greater than **1**.", "color": EmbedColor};
6101 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6102 };
6103
6104}
6105
6106else
6107
6108//Set Message Log
6109if (FunctioName.startsWith("message log ")) {
6110
6111 var ChannelName = CommandName.split("message log ")[1];
6112 var FixedChannelName = function_RemoveFormatting(ChannelName, "channel", true);
6113
6114 peeky.serverData.set(keySF, FixedChannelName, "message_log_bonus_setting");
6115
6116 const embed = {"description": TranslatedMessages[Language].replace("X001", "Message Log").replace("X002", "#" + peeky.serverData.get(keySF, "message_log_bonus_setting")), "color": EmbedColor};
6117 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6118
6119}
6120
6121else
6122
6123//Set Stream Announcements
6124if (FunctioName.startsWith("stream announcements ")) {
6125
6126 var ChannelName = CommandName.split("stream announcements ")[1];
6127 var FixedChannelName = function_RemoveFormatting(ChannelName, "channel", true);
6128
6129 peeky.serverData.set(keySF, FixedChannelName, "stream_announcements_bonus_setting");
6130
6131 const embed = {"description": TranslatedMessages[Language].replace("X001", "Stream Announcements").replace("X002", "#" + peeky.serverData.get(keySF, "stream_announcements_bonus_setting")), "color": EmbedColor};
6132 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6133
6134}
6135
6136else
6137
6138//Set Reddit Posts
6139if (FunctioName.startsWith("reddit posts ")) {
6140
6141 var ChannelName = CommandName.split("reddit posts ")[1];
6142 var FixedChannelName = function_RemoveFormatting(ChannelName, "channel", true);
6143
6144 peeky.serverData.set(keySF, FixedChannelName, "reddit_posts_bonus_setting");
6145
6146 const embed = {"description": TranslatedMessages[Language].replace("X001", "Reddit Posts").replace("X002", "r/" + peeky.serverData.get(keySF, "reddit_posts_bonus_setting")), "color": EmbedColor};
6147 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6148
6149}
6150
6151else
6152
6153//Set Clear Nicknames
6154if (FunctioName.startsWith("clear nicknames ")) {
6155
6156 var NewSetting = CommandName.split("clear nicknames ")[1];
6157 var FixedSetting = function_RemoveFormatting(NewSetting, "other", true);
6158 peeky.serverData.set(keySF, FixedSetting, "clear_nicknames_bonus_setting");
6159
6160 const embed = {"description": TranslatedMessages[Language].replace("X001", "Clear Nicknames").replace("X002", "" + peeky.serverData.get(keySF, "clear_nicknames_bonus_setting")), "color": EmbedColor};
6161 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6162
6163}
6164
6165else
6166
6167//Set Flood Protection
6168if (FunctioName.startsWith("flood protection ")) {
6169
6170 var NewSetting = CommandName.split("flood protection ")[1];
6171
6172 if (NewSetting > 0 && NewSetting <= 10) {
6173
6174 peeky.serverData.set(keySF, Number(NewSetting), "flood_protection_bonus_setting");
6175
6176 const embed = {"description": TranslatedMessages[Language].replace("X001", "Flood Protection").replace("X002", "" + peeky.serverData.get(keySF, "flood_protection_bonus_setting") + " strikes"), "color": EmbedColor};
6177 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6178
6179 }
6180 else
6181 {
6182 const embed = {"description": ErrorIcon + " The provided amount must be between **1** and **10**.", "color": EmbedColor};
6183 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6184 };
6185
6186}
6187
6188else
6189
6190//Set Server Message
6191if (FunctioName.startsWith("server message ")) {
6192
6193 var ServerMessageContent = CommandName.split("server message ")[1];
6194 var ServerMessagePreview = ServerMessageContent;
6195 var FixedMsgEnd = "";
6196 var TagString = "";
6197
6198 peeky.serverData.set(keySF, ServerMessageContent, "server_message_bonus_setting");
6199
6200 ServerMessagePreview = function_RemoveFormatting(ServerMessagePreview, "sm", true);
6201
6202 if (ServerMessageContent.includes(GuildNameTag)) { TagString += "\n\n" + InfoIcon + " The **" + GuildNameTag + "** tag was detected." };
6203 if (ServerMessageContent.includes(GuildSizeTag)) { TagString += "\n\n" + InfoIcon + " The **" + GuildSizeTag + "** tag was detected." };
6204 if (ServerMessageContent.includes(GuildOwnerTag)) { TagString += "\n\n" + InfoIcon + " The **" + GuildOwnerTag + "** tag was detected." };
6205 if (ServerMessageContent.includes(GuildVerificationTag)) { TagString += "\n\n" + InfoIcon + " The **" + GuildVerificationTag + "** tag was detected." };
6206 if (ServerMessageContent.includes(GuildAcronymTag)) { TagString += "\n\n" + InfoIcon + " The **" + GuildAcronymTag + "** tag was detected." };
6207
6208 const embed = {"description": TranslatedMessages[Language].replace("X001", "Server Message").replace("X002", ServerMessagePreview + FixedMsgEnd) + TagString, "color": EmbedColor};
6209 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6210
6211}
6212
6213else
6214
6215//Set Banned Words
6216if (FunctioName.startsWith("banned words ")) {
6217
6218if (peeky.serverData.get(keySF, "banned_words_bonus_setting").length < Setting.BannedWordsLimit) {
6219
6220 var ReceivedArray = function_RemoveFormatting(CommandName.split("banned words ")[1].toLowerCase(), "other", true);
6221 peeky.serverData.get(keySF, "banned_words_bonus_setting").push(ReceivedArray);
6222
6223 var EndString = ""; var FixedArray = peeky.serverData.get(keySF, "banned_words_bonus_setting");
6224
6225 const embed = {"description": TranslatedMessages[Language].replace("X001", "Banned Words").replace("X002", FixedArray.join("**, **") + EndString), "color": EmbedColor};
6226 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6227
6228}
6229 else
6230{
6231 const embed = {"description": TranslatedFullSetting[Language], "color": EmbedColor};
6232 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6233};
6234
6235}
6236
6237else
6238
6239//Set Reaction Roles
6240if (FunctioName.startsWith("reaction roles ")) {
6241
6242if (peeky.serverData.get(keySF, "reaction_roles_bonus_setting").length < Setting.ReactionRolesLimit) {
6243
6244 var ReceivedArray = function_RemoveFormatting(CommandName.split("reaction roles ")[1], "other", true);
6245 peeky.serverData.get(keySF, "reaction_roles_bonus_setting").push(ReceivedArray);
6246
6247 var EndString = ""; var FixedArray = peeky.serverData.get(keySF, "reaction_roles_bonus_setting");
6248
6249 const embed = {"description": TranslatedMessages[Language].replace("X001", "Reaction Roles").replace("X002", FixedArray.join("**, **") + EndString), "color": EmbedColor};
6250 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6251
6252}
6253 else
6254{
6255 const embed = {"description": TranslatedFullSetting[Language], "color": EmbedColor};
6256 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6257};
6258
6259}
6260
6261else
6262
6263//Set Role Saver
6264if (FunctioName.startsWith("role saver ")) {
6265
6266if (peeky.serverData.get(keySF, "role_saver_bonus_setting").length < Setting.RoleSaverLimit) {
6267
6268 var ReceivedArray = function_RemoveFormatting(CommandName.split("role saver ")[1], "other", true);
6269 peeky.serverData.get(keySF, "role_saver_bonus_setting").push(ReceivedArray);
6270
6271 var EndString = ""; var FixedArray = peeky.serverData.get(keySF, "role_saver_bonus_setting");
6272
6273 const embed = {"description": TranslatedMessages[Language].replace("X001", "Role Saver").replace("X002", FixedArray.join("**, **") + EndString), "color": EmbedColor};
6274 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6275
6276}
6277 else
6278{
6279 const embed = {"description": TranslatedFullSetting[Language], "color": EmbedColor};
6280 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6281};
6282
6283}
6284
6285else
6286
6287//Set Game Roles
6288if (FunctioName.startsWith("game roles ")) {
6289
6290if (peeky.serverData.get(keySF, "game_roles_bonus_setting").length < Setting.GameRolesLimit) {
6291
6292 var ReceivedArray = function_RemoveFormatting(CommandName.split("game roles ")[1], "other", true);
6293 peeky.serverData.get(keySF, "game_roles_bonus_setting").push(ReceivedArray);
6294
6295 var EndString = ""; var FixedArray = peeky.serverData.get(keySF, "game_roles_bonus_setting");
6296
6297 const embed = {"description": TranslatedMessages[Language].replace("X001", "Game Roles").replace("X002", "@" + FixedArray.join("**, **@") + EndString), "color": EmbedColor};
6298 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6299
6300}
6301 else
6302{
6303 const embed = {"description": TranslatedFullSetting[Language], "color": EmbedColor};
6304 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6305};
6306
6307}
6308 else
6309{
6310 const embed = {"description": ErrorMessage10[Language], "color": EmbedColor};
6311 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6312};
6313
6314}
6315 else
6316{
6317 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
6318 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6319};
6320
6321}
6322 else
6323{
6324 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
6325 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6326};
6327
6328}
6329 else if (FunctioName == "")
6330{
6331 const embed = {"description": ErrorMessage17[Language], "color": EmbedColor};
6332 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6333};
6334
6335};
6336
6337//Clear
6338if (CommandName.startsWith("clear")) {
6339
6340 var FunctioName = CommandName.split("clear")[1];
6341
6342if (FunctioName.startsWith(" ")) {
6343
6344 FunctioName = FunctioName.replace(" ", "");
6345
6346if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
6347
6348if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
6349
6350 var TranslatedMessages = [SuccessIcon + " Cleared the setting for the **X001** function.", SuccessIcon + " Nastavení pro funkci **X001** bylo vyčištěno."];
6351
6352//Clear Banned Words
6353if (FunctioName.startsWith("banned words")) {
6354
6355 peeky.serverData.set(keySF, [], "banned_words_bonus_setting");
6356
6357 const embed = {"description": TranslatedMessages[Language].replace("X001", "Banned Words"), "color": EmbedColor};
6358 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6359
6360}
6361
6362else
6363
6364//Clear Reaction Roles
6365if (FunctioName.startsWith("reaction roles")) {
6366
6367 peeky.serverData.set(keySF, [], "reaction_roles_bonus_setting");
6368
6369 const embed = {"description": TranslatedMessages[Language].replace("X001", "Reaction Roles"), "color": EmbedColor};
6370 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6371
6372}
6373
6374else
6375
6376//Clear Role Saver
6377if (FunctioName.startsWith("role saver")) {
6378
6379 peeky.serverData.set(keySF, [], "role_saver_bonus_setting");
6380
6381 const embed = {"description": TranslatedMessages[Language].replace("X001", "Role Saver"), "color": EmbedColor};
6382 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6383
6384}
6385
6386else
6387
6388//Clear Game Roles
6389if (FunctioName.startsWith("game roles")) {
6390
6391 peeky.serverData.set(keySF, [], "game_roles_bonus_setting");
6392
6393 const embed = {"description": TranslatedMessages[Language].replace("X001", "Game Roles"), "color": EmbedColor};
6394 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6395
6396}
6397 else
6398{
6399 const embed = {"description": ErrorMessage10[Language], "color": EmbedColor};
6400 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6401};
6402
6403}
6404 else
6405{
6406 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
6407 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6408};
6409
6410}
6411 else
6412{
6413 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
6414 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6415};
6416
6417}
6418 else if (FunctioName == "")
6419{
6420 const embed = {"description": ErrorMessage17[Language], "color": EmbedColor};
6421 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6422};
6423
6424};
6425
6426//BuyDescription
6427if (CommandName.startsWith("buydescription")) {
6428
6429 var CommandArgument = CommandName.split("buydescription")[1];
6430
6431if (CommandArgument.startsWith(" ")) {
6432
6433 CommandArgument = CommandArgument.replace(" ", "");
6434
6435 var UpdatedAmount = CommandArgument.length;
6436 var NewLinesCount = 0;
6437 var MaxLines = "\n";
6438 var str = CommandArgument;
6439
6440if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) { UpdatedAmount = 0; };
6441
6442 for(var i = NewLinesCount = 0; i<str.length; NewLinesCount+=+(MaxLines===str[i++]));
6443
6444 if (peeky.userData.get(key, "Gredit") >= UpdatedAmount) {
6445
6446 if (CommandArgument !== RandomString) {
6447
6448 if (NewLinesCount < 2) {
6449
6450 var TranslatedMessages = [SuccessIcon + " You have bought a new description for **X001" + " " + GreditIcon + "**.", SuccessIcon + " Koupil jste si nový popisek za **X001" + " " + GreditIcon + "**."];
6451 const embed = {"description": TranslatedMessages[Language].replace("X001", UpdatedAmount.toLocaleString('en')), "color": EmbedColor};
6452 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6453
6454 peeky.userData.set(key, CommandArgument, "Description");
6455 peeky.userData.math(key, "-", UpdatedAmount, "Gredit");
6456
6457 }
6458 else
6459 {
6460 const embed = {"description": ErrorMessage2[Language], "color": EmbedColor};
6461 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6462 };
6463
6464 }
6465 else
6466 {
6467
6468 var TranslatedMessages = [SuccessIcon + " You have bought a random description for **X001**" + " " + GreditIcon + "**.", SuccessIcon + " Koupil jste si náhodny popisek za **X001**" + " " + GreditIcon + "**."];
6469 const embed = {"description": TranslatedMessages[Language].replace("X001", UpdatedAmount.toLocaleString('en')), "color": EmbedColor};
6470 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6471
6472 peeky.userData.set(key, function_RandomDescription(), "Description");
6473 peeky.userData.math(key, "-", UpdatedAmount, "Gredit");
6474
6475 };
6476
6477 }
6478 else
6479 {
6480 const embed = {"description": ErrorMessage1[Language], "color": EmbedColor};
6481 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6482 };
6483
6484}
6485 else if (CommandArgument == "")
6486{
6487 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
6488 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6489};
6490
6491};
6492
6493//BuyBackground
6494if (CommandName.startsWith("buybackground")) {
6495
6496 var Failed = true;
6497
6498 for(var i = 1; i <= Banners.length; i++) {
6499
6500 if (message.content == Prefix + "buybackground " + i) {
6501
6502 Failed = false;
6503
6504 if ((i !== 1) && (Banners[i - 1][Banner.Price] !== Exclusive)) {
6505
6506 if (!peeky.userData.get(key, "Inventory").includes(i)) {
6507
6508 if (peeky.userData.get(key, "Gredit") >= Banners[i - 1][Banner.Price]) {
6509
6510 var i = Number(i);
6511
6512 if (isNaN(peeky.userData.get(key, "Background")) == true) {
6513 var CustomBackgroundAmount = 1;
6514 } else { var CustomBackgroundAmount = 0; };
6515
6516 if (peeky.userData.get(key, "HorderBadge") == false && (peeky.userData.get(key, "Inventory").length + CustomBackgroundAmount) >= 10) {
6517
6518 InfoMessages.push(InfoMessage1[Language]);
6519 peeky.userData.set(key, true, "HorderBadge");
6520
6521 };
6522
6523 if (peeky.userData.get(key, "MinerBadge") == false && i == 283) {
6524
6525 InfoMessages.push(InfoMessage1[Language]);
6526 peeky.userData.set(key, true, "MinerBadge");
6527
6528 };
6529
6530 var RevenueID = Banners[i - 1][Banner.RevenueID];
6531 if (RevenueID !== undefined && peeky.userData.has(RevenueID) && message.author.id !== RevenueID && peeky.users.has(RevenueID)) {
6532 peeky.userData.math(RevenueID, "-", (Banners[i - 1][Banner.Price] / Setting.SellMultiplier), "Gredit");
6533 InfoMessages.push(InfoIcon + " Your purchase has generated **" + (Banners[i - 1][Banner.Price] / Setting.SellMultiplier).toLocaleString('en') + " " + GreditIcon + "** of revenue for **" + function_RemoveFormatting(peeky.users.get(RevenueID).username, "other", true) + "**.");
6534 };
6535
6536 peeky.userData.math(key, "-", Banners[i - 1][Banner.Price], "Gredit");
6537 peeky.userData.get(key, "Inventory").push(i);
6538
6539 var TranslatedMessages = [SuccessIcon + " You have bought the **X001** background for **X002" + " " + GreditIcon + "**.", SuccessIcon + " Koupil jste si pozadí **X001** za **X002" + " " + GreditIcon + "**."];
6540 var embed = {"description": TranslatedMessages[Language].replace("X001", function_GetBackgroundInfo(i, ["name"])).replace("X002", function_GetBackgroundInfo(i, ["price"])) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6541 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6542
6543 break;
6544
6545 } else {
6546 const embed = {"description": ErrorMessage1[Language], "color": EmbedColor};
6547 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6548
6549 break;
6550 };
6551
6552 } else {
6553 const embed = {"description": ErrorMessage14[Language], "color": EmbedColor};
6554 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6555
6556 break;
6557 };
6558
6559 } else {
6560 var TranslatedMessages = [ErrorIcon + " You cannot buy the default and exclusive backgrounds.", ErrorIcon + " Nemůžete si koupit základní a exlusivní pozadí."];
6561 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
6562 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6563
6564 break;
6565 };
6566
6567 };
6568
6569 };
6570
6571 if (Failed == true) {
6572 const embed = {"description": ErrorMessage16[Language], "color": EmbedColor};
6573 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6574 };
6575
6576};
6577
6578//CustomBackground
6579if (CommandName.startsWith("custombackground")) {
6580
6581 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) {
6582
6583 if (peeky.userData.get(key, "Gredit") > Setting.CustomBackgroundPrice) {
6584
6585 if (message.attachments.size > 0) {
6586
6587 var Thumbnail = message.attachments.array()[0].url;
6588
6589 if (function_DetectLink(Thumbnail) == true) {
6590
6591 if (peeky.userData.get(key, "PainterBadge") == false) {
6592
6593 InfoMessages.push(InfoMessage1[Language]);
6594 peeky.userData.set(key, true, "PainterBadge");
6595
6596 };
6597
6598 peeky.userData.math(key, "-", Setting.CustomBackgroundPrice, "Gredit");
6599 peeky.userData.set(key, Thumbnail, "Background");
6600
6601 const embed = {"description": SuccessIcon + " You have set a **Custom Background** for **" + Setting.CustomBackgroundPrice.toLocaleString('en') + " " + GreditIcon + "**." + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6602 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6603
6604 } else {
6605 const embed = {"description": ErrorIcon + " Failed to set your custom background.", "color": EmbedColor};
6606 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6607 };
6608
6609 } else {
6610 const embed = {"description": ErrorMessage20[Language], "color": EmbedColor};
6611 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6612 };
6613
6614 } else {
6615 const embed = {"description": ErrorMessage1[Language], "color": EmbedColor};
6616 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6617 };
6618
6619 } else {
6620 const embed = {"description": ErrorMessage11[Language], "color": EmbedColor};
6621 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6622 };
6623
6624};
6625
6626//SetBackground
6627if (CommandName.startsWith("setbackground")) {
6628
6629 var Failed = true;
6630
6631 for (var i = 1; i <= Banners.length; i++) {
6632
6633 if (message.content == Prefix + "setbackground " + i) {
6634
6635 Failed = false;
6636
6637 if (peeky.userData.get(key, "Inventory").includes(i)) {
6638
6639 var i = Number(i);
6640
6641 if (peeky.userData.get(key, "FashionBadge") == false && i !== 1) {
6642
6643 InfoMessages.push(InfoMessage1[0]);
6644 peeky.userData.set(key, true, "FashionBadge");
6645
6646 };
6647
6648 /*if (isNaN(peeky.userData.get(key, "Background")) == true) {
6649 InfoMessages.push(InfoIcon + " You have lost your **Custom Background**.");
6650 };*/
6651
6652 peeky.userData.set(key, i, "Background");
6653
6654 var TranslatedMessages = [SuccessIcon + " You have set the **X001** background.", SuccessIcon + " Nastavil jste si pozadí **X001**."];
6655 const embed = {"description": TranslatedMessages[Language].replace("X001", function_GetBackgroundInfo(i, ["name"])) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6656 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6657
6658 break;
6659
6660 }
6661 else
6662 {
6663
6664 const embed = {"description": ErrorMessage5[Language], "color": EmbedColor};
6665 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6666
6667 break;
6668
6669 };
6670
6671 };
6672
6673 };
6674
6675 if (Failed == true) {
6676 const embed = {"description": ErrorMessage16[Language], "color": EmbedColor};
6677 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6678 };
6679
6680};
6681
6682//SeeBackground
6683if (CommandName.startsWith("seebackground")) {
6684
6685 var Failed = true;
6686
6687 for (var i = 1; i <= Banners.length; i++) {
6688
6689 if (message.content == Prefix + "seebackground " + i) {
6690
6691 Failed = false;
6692
6693 var Price = Exclusive;
6694 const Commands = [];
6695
6696 if (function_GetBackgroundInfo(i, ["price"]) !== Exclusive) {
6697 Price = function_GetBackgroundInfo(i, ["price"]) + " " + GreditIcon;
6698 Commands.push(Prefix + "buybackground " + i);
6699 };
6700
6701 Commands.push(Prefix + "setbackground " + i);
6702 Commands.push(Prefix + "sellbackground " + i);
6703
6704 const embed = {
6705 "description":
6706 "**" + function_GetBackgroundInfo(i, ["name"]) + "**"
6707 + "\n"
6708 + "" + function_GetBackgroundInfo(i, ["credit"])
6709 + "\n\n"
6710 + "**Price**"
6711 + "\n"
6712 + Price
6713 + "\n\n"
6714 + "**Commands**"
6715 + "\n"
6716 + Commands.join("\n")
6717 + "\n",
6718 "image": {
6719 "url": function_GetBackgroundInfo(i, ["source"])
6720 },
6721 "color": EmbedColor
6722 };
6723
6724 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6725
6726 break;
6727
6728 };
6729
6730 };
6731
6732 if (Failed == true) {
6733 const embed = {"description": ErrorMessage16[Language], "color": EmbedColor};
6734 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6735 };
6736
6737};
6738
6739//SellBackground
6740if (CommandName.startsWith("sellbackground")) {
6741
6742 var i = CommandName.split("sellbackground ")[1];
6743
6744if (i !== AllString) {
6745
6746 for (var i = 1; i <= Banners.length; i++) {
6747
6748 if (message.content == Prefix + "sellbackground " + i) {
6749
6750 Failed = false;
6751
6752 if (peeky.userData.get(key, "Inventory").includes(i)) {
6753
6754 if (i !== 1) {
6755
6756 var BackgroundIndex = peeky.userData.get(key, "Inventory").indexOf(i);
6757 var FinalPrice = function_GetBackgroundInfo(i, ["price"]);
6758 var i = Number(i);
6759
6760 if (FinalPrice == Exclusive) {
6761 FinalPrice = 0;
6762 } else {
6763 FinalPrice = Math.round(FinalPrice / Setting.SellMultiplier);
6764 };
6765
6766 peeky.userData.get(key, "Inventory").splice(BackgroundIndex, 1);
6767 peeky.userData.math(key, "+", FinalPrice, "Gredit");
6768
6769 if (i == peeky.userData.get(key, "Background")) {
6770 peeky.userData.set(key, 1, "Background");
6771 InfoMessages.push(InfoMessage2[Language]);
6772 };
6773
6774 var TranslatedMessages = [SuccessIcon + " You have sold the **X001** background for **X002" + " " + GreditIcon + "**.", SuccessIcon + " Prodal jste pozadí **X001** za **X002" + " " + GreditIcon + "**."];
6775 const embed = {"description": TranslatedMessages[Language].replace("X001", function_GetBackgroundInfo(i, ["name"])).replace("X002", FinalPrice.toLocaleString('en')) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6776 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6777
6778 }
6779 else
6780 {
6781 var TranslatedMessages = [ErrorIcon + " You cannot sell the default backgrounds.", ErrorIcon + " Nemůžete prodat základní pozadí."];
6782 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
6783
6784 break;
6785 };
6786
6787 }
6788 else
6789 {
6790 const embed = {"description": ErrorMessage5[Language], "color": EmbedColor};
6791 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6792
6793 break;
6794 };
6795
6796 };
6797
6798 };
6799
6800 if (Failed == true) {
6801 const embed = {"description": ErrorMessage16[Language], "color": EmbedColor};
6802 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6803 };
6804
6805} else {
6806
6807 if (!ProfileCooldown.has(message.author.id)) {
6808
6809 ProfileCooldown.add(message.author.id);
6810 setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);
6811
6812 var SetBackground = peeky.userData.get(key, "Background");
6813 var SavedBackgrounds = [1];
6814 var MaxBackgrounds = peeky.userData.get(key, "Inventory").length;
6815 var CurrentBackground = 0;
6816 var FullPrice = 0;
6817
6818 peeky.userData.get(key, "Inventory").forEach(i => { //.filter(i => Banners[i - 1][Banner.Price] !== Exclusive)
6819 if (Banners[i - 1][Banner.Price] == Exclusive || SetBackground == i) {
6820 SavedBackgrounds.push(i);
6821 } else {
6822 FullPrice += Math.round(Banners[i - 1][Banner.Price] / Setting.SellMultiplier);
6823 };
6824 });
6825
6826 peeky.userData.set(key, SavedBackgrounds, "Inventory");
6827 peeky.userData.math(key, "+", FullPrice, "Gredit");
6828
6829 var TranslatedMessages = [SuccessIcon + " You have sold all your backgrounds for **X001" + " " + GreditIcon + "**.", SuccessIcon + " Prodal jste všechna svá pozadí za **X001" + " " + GreditIcon + "**."];
6830 const embed = {"description": TranslatedMessages[Language].replace("X001", FullPrice.toLocaleString('en')) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6831 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6832
6833 } else {
6834 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
6835 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6836 };
6837
6838};
6839
6840};
6841
6842//Open
6843if (CommandName.startsWith("open ") || CommandName == "open") {
6844
6845 if (!ProfileCooldown.has(message.author.id)) {
6846
6847 if (peeky.userData.get(key, "Chests") >= 1) {
6848
6849 ProfileCooldown.add(message.author.id);
6850 setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);
6851
6852 //Loot Variables
6853 var PeekyCoinsOpened = Math.round(Math.random() * 100);
6854 var PeekyCoinsSupporter = Math.round(Math.random() * 50);
6855 var PeekyCoinsUpgraded = Math.round(Math.random() * 25);
6856 var PeekyCoinsBooster = Math.round(Math.random() * 25);
6857 var PeekyCoinsLevel = peeky.userData.get(key, "Level");
6858 var TotalAmount = PeekyCoinsOpened + PeekyCoinsLevel;
6859
6860 //Other
6861 var Tokens = CommandName.split("open ");
6862
6863 //Supporter
6864 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) {
6865 TotalAmount += PeekyCoinsSupporter;
6866 };
6867
6868 //Server Booster
6869 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(BoosterRole)) {
6870 TotalAmount += PeekyCoinsSupporter;
6871 };
6872
6873 //Profile Booster
6874 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(ProfileBoosterRole)) {
6875 TotalAmount += PeekyCoinsOpened;
6876 };
6877
6878 //Upgraded Server
6879 if (peeky.serverData.get(keySF, "server_upgraded") == true) {
6880 TotalAmount += PeekyCoinsUpgraded;
6881 };
6882
6883 var BadgeProgress = 0;
6884
6885 //Opening System
6886 var ChestAmount = 1;
6887 if (Tokens[1] == AllString) {
6888 ChestAmount = peeky.userData.get(key, "Chests");
6889 };
6890
6891 var CurrentChest = 0;
6892 var TotalLoot = 0;
6893
6894 do {
6895
6896 //Count Rewards
6897 TotalLoot += TotalAmount;
6898 CurrentChest ++;
6899
6900 //Gambler Badge Progress
6901 peeky.userData.math(key, "+", 1, "GamblerBadge");
6902
6903 if (peeky.userData.get(key, "GamblerBadge") == 10) {
6904
6905 InfoMessages.push(InfoMessage1[Language]);
6906
6907 };
6908
6909 //Background Drop
6910 var BackgroundNumber = 10;
6911
6912 //Supporter
6913 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) {
6914 BackgroundNumber = BackgroundNumber - 1;
6915 };
6916
6917 //Server Booster
6918 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(BoosterRole)) {
6919 BackgroundNumber = BackgroundNumber - 1;
6920 };
6921
6922 //Profile Booster
6923 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(ProfileBoosterRole)) {
6924 BackgroundNumber = BackgroundNumber - 1;
6925 };
6926
6927 var BackgroundChance = Math.round(Math.random() * BackgroundNumber) + 1;
6928
6929 if (BackgroundChance == 1) {
6930
6931 var Background = Math.round(Math.random() * Banners.length);
6932 console.log(Background)
6933
6934 if (Background !== 0 && Banners[Background][Banner.Price] !== Exclusive) {
6935
6936 peeky.userData.get(key, "Inventory").push(Background + 1);
6937 InfoMessages.push(InfoIcon + " You have found the **" + function_GetBackgroundInfo(Background, ["name", "id"]) + "** background.");
6938
6939 };
6940
6941 };
6942
6943 } while (CurrentChest < ChestAmount);
6944
6945 peeky.userData.math(key, "-", ChestAmount, "Chests");
6946 peeky.userData.math(key, "+", TotalLoot, "Gredit");
6947
6948 var TranslatedMessages = [SuccessIcon + " You have opened **X001" + " " + ChestIcon + "** for **X002" + " " + GreditIcon +"**.", SuccessIcon + " Otevřel jste **X001" + " " + ChestIcon + "** a získal **X002" + " " + GreditIcon +"**."];
6949 const embed = {"description": TranslatedMessages[Language].replace("X001", ChestAmount.toLocaleString('en')).replace("X002", TotalLoot.toLocaleString('en')) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
6950 await message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6951
6952 }
6953 else
6954 {
6955 const embed = {"description": ErrorMessage6[Language], "color": EmbedColor};
6956 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6957 };
6958
6959 }
6960 else
6961 {
6962 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
6963 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6964 };
6965
6966};
6967
6968//Daily
6969if (CommandName == "daily") {
6970
6971 let cooldown = 8.64e+7;
6972 let lastDaily = peeky.userData.get(key, "DailyRewarded");
6973 var CountedVotes = 0;
6974
6975 if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) {
6976
6977 let timeObj = ms(cooldown - (Date.now() - lastDaily));
6978
6979 var TranslatedMessages = [InfoIcon + " Come back in **X001** and **X002** for your reward.", InfoIcon + " Vraťte se za **X001** a **X002** pro vaši odměnu."];
6980 var embed = {"description": TranslatedMessages[Language].replace("X001", timeObj.hours + "h").replace("X002", timeObj.minutes + "m"), "color": EmbedColor};
6981 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
6982
6983 } else {
6984
6985 peeky.userData.set(key, Date.now(), "DailyRewarded");
6986
6987 var Rewards = [[GreditIcon, 250, "Gredit"], [ChestIcon, 1, "Chests"], ["Exp", 1000, "Exp"]];
6988 var Index = Math.floor((Math.random() * Rewards.length));
6989 var Amount = Math.floor((Math.random() * Rewards[Index][1])) + 1;
6990
6991 //Reward
6992 InfoMessages.push("•" + " You have received **" + Amount + " " + Rewards[Index][0] + "** as the Daily reward.");
6993 peeky.userData.math(key, "+", Amount, Rewards[Index][2]);
6994
6995 //Vote DDBL
6996 await ddbl.getVotes().then(AllVotes => {
6997
6998 var Now = new Date();
6999 AllVotes = AllVotes.filter(i => i.id == key && Now - new Date(i.timestamp) <= DayMs);
7000
7001 if (AllVotes.length > 0 == true) {
7002
7003 InfoMessages.push("• " + " You have received **1 " + ChestIcon + "** for voting on DDBL today.");
7004 peeky.userData.math(key, "+", 1, "Chests");
7005 CountedVotes ++;
7006
7007 };
7008
7009 }).catch(err => ErrorBag.add(err));
7010
7011 //Vote BLS
7012 await bls.getUpvotes().then(AllVotes => {
7013
7014 var Now = new Date();
7015 AllVotes = AllVotes.filter(i => i.user.id == key && Now - new Date(i.timestamp) <= DayMs);
7016
7017 if (AllVotes.length > 0 == true) {
7018
7019 InfoMessages.push("•" + " You have received **1 " + ChestIcon + "** for voting on BLS today.");
7020 peeky.userData.math(key, "+", 1, "Chests");
7021 CountedVotes ++;
7022
7023 };
7024
7025 }).catch(err => ErrorBag.add(err));
7026
7027 //Event Reward
7028 if (Setting.EventStatus == true) {
7029 peeky.userData.math(key, "+", 1, "Chests");
7030 InfoMessages.push("•" + " You have received **1 " + ChestIcon + "** from the event.");
7031 };
7032
7033 //Supporter Reward
7034 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(SupporterRole)) {
7035 peeky.userData.math(key, "+", 1, "Chests");
7036 InfoMessages.push("•" + " You have received **1 " + ChestIcon + "** for being a Supporter.");
7037 };
7038
7039 //Server Booster Reward
7040 if (peeky.guilds.get(SupportServer).members.get(message.author.id) && peeky.guilds.get(SupportServer).members.get(message.author.id).roles.has(BoosterRole)) {
7041 peeky.userData.math(key, "+", 1, "Chests");
7042 InfoMessages.push("•" + " You have received **1 " + ChestIcon + "** for being a Server Booster.");
7043 };
7044
7045 var Footer = "Thank you for voting on PEEKY!";
7046 if (CountedVotes == 0) {
7047 Footer = "You can get more rewards by typing \"" + Prefix + "help\" and voting for me!";
7048 } else {
7049 if (peeky.userData.get(key, "VoterBadge") == false) {
7050 peeky.userData.set(key, true, "VoterBadge");
7051 InfoMessages.push("•" + " You have received a new badge.");
7052 };
7053 };
7054
7055 const embed = {"description": InfoMessages.join("\n"), "footer": {"text": Footer}, "color": EmbedColor};
7056 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7057
7058 };
7059
7060};
7061
7062//Gift
7063if (CommandName.startsWith("gift")) {
7064
7065 var CommandArgument = CommandName.split("gift")[1];
7066
7067if (CommandArgument.startsWith(" ")) {
7068
7069 CommandArgument = CommandArgument.replace(" ", "");
7070
7071if (!ProfileCooldown.has(message.author.id)) {
7072
7073 ProfileCooldown.add(message.author.id);
7074 setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);
7075
7076 var DonatedUser = message.mentions.members.first();
7077
7078 if (DonatedUser && DonatedUser.user.id !== message.author.id && !DonatedUser.bot) {
7079
7080 const key2 = `${DonatedUser.user.id}`;
7081
7082 if (peeky.userData.has(key2)) {
7083
7084 var CommandArray = CommandName.split(" ");
7085
7086 var DonatedItem = CommandArray[2];
7087 var DonatedAmount = Number(CommandArray[3]);
7088
7089 if (!isNaN(DonatedAmount)) {
7090
7091 if (DonatedAmount > 0) {
7092
7093 if (DonatedItem == "gredit") {
7094
7095 if (peeky.userData.get(key, "Gredit") >= DonatedAmount) {
7096
7097 if (DonatedAmount >= 1000 && peeky.userData.get(key, "CharityBadge") == false) {
7098
7099 peeky.userData.set(key, true, "CharityBadge");
7100 InfoMessages.push(InfoMessage1[Language]);
7101
7102 };
7103
7104 peeky.userData.math(key, "-", DonatedAmount, "Gredit");
7105 peeky.userData.math(key2, "+", DonatedAmount, "Gredit");
7106
7107 const embed = {"description": SuccessIcon + " You have given **" + DonatedAmount.toLocaleString('en') + " " + GreditIcon + "** to **" + function_RemoveFormatting(DonatedUser.displayName, "other", true) + "**." + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
7108 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7109
7110 }
7111 else
7112 {
7113 const embed = {"description": ErrorMessage1[Language], "color": EmbedColor};
7114 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7115 };
7116
7117 } else
7118
7119 if (DonatedItem == "chest") {
7120
7121 if (peeky.userData.get(key, "Chests") >= DonatedAmount) {
7122
7123 peeky.userData.math(key, "-", DonatedAmount, "Chests");
7124 peeky.userData.math(key2, "+", DonatedAmount, "Chests");
7125
7126 const embed = {"description": SuccessIcon + " You have given **" + DonatedAmount.toLocaleString('en') + " " + ChestIcon + "** to **" + function_RemoveFormatting(DonatedUser.displayName, "other", true) + "**." + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
7127 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7128
7129 }
7130 else
7131 {
7132 const embed = {"description": ErrorMessage6[Language], "color": EmbedColor};
7133 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7134 };
7135
7136 } else
7137
7138 if (DonatedItem == "background") {
7139
7140 if (peeky.userData.get(key, "Inventory").includes(DonatedAmount)) {
7141
7142 if ((DonatedAmount !== 1) && (DonatedAmount !== Exclusive)) {
7143
7144 if (!peeky.userData.get(key, "Inventory").includes(i)) {
7145
7146 var BackgroundIndex = peeky.userData.get(key, "Inventory").indexOf(DonatedAmount);
7147
7148 peeky.userData.get(key, "Inventory").splice(BackgroundIndex, 1);
7149 peeky.userData.get(key2, "Inventory").push(DonatedAmount);
7150
7151 //Set Default Background
7152 if (isNaN(peeky.userData.get(key, "Background")) == false && peeky.userData.get(key, "Background") == DonatedAmount) {
7153 peeky.userData.set(key, 1, "Background");
7154 InfoMessages.push(InfoMessage2[Language]);
7155 };
7156
7157 const embed = {"description": SuccessIcon + " You have given the **" + function_GetBackgroundInfo(DonatedAmount, ["name"]) + "** background to **" + function_RemoveFormatting(DonatedUser.displayName, "other", true) + "**." + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
7158 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7159
7160 }
7161 else
7162 {
7163 const embed = {"description": ErrorMessage14[Language], "color": EmbedColor};
7164 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7165 };
7166
7167 }
7168 else
7169 {
7170 const embed = {"description": ErrorIcon + " You cannot gift the default and exclusive backgrounds.", "color": EmbedColor};
7171 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7172 };
7173
7174 }
7175 else
7176 {
7177 const embed = {"description": ErrorMessage1[Language], "color": EmbedColor};
7178 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7179 };
7180
7181 } else {
7182 const embed = {"description": ErrorIcon + " Be sure to type the item's name in lowercase.", "color": EmbedColor};
7183 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7184 };
7185
7186 }
7187 else
7188 {
7189 const embed = {"description": ErrorMessage9[Language], "color": EmbedColor};
7190 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7191 };
7192
7193 }
7194 else
7195 {
7196 const embed = {"description": ErrorMessage9[Language], "color": EmbedColor};
7197 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7198 };
7199
7200 }
7201 else
7202 {
7203 const embed = {"description": ErrorMessage7[Language], "color": EmbedColor};
7204 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7205 };
7206
7207 }
7208 else
7209 {
7210 const embed = {"description": ErrorMessage3[Language], "color": EmbedColor};
7211 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7212 };
7213
7214}
7215 else
7216{
7217 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
7218 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7219};
7220
7221}
7222 else if (CommandArgument == "")
7223{
7224 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
7225 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7226};
7227
7228};
7229
7230//Inventory
7231if (CommandName.startsWith("inventory ") || CommandName == "inventory") {
7232
7233if (!ProfileCooldown.has(message.author.id)) {
7234
7235 ProfileCooldown.add(message.author.id);
7236 setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);
7237
7238 var SomeoneTagged = null;
7239 var MentionedMember = message.mentions.members.first();
7240 if (MentionedMember !== undefined) { SomeoneTagged = MentionedMember } else { SomeoneTagged = message.member; };
7241
7242 const key2 = `${SomeoneTagged.user.id}`;
7243
7244 if (peeky.userData.has(key2)) {
7245
7246 //Badges
7247 const PeekySupportServer = peeky.guilds.get(SupportServer);
7248 const TheUserWithRole = peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id);
7249 var EndString = "";
7250 var Badges = [];
7251 var BadgesAmount = null;
7252
7253 if (PeekySupportServer.members.get(SomeoneTagged.id) && TheUserWithRole.roles.has(StaffRole)) { Badges.push(ModeratorEmote + " Staff") };
7254 if (peeky.userData.get(key2, "TranslatorBadge") == true) { Badges.push(TranslatorEmote + " Translator") };
7255 if (peeky.userData.get(key2, "VeteranBadge") == true) { Badges.push(VeteranEmote + " Veteran") };
7256 if (PeekySupportServer.members.get(SomeoneTagged.id) && TheUserWithRole.roles.has(SupporterRole)) { Badges.push(SupporterEmote + " Supporter") };
7257 if (PeekySupportServer.members.get(SomeoneTagged.id) && TheUserWithRole.roles.has(BoosterRole)) { Badges.push(BoosterEmote + " Booster") };
7258 if (peeky.userData.get(key2, "BugHunterBadge") == true) { Badges.push(BugHunterEmote + " Bug Hunter") };
7259 if (peeky.userData.get(key2, "ContributorBadge") == true) { Badges.push(ContributorEmote + " Contributor") };
7260 if (peeky.userData.get(key2, "CelebratorBadge") == true) { Badges.push(CelebratorEmote + " Celebrator") };
7261 if (peeky.userData.get(key2, "MovieNighterBadge") == true) { Badges.push(MovieNighterEmote + " Movie Nighter") };
7262 if (peeky.userData.get(key2, "MedallistBadge") == true) { Badges.push(MedallistEmote + " Medallist") };
7263 if (peeky.userData.get(key2, "PollerBadge") == true) { Badges.push(PollerEmote + " Poller") };
7264 if (peeky.userData.get(key2, "VoterBadge") == true) { Badges.push(VoterEmote + " Voter") };
7265 if (peeky.userData.get(key2, "PublisherBadge") == true) { Badges.push(PublisherEmote + " Publisher") };
7266 if (peeky.userData.get(key2, "PartyBadge") == true) { Badges.push(PartyEmote + " Party") };
7267 if (peeky.userData.get(key2, "EvilBadge") == true) { Badges.push(EvilEmote + " Evil") };
7268 if (peeky.userData.get(key2, "GoodBadge") == true) { Badges.push(GoodEmote + " Good") };
7269 if (peeky.userData.get(key2, "OwnershipBadge") == true) { Badges.push(OwnershipEmote + " Ownership") };
7270 if (peeky.userData.get(key2, "GopbotBadge") == true) { Badges.push(GopbotEmote + " Gopbot") };
7271 if (peeky.userData.get(key2, "MinerBadge") == true) { Badges.push(MinerEmote + " Miner") };
7272 if (peeky.userData.get(key2, "GamerBadge") == true) { Badges.push(GamerEmote + " Gamer") };
7273 if (peeky.userData.get(key2, "HorderBadge") == true) { Badges.push(HorderEmote + " Horder") };
7274 if (peeky.userData.get(key2, "GamblerBadge") >= 10) { Badges.push(GamblerEmote + " Gambler") };
7275 if (peeky.userData.get(key2, "CharityBadge") == true) { Badges.push(CharityEmote + " Charity") };
7276 if (peeky.userData.get(key2, "PainterBadge") == true) { Badges.push(PainterEmote + " Painter") };
7277 if (peeky.userData.get(key2, "FashionBadge") == true) { Badges.push(FashionEmote + " Fashion") };
7278 if (Badges.length == 0) {Badges = ["None"]; BadgesAmount = 0;} else {BadgesAmount = peeky.userData.get(key2, "Badges")};
7279
7280 //Backgrounds
7281 var FixedBackgrounds = [];
7282 var InventoryWorth = 0;
7283 var Current = 0;
7284
7285 peeky.userData.get(key2, "Inventory").filter(i => Banners[i - 1][Banner.Price] !== Exclusive).forEach(banner => {
7286 InventoryWorth += Banners[banner - 1][Banner.Price] / Setting.SellMultiplier;
7287 });
7288
7289 if (isNaN(peeky.userData.get(key2, "Background")) == true) {
7290 FixedBackgrounds.push("Custom `0`");
7291 var CustomBackgroundAmount = 1;
7292 } else { var CustomBackgroundAmount = 0; };
7293
7294 peeky.userData.get(key2, "Inventory").slice(0, Setting.BackgroundInvLimit).forEach(banner => {
7295 Current ++;
7296 FixedBackgrounds.push(function_GetBackgroundInfo(banner, ["name"]) + " `" + banner + "`");
7297 });
7298
7299 if ((peeky.userData.get(key2, "Inventory").length + CustomBackgroundAmount) > Setting.BackgroundInvLimit) { EndString = " and some more.." };
7300
7301 const embed = {"description": "**" + function_RemoveFormatting(SomeoneTagged.displayName, "other", true) + "'s Inventory**" + "\n" + peeky.userData.get(key2, "BadgeGredit").toLocaleString('en') + " Gredit Gain, " + peeky.userData.get(key2, "BadgeExp").toLocaleString('en') + " Exp Gain" + "\n\n" + "**" + (peeky.userData.get(key2, "Inventory").length + CustomBackgroundAmount).toLocaleString('en') + " Backgrounds (Worth " + InventoryWorth.toLocaleString('en') + " Gredit)**\n" + FixedBackgrounds.join(", ") + "" + EndString + ".\n\n**" + BadgesAmount + " Badges**\n" + Badges.join(', ') + ".", "color": EmbedColor};
7302 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7303
7304 }
7305 else
7306 {
7307 const embed = {"description": ErrorMessage7[Language], "color": EmbedColor};
7308 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7309 };
7310
7311}
7312 else
7313{
7314 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
7315 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7316};
7317
7318};
7319
7320//Profile
7321if (CommandName.startsWith("profile ") || CommandName == "profile") {
7322
7323if (!ProfileCooldown.has(message.author.id)) {
7324
7325 ProfileCooldown.add(message.author.id);
7326 setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);
7327
7328 if (message.channel.permissionsFor(peeky.user).has('ATTACH_FILES')) {
7329
7330 const canvas = Canvas.createCanvas(500, 300);
7331 const ctx = canvas.getContext('2d');
7332 var SomeoneTagged = null;
7333 const StatsColor = "lightgray"
7334 var ProfileColor = Setting.LessDark.replace("#", "");
7335
7336 var MentionedMember = message.mentions.members.first();
7337 if (MentionedMember !== undefined) { SomeoneTagged = MentionedMember } else { SomeoneTagged = message.member; };
7338
7339 //Vars
7340 const ProfileName = SomeoneTagged.displayName;
7341 const key2 = SomeoneTagged.user.id;
7342 var Failed = false;
7343
7344 if (peeky.userData.has(key2)) {
7345
7346 var TheBannerShown = function_GetBackground(key2);
7347
7348 var background = await Canvas.loadImage(TheBannerShown)//.catch(error => {Failed = true; peeky.userData.set(key2, DefaultBackground, "Background"); message.channel.stopTyping(); setTimeout(() => {ProfileCooldown.delete(message.author.id)}, ProfileCooldownMS);});
7349
7350 if (Failed == false) {
7351
7352 message.channel.startTyping();
7353
7354 ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
7355
7356 var layout = await Canvas.loadImage("http://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fprofile_layout_2.5.png");
7357 ctx.drawImage(layout, 0, 0, canvas.width, canvas.height);
7358
7359 //Draw Events
7360
7361 //String Setting
7362 ctx.fillStyle = StatsColor;
7363 ctx.textAlign = "left";
7364 ctx.fillStyle = "white";
7365 ctx.shadowColor = "black";
7366 ctx.shadowOffsetX = 1;
7367 ctx.shadowOffsetY = 1;
7368 ctx.globalAlpha = 1;
7369
7370 //Name String
7371 ctx.font = "19px " + Setting.DefaultFont;
7372 ctx.fillText(ProfileName, 83, 25, canvas.width - 95);
7373
7374 //Coins String
7375 ctx.font = "15px " + Setting.DefaultFont;
7376 ctx.fillText("" + peeky.userData.get(key2, "Gredit").toLocaleString('en') + " Gredit", 45, 105, canvas.width / 2 - 50);
7377
7378 //Chests String
7379 ctx.font = "15px " + Setting.DefaultFont;
7380 ctx.fillText("" + peeky.userData.get(key2, "Chests").toLocaleString('en') + " Chests", 45, 140, canvas.width / 2 - 50);
7381
7382 //Karma String
7383 ctx.font = "15px " + Setting.DefaultFont;
7384 ctx.fillText("" + peeky.userData.get(key2, "Karma") + " Karma", canvas.width / 2 + 45, 105, canvas.width / 2 - 50);
7385
7386 //Badges String
7387 ctx.font = "15px " + Setting.DefaultFont;
7388 ctx.fillText("" + peeky.userData.get(key2, "Badges").toLocaleString('en') + " Badges", canvas.width / 2 + 45, 140, canvas.width / 2 - 50);
7389
7390 /*
7391 //Exp String
7392 ctx.font = "15px " + Setting.DefaultFont;
7393 ctx.fillText("" + peeky.userData.get(key2, "Exp").toLocaleString('en') + " Exp", canvas.width / 2 + 45, 175, canvas.width / 2 - 50);
7394 */
7395
7396 //Backpack String
7397 if (isNaN(peeky.userData.get(key2, "Background")) == true) {
7398 var CustomBackgroundAmount = 1;
7399 } else { var CustomBackgroundAmount = 0; };
7400
7401 ctx.font = "15px " + Setting.DefaultFont;
7402 ctx.fillText("" + (peeky.userData.get(key2, "Inventory").length + CustomBackgroundAmount).toLocaleString('en') + " Backgrounds", 45, 175, canvas.width / 2 - 50);
7403
7404 //Description String
7405 var text = peeky.userData.get(key2, "Description");
7406 var fontsize = 16;
7407 var y_position = 50;
7408 ctx.fillStyle = "white";
7409 ctx.textAlign = "left";
7410
7411 if (text.includes("\n")) { y_position = 45; };
7412 ctx.fillText(peeky.userData.get(key2, "Description"), 83, y_position, canvas.width - 95);
7413
7414 //Draw Images
7415
7416 //Coin Icon
7417 const coin_icon = await Canvas.loadImage(CoinImage);
7418 ctx.drawImage(coin_icon, 10, 85, 27, 27);
7419
7420 //Chest Icon
7421 const chest_icon = await Canvas.loadImage(ChestImage);
7422 ctx.drawImage(chest_icon, 10, 120, 27, 27);
7423
7424 //Backpack Icon
7425 const backpack_icon = await Canvas.loadImage(BackpackImage);
7426 ctx.drawImage(backpack_icon, 10, 155, 27, 27);
7427
7428 //Karma Icon
7429 const karma_icon = await Canvas.loadImage(KarmaImage);
7430 ctx.drawImage(karma_icon, canvas.width / 2 + 10, 85, 27, 27);
7431
7432 //Badges Icon
7433 const badges_icon = await Canvas.loadImage(BadgesImage);
7434 ctx.drawImage(badges_icon, canvas.width / 2 + 10, 120, 27, 27);
7435
7436 /*
7437 //Exp Icon
7438 const exp_icon = await Canvas.loadImage(ExpImage);
7439 ctx.drawImage(exp_icon, canvas.width / 2 + 10, 155, 27, 27);
7440 */
7441
7442 //Progress Bar
7443 const progress_bar = await Canvas.loadImage(XPImage);
7444 const progress_bar_background = await Canvas.loadImage(LightField);
7445
7446 //Badges
7447 var BadgeYpos = 201.5;
7448 var BadgeXpos = -24;
7449 const BadgeXposAmt = 32.5;
7450 var BadgeAmount = 0;
7451 const MaxBadges = 15;
7452 const BadgeSize = 25;
7453
7454 //Staff Icon
7455 if (BadgeAmount < MaxBadges) {
7456 const moderator_icon = await Canvas.loadImage(ModeratorImage);
7457 if (peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id) && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id).roles.has(StaffRole)) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7458 ctx.drawImage(moderator_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7459 };
7460
7461 //Translator Icon
7462 if (BadgeAmount < MaxBadges) {
7463 const gopbot_icon = await Canvas.loadImage(TranslatorImage);
7464 if (peeky.userData.get(key2, "TranslatorBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7465 ctx.drawImage(gopbot_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7466 };
7467
7468 //Veteran Icon
7469 if (BadgeAmount < MaxBadges) {
7470 const veteran_icon = await Canvas.loadImage(VeteranImage);
7471 if (peeky.userData.get(key2, "VeteranBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7472 ctx.drawImage(veteran_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7473 };
7474
7475 //Supporter Icon
7476 if (BadgeAmount < MaxBadges) {
7477 const supporter_icon = await Canvas.loadImage(SupporterImage);
7478 if (peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id) && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id).roles.has(SupporterRole)) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7479 ctx.drawImage(supporter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7480 };
7481
7482 //Booster Icon
7483 if (BadgeAmount < MaxBadges) {
7484 const supporter_icon = await Canvas.loadImage(BoosterImage);
7485 if (peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id) && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id).roles.has(BoosterRole)) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7486 ctx.drawImage(supporter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7487 };
7488
7489 //Bug Hunter Icon
7490 if (BadgeAmount < MaxBadges) {
7491 const bughunter_icon = await Canvas.loadImage(BugCHunterImage);
7492 if (peeky.userData.get(key2, "BugHunterBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7493 ctx.drawImage(bughunter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7494 };
7495
7496 //Contributor Icon
7497 if (BadgeAmount < MaxBadges) {
7498 const contributor_icon = await Canvas.loadImage(ContributorImage);
7499 if (peeky.userData.get(key2, "ContributorBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7500 ctx.drawImage(contributor_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7501 };
7502
7503 //Celebrator Icon
7504 if (BadgeAmount < MaxBadges) {
7505 const celebrator_icon = await Canvas.loadImage(CelebratorImage);
7506 if (peeky.userData.get(key2, "CelebratorBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7507 ctx.drawImage(celebrator_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7508 };
7509
7510 //Movie Nighter Icon
7511 if (BadgeAmount < MaxBadges) {
7512 const movienighter_icon = await Canvas.loadImage(MovieNighterImage);
7513 if (peeky.userData.get(key2, "MovieNighterBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7514 ctx.drawImage(movienighter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7515 };
7516
7517 //Medallist Icon
7518 if (BadgeAmount < MaxBadges) {
7519 const medalist_icon = await Canvas.loadImage(MedallistImage);
7520 if (peeky.userData.get(key2, "MedallistBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7521 ctx.drawImage(medalist_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7522 };
7523
7524 //Evil Icon
7525 if (BadgeAmount < MaxBadges) {
7526 const evil_icon = await Canvas.loadImage(EvilImage);
7527 if (peeky.userData.get(key2, "EvilBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7528 ctx.drawImage(evil_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7529 };
7530
7531 //Good Icon
7532 if (BadgeAmount < MaxBadges) {
7533 const good_icon = await Canvas.loadImage(GoodImage);
7534 if (peeky.userData.get(key2, "GoodBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7535 ctx.drawImage(good_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7536 };
7537
7538 //Party Icon
7539 if (BadgeAmount < MaxBadges) {
7540 const publisher_icon = await Canvas.loadImage(PartyImage);
7541 if (peeky.userData.get(key2, "PartyBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7542 ctx.drawImage(publisher_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7543 };
7544
7545 //Poller Icon
7546 if (BadgeAmount < MaxBadges) {
7547 const poller_icon = await Canvas.loadImage(PollerImage);
7548 if (peeky.userData.get(key2, "PollerBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7549 ctx.drawImage(poller_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7550 };
7551
7552 //Voter Icon
7553 if (BadgeAmount < MaxBadges) {
7554 const voter_icon = await Canvas.loadImage(VoterImage);
7555 if (peeky.userData.get(key2, "VoterBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7556 ctx.drawImage(voter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7557 };
7558
7559 //Publisher Icon
7560 if (BadgeAmount < MaxBadges) {
7561 const publisher_icon = await Canvas.loadImage(PublisherImage);
7562 if (peeky.userData.get(key2, "PublisherBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7563 ctx.drawImage(publisher_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7564 };
7565
7566 //Ownership Icon
7567 if (BadgeAmount < MaxBadges) {
7568 const ownership_icon = await Canvas.loadImage(OwnershipImage);
7569 if (peeky.userData.get(key2, "OwnershipBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7570 ctx.drawImage(ownership_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7571 };
7572
7573 //Gopbot Icon
7574 if (BadgeAmount < MaxBadges) {
7575 const gopbot_icon = await Canvas.loadImage(GopbotImage);
7576 if (peeky.userData.get(key2, "GopbotBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7577 ctx.drawImage(gopbot_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7578 };
7579
7580 //Horder Icon
7581 if (BadgeAmount < MaxBadges) {
7582 const horder_icon = await Canvas.loadImage(HorderImage);
7583 if (peeky.userData.get(key2, "HorderBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7584 ctx.drawImage(horder_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7585 };
7586
7587 //Miner Icon
7588 if (BadgeAmount < MaxBadges) {
7589 const miner_icon = await Canvas.loadImage(MinerImage);
7590 if (peeky.userData.get(key2, "MinerBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7591 ctx.drawImage(miner_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7592 };
7593
7594 //Gamer Icon
7595 if (BadgeAmount < MaxBadges) {
7596 const gamer_icon = await Canvas.loadImage(GamerImage);
7597 if (peeky.userData.get(key2, "GamerBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7598 ctx.drawImage(gamer_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7599 };
7600
7601 //Gambler Icon
7602 if (BadgeAmount < MaxBadges) {
7603 const gambler_icon = await Canvas.loadImage(GamblerImage);
7604 if (peeky.userData.get(key2, "GamblerBadge") >= 10) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7605 ctx.drawImage(gambler_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7606 };
7607
7608 //Charity Icon
7609 if (BadgeAmount < MaxBadges) {
7610 const charity_icon = await Canvas.loadImage(CharityImage);
7611 if (peeky.userData.get(key2, "CharityBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7612 ctx.drawImage(charity_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7613 };
7614
7615 //PainterIcon
7616 if (BadgeAmount < MaxBadges) {
7617 const painter_icon = await Canvas.loadImage(PainterImage);
7618 if (peeky.userData.get(key2, "PainterBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7619 ctx.drawImage(painter_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7620 };
7621
7622 //Fashion Icon
7623 if (BadgeAmount < MaxBadges) {
7624 const fashion_icon = await Canvas.loadImage(FashionImage);
7625 if (peeky.userData.get(key2, "FashionBadge") == true) { ctx.globalAlpha = 1; BadgeXpos += BadgeXposAmt; BadgeAmount ++; } else { ctx.globalAlpha = 0; };
7626 ctx.drawImage(fashion_icon, BadgeXpos, BadgeYpos, BadgeSize, BadgeSize);
7627 };
7628
7629 ctx.globalAlpha = 1;
7630 ctx.shadowOffsetX = 0;
7631 ctx.shadowOffsetY = 0;
7632
7633 ctx.fillStyle = "#" + ProfileColor;
7634 ctx.fillRect(63, 253, peeky.userData.get(key2, "Exp") / (Setting.ExpNeeded * peeky.userData.get(key2, "Level")) * (canvas.width - 127), 26); //Body
7635
7636 //Avatar
7637 const avatar = await Canvas.loadImage(SomeoneTagged.user.displayAvatarURL.replace("https", "http"));
7638 ctx.shadowOffsetX = 0;
7639 ctx.shadowOffsetY = 0;
7640 ctx.drawImage(avatar, 6, 6, 64, 64);
7641
7642 //Exp Text
7643 ctx.font = "22px " + Setting.DefaultFont;
7644 ctx.textAlign = "center";
7645 ctx.fillStyle = "white";
7646 ctx.shadowOffsetX = 1;
7647 ctx.shadowOffsetY = 1;
7648 ctx.fillText(peeky.userData.get(key2, "Level").toLocaleString('en'), 34, 275);
7649 ctx.fillText((peeky.userData.get(key2, "Level") + 1).toLocaleString('en'), canvas.width - 34, 275);
7650
7651 const attachment = new Discord.Attachment(canvas.toBuffer(), "peeky.png", { quality: 0.1 });
7652
7653 await message.channel.send("", attachment).catch(error => ErrorBag.add(error)).then(async function (m) {
7654
7655 if (peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id) && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id).roles.has(ProfileBoosterRole)) {
7656 const embed = {"description": InfoIcon + " The **Profile Booster** for this profile will remain active for **" + function_TimeLeft(peeky.userData.get(key, "BoosterStart"), "hours", ProfileBoosterTime) + " hours**.", "color": EmbedColor};
7657 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7658 };
7659
7660 if (!WebsiteCooldowns.has("featuredprofile") && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id) && peeky.guilds.get(SupportServer).members.get(SomeoneTagged.id).roles.has(SupporterRole)) {
7661
7662 WebsiteCooldowns.add("featuredprofile");
7663 setTimeout(() => {WebsiteCooldowns.delete("featuredprofile")}, 1800000);
7664
7665 fs.writeFile('public/featured_profile.txt', "<center> <a href='https://peeky.glitch.me/store.html'><img src='" + m.attachments.array()[0].url + "' class='featuredprofile'></a> </center>", (err) => {
7666 if (err) console.log(err);
7667 });
7668
7669 var TranslatedMessages = [InfoIcon + " This profile is now featured on the website.", InfoIcon + " Tento profil je nyní vystaven na strance."];
7670 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7671 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7672
7673 console.log("The featured profile has been updated.");
7674
7675 };
7676
7677 }).catch(function(err) { ErrorBag.add(err); });
7678
7679 message.channel.stopTyping();
7680
7681 };
7682
7683 } else {
7684 const embed = {"description": ErrorMessage7[Language], "color": EmbedColor};
7685 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7686 };
7687
7688 } else {
7689 const embed = {"description": ErrorMessage12[Language], "color": EmbedColor};
7690 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7691 };
7692
7693 } else {
7694 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
7695 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7696 };
7697};
7698
7699//Play
7700if (CommandName.startsWith("play")) {
7701
7702 var CommandArgument = CommandName.replace("play", ""); //split("play")[1];
7703
7704 if (CommandArgument.startsWith(" ")) {
7705
7706 CommandArgument = CommandArgument.replace(" ", "");
7707
7708 if (!CurrentlyPlaying.has(message.guild.id) && !MusicCmdCooldown.has(message.guild.id)) {
7709
7710 var Type = "Started";
7711 var DeleteMessage = false;
7712 var ChoosingMode = true;
7713
7714 MusicCmdCooldown.add(message.guild.id);
7715 setTimeout(() => {MusicCmdCooldown.delete(message.guild.id)}, 30000);
7716
7717 if (CommandArgument.includes("youtube.com") || CommandArgument.includes("youtu.be")) {
7718 DeleteMessage = true;
7719 };
7720
7721 if (CommandArgument == RandomString && ChoosingMode == true) {
7722
7723 ChoosingMode = false;
7724
7725 CommandArgument = RandomSongs[Math.floor(Math.random()*RandomSongs.length)];
7726 Type = "Random";
7727
7728 };
7729
7730 if (CommandArgument == "previous" && ChoosingMode == true) {
7731
7732 ChoosingMode = false;
7733
7734 if (peeky.serverData.has(keySF, "Link") && peeky.serverData.get(keySF, "Link") !== "None") {
7735
7736 CommandArgument = peeky.serverData.get(keySF, "Link");
7737 Type = "Previous";
7738
7739 } else {
7740
7741 var TranslatedMessages = [InfoIcon + " Previous song not found - playing a random song.", InfoIcon + " Minulá písnička nenalezena - Hraju náhodnou písničku."];
7742 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7743 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7744
7745 CommandArgument = RandomSongs[Math.floor(Math.random()*RandomSongs.length)];
7746 Type = "Random";
7747 };
7748
7749 };
7750
7751 if (CommandArgument == "playlist" && ChoosingMode == true) {
7752
7753 ChoosingMode = false;
7754
7755 if (peeky.userData.get(key, "Playlist").length > 0) {
7756
7757 CommandArgument = peeky.userData.get(key, "Playlist")[Math.floor(Math.random()*peeky.userData.get(key, "Playlist").length)];
7758 Type = "Playlist";
7759
7760 } else {
7761
7762 var TranslatedMessages = [InfoIcon + " Your playlist is empty - Playing a random song.", InfoIcon + " Váš playlist je prázdný - Hraju náhodnou písničku."];
7763 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7764 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7765
7766 CommandArgument = RandomSongs[Math.floor(Math.random()*RandomSongs.length)];
7767 Type = "Random";
7768
7769 };
7770
7771 };
7772
7773 search(CommandArgument, SearchOptions, async function(error, results) {
7774
7775 if (error) return ErrorBag.add(error);
7776
7777 if (ChoosingMode == true) {
7778
7779 if (results.length > 0) {
7780 CommandArgument = results[0].link;
7781 };
7782
7783 };
7784
7785 if ((CommandArgument) && !CommandArgument.includes("?list=") && (ytdl.validateURL(CommandArgument) == true)) {
7786
7787 if (message.member.voiceChannel) {
7788
7789 const voiceChannel = message.member.voiceChannel;
7790
7791 if (voiceChannel.permissionsFor(peeky.user).has('CONNECT' && 'SPEAK')) {
7792
7793 await ytdl.getBasicInfo(CommandArgument).then(async (info) => {
7794 info = info.player_response.videoDetails;
7795
7796 const Thumbnail = info.thumbnail.thumbnails[info.thumbnail.thumbnails.length - 1].url;
7797 const Title = info.title;
7798 const Author = info.author;
7799 const Length = info.lengthSeconds;
7800 const LengthDate = new Date(); LengthDate.setMinutes(LengthDate.getMinutes() + (Length / 60));
7801 const Started = new Date();
7802
7803 if (Length <= 1800 && Length > 0) {
7804
7805 await voiceChannel.join().then(async connection => {
7806
7807 CurrentlyPlaying.add(message.guild.id);
7808
7809 peeky.serverData.set(keySF, Title, "Title");
7810 peeky.serverData.set(keySF, Thumbnail, "Thumbnail");
7811 peeky.serverData.set(keySF, Author, "Author");
7812 peeky.serverData.set(keySF, LengthDate, "Length");
7813 peeky.serverData.set(keySF, Started, "Started");
7814 peeky.serverData.set(keySF, CommandArgument, "Link");
7815
7816 if (DeleteMessage == true) {
7817 message.delete().catch(error => ErrorBag.add(error));
7818 };
7819
7820 message.channel.startTyping();
7821 await message.channel.send("", await function_MusicEmbed(Title, Thumbnail, Author, LengthDate, message.author.id, Type)).catch(error => ErrorBag.add(error));
7822 message.channel.stopTyping();
7823
7824 if (message.guild.me.hasPermission("CHANGE_NICKNAME") && ((message.guild.me.nickname !== null && message.guild.me.nickname.startsWith("? ")) || message.guild.me.nickname == null)) {
7825 message.guild.me.setNickname("? " + " PEEKY " + "?");
7826 };
7827
7828 const stream = ytdl(CommandArgument);
7829 const dispatcher = await connection.playStream(stream, StreamOptions);
7830
7831 dispatcher.on('end', async reason => {
7832
7833 CurrentlyPlaying.delete(message.guild.id);
7834 voiceChannel.leave();
7835
7836 if (message.guild.me.hasPermission("CHANGE_NICKNAME") && ((message.guild.me.nickname !== null && message.guild.me.nickname.startsWith("? ")))) {
7837 message.guild.me.setNickname(null);
7838 };
7839
7840 const Listeners = voiceChannel.members.filter(m => !m.user.bot).map(m => m.id);
7841
7842 var TranslatedMessages = [InfoIcon + " The song has now finished with **X001** listeners.", InfoIcon + " Písnička skončila s **X001** diváky."];
7843 const embed = {"description": TranslatedMessages[Language].replace("X001", Listeners.length), "color": EmbedColor};
7844 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7845
7846 if (Listeners.length >= 5) {
7847
7848 Listeners.forEach(id => {
7849
7850 if (peeky.userData.has(id) && peeky.userData.get(id, "PartyBadge") == false) {
7851 peeky.userData.set(id, true, "PartyBadge");
7852 };
7853
7854 });
7855
7856 };
7857
7858 });
7859
7860 }).catch(error => {
7861 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
7862 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7863 ErrorBag.add(error);
7864 });
7865
7866 } else {
7867 var TranslatedMessages = [ErrorIcon + " You cannot play livestreams or songs longer than 30 minutes.", ErrorIcon + " Nelze hrát živé vysílání a písničky delší jak 30 minuty."];
7868 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7869 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7870 };
7871
7872 }).catch(async (error) => {
7873 ErrorBag.add(error);
7874
7875 var TranslatedMessages = [ErrorIcon + " Failed to get the YouTube video.", ErrorIcon + " Nepodařilo se získat YouTube video."];
7876 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7877 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7878 });
7879
7880 } else {
7881 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
7882 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7883 };
7884
7885 } else {
7886 var TranslatedMessages = [ErrorIcon + " You need to join a voice channel.", ErrorIcon + " Musíte se připojt se do hlasového kanálu."];
7887 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7888 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7889 };
7890
7891 } else {
7892 const embed = {"description": ErrorMessage4[Language], "color": EmbedColor};
7893 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7894 };
7895
7896 });
7897
7898 }
7899 else
7900 {
7901 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
7902 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7903 };
7904
7905 }
7906 else if (CommandArgument == "")
7907 {
7908 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
7909 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7910 };
7911
7912};
7913
7914//Current
7915if (CommandName == "current") {
7916
7917 if (!MusicCmdCooldown.has(message.author.id)) {
7918
7919 if (CurrentlyPlaying.has(message.guild.id) && message.guild.me.voiceChannel) {
7920
7921 MusicCmdCooldown.add(message.author.id);
7922 setTimeout(() => {MusicCmdCooldown.delete(message.author.id)}, 5000);
7923
7924 const Title = peeky.serverData.get(keySF, "Title");
7925 const Thumbnail = peeky.serverData.get(keySF, "Thumbnail");
7926 const Author = peeky.serverData.get(keySF, "Author");
7927 const Length = peeky.serverData.get(keySF, "Length");
7928 const Started = peeky.serverData.get(keySF, "Started");
7929
7930 message.channel.startTyping();
7931 await message.channel.send("", await function_MusicEmbed(Title, Thumbnail, Author, Length, "minutes left", "Current")).catch(error => ErrorBag.add(error));
7932 message.channel.stopTyping();
7933
7934 } else {
7935 const embed = {"description": ErrorMessage12[Language], "color": EmbedColor};
7936 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7937 };
7938
7939 } else {
7940 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
7941 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7942 };
7943
7944};
7945
7946//Playlist
7947if (CommandName.startsWith("playlist ") || CommandName == "playlist") {
7948
7949 if (message.channel.permissionsFor(peeky.user).has('ATTACH_FILES')) {
7950
7951 var CommandArgument = CommandName.split("playlist")[1];
7952
7953 if (CommandArgument.startsWith(" add ")) {
7954
7955 if (!MusicCmdCooldown.has(message.author.id)) {
7956
7957 var PlaylistRequest = CommandArgument.replace(" add ", "");
7958
7959 MusicCmdCooldown.add(message.author.id);
7960 setTimeout(() => {MusicCmdCooldown.delete(message.author.id)}, 30000);
7961
7962 if (PlaylistRequest == "current") {
7963
7964 if (CurrentlyPlaying.has(message.guild.id) && peeky.serverData.get(keySF, "Link") !== "None") {
7965
7966 if (peeky.userData.get(key, "Playlist").length < Setting.PlaylistLimit) {
7967
7968 peeky.userData.get(key, "Playlist").push(peeky.serverData.get(keySF, "Link"));
7969
7970 var TranslatedMessages = [SuccessIcon + " Added the current song to your playlist.", SuccessIcon + " Současná písnička byla přidána do vašeho playlistu."];
7971 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7972 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7973
7974 } else {
7975 const embed = {"description": ErrorMessage15[Language], "color": EmbedColor};
7976 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7977 };
7978
7979 } else {
7980 const embed = {"description": ErrorMessage12[Language], "color": EmbedColor};
7981 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7982 };
7983
7984 } else
7985
7986 if (!PlaylistRequest.includes("?list=")) {
7987
7988 if (ytdl.validateURL(PlaylistRequest) == true) {
7989
7990 if (peeky.userData.get(key, "Playlist").length < Setting.PlaylistLimit) {
7991
7992 peeky.userData.get(key, "Playlist").push(PlaylistRequest);
7993
7994 var TranslatedMessages = [SuccessIcon + " Added the song to your playlist.", SuccessIcon + " Písnička byla přidána do vašeho playlistu."];
7995 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
7996 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
7997
7998 } else {
7999 const embed = {"description": ErrorMessage15[Language], "color": EmbedColor};
8000 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8001 };
8002
8003 } else {
8004 const embed = {"description": ErrorMessage4[Language], "color": EmbedColor};
8005 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8006 };
8007
8008 } else {
8009 var TranslatedMessages = [ErrorIcon + " You cannot add playlists to your playlist.", ErrorIcon + " Do svého playlistu nemůžete přidat playlisty."];
8010 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8011 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8012 };
8013
8014 } else {
8015 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
8016 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8017 };
8018
8019 } else
8020 if (CommandArgument.startsWith(" remove ")) {
8021
8022 var PlaylistRequest = CommandArgument.replace(" remove ", "");
8023
8024 if (peeky.userData.get(key, "Playlist").includes(PlaylistRequest)) {
8025
8026 var BackgroundIndex = peeky.userData.get(key, "Playlist").indexOf(PlaylistRequest);
8027
8028 peeky.userData.get(key, "Playlist").splice(BackgroundIndex, 1); //Remove the background
8029
8030 var TranslatedMessages = [SuccessIcon + " The song has been removed from your playlist.", SuccessIcon + " Písnička byla odebrána z vašeho playlistu."];
8031 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8032 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8033
8034 } else {
8035 var TranslatedMessages = [ErrorIcon + " That song is not in your playlist.", ErrorIcon + " Tato písnička ve vašem playlistu není."];
8036 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8037 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8038 };
8039
8040 } else
8041 if (CommandArgument.startsWith(" rename ")) {
8042
8043 var PlaylistRequest = function_RemoveFormatting(CommandArgument.replace(" rename ", ""), "other", true);
8044
8045 peeky.userData.set(key, PlaylistRequest, "PlaylistName")
8046
8047 var TranslatedMessages = [SuccessIcon + " Your playlist has been renamed to **X001**.", SuccessIcon + " Váš playlist byl přejmenován na **X001**."];
8048 const embed = {"description": TranslatedMessages[Language].replace("X001", peeky.userData.get(key, "PlaylistName")), "color": EmbedColor};
8049 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8050
8051 } else
8052 if (CommandArgument.startsWith(" thumbnail")) {
8053
8054 if (message.attachments.size > 0) {
8055
8056 var Thumbnail = message.attachments.array()[0].url;
8057
8058 if (function_DetectLink(Thumbnail) == true) {
8059
8060 peeky.userData.set(key, Thumbnail, "PlaylistThumbnail");
8061
8062 var TranslatedMessages = [SuccessIcon + " You have set the thumbnail for your playlist.", SuccessIcon + " Nastavil jste miniaturu pro váš playlist"];
8063 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8064 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8065
8066 } else {
8067 var TranslatedMessages = [ErrorIcon + " Failed to set your playlist thumbnail.", ErrorIcon + " Nepodařilo se nastavit miniaturu pro váš playlist."];
8068 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8069 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8070 };
8071
8072 } else {
8073 const embed = {"description": ErrorMessage20[Language], "color": EmbedColor};
8074 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8075 };
8076
8077 } else
8078 if (CommandArgument.startsWith(" clear")) {
8079
8080 var TranslatedMessages = [SuccessIcon + " You have cleared your playlist of **X001 songs** and the thumbnail.", SuccessIcon + " Vyčistili jste svůj playlist od **X001 písniček** a miniatury."];
8081 const embed = {"description": TranslatedMessages[Language].replace("X001", peeky.userData.get(key, "Playlist").length), "color": EmbedColor};
8082 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8083
8084 peeky.userData.set(key, [], "Playlist");
8085 peeky.userData.set(key, null, "PlaylistThumbnail");
8086
8087 } else {
8088
8089 var MentionedMember = message.mentions.members.first();
8090 var SomeoneTagged = message.member;
8091
8092 if (peeky.userData.has(SomeoneTagged.user.id)) {
8093
8094 const Playlist = peeky.userData.get(SomeoneTagged.user.id, "Playlist");
8095
8096 if (Playlist.length > 0) {
8097 var FinalizedPlaylist = function_NumarizeArray(Playlist, ["<", ">"])
8098 } else {
8099 var FinalizedPlaylist = "The playlist is empty.";
8100 };
8101
8102 var Thumbnail = "https://cdn.glitch.com/ea3328c2-6730-46f6-bc6f-bd2820c32afc%2Fplaylist_embed.png?v=1563967857471";
8103 if (peeky.userData.get(key, "PlaylistThumbnail") !== null) {
8104 Thumbnail = peeky.userData.get(key, "PlaylistThumbnail");
8105 };
8106
8107 const embed = {
8108 "image": {
8109 "url": Thumbnail
8110 },
8111 "fields": [
8112 {
8113 "name": peeky.userData.get(SomeoneTagged.user.id, "PlaylistName"),
8114 "value": function_RemoveFormatting(SomeoneTagged.displayName, "other", true)
8115 },
8116 {
8117 "name": "\nSongs",
8118 "value": FinalizedPlaylist + "\n"
8119 }], "color": EmbedColor};
8120 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8121
8122 } else {
8123 const embed = {"description": ErrorMessage7[Language], "color": EmbedColor};
8124 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8125 };
8126
8127 };
8128
8129 };
8130
8131};
8132
8133//Skip
8134if (CommandName == "skip") {
8135
8136 if (CurrentlyPlaying.has(message.guild.id)) {
8137
8138 var OwnerActive = false;
8139
8140 if (message.guild.me.voiceChannel && message.guild.me.voiceChannel.members.filter(m => m.id == message.guild.owner.user.id).map(m => m).length > 0) {
8141 OwnerActive = true;
8142 };
8143
8144 if ((OwnerActive == true && message.author.id == message.guild.owner.user.id) || OwnerActive == false) {
8145
8146 CurrentlyPlaying.delete(message.guild.id);
8147
8148 if (message.guild.me.voiceChannel) {
8149 message.guild.me.voiceChannel.leave();
8150 };
8151
8152 } else {
8153 var TranslatedMessages = [ErrorIcon + "Only the server owner can skip this song right now.", ErrorIcon + " Písničku může momentálně přeskočit pouze vlastník serveru."];
8154 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8155 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8156 };
8157
8158 } else {
8159 const embed = {"description": ErrorMessage12[Language], "color": EmbedColor};
8160 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8161 };
8162
8163};
8164
8165//GuessTheSong
8166if (CommandName == "guessthesong") {
8167
8168 if (!CurrentlyPlaying.has(message.guild.id) && !ActiveMinigames.has(message.guild.id)) {
8169
8170 if (message.member.voiceChannel) {
8171
8172 const voiceChannel = message.member.voiceChannel;
8173 var ChosenSong = Math.floor((Math.random() * GuessTheSong.length));
8174
8175 InfoMessages.push(InfoIcon + " Full Song: <" + GuessTheSong[ChosenSong][0] + ">");
8176
8177 CurrentlyPlaying.add(message.guild.id);
8178 ActiveMinigames.add(message.guild.id);
8179 setTimeout(() => {CurrentlyPlaying.delete(message.guild.id)
8180 ActiveMinigames.delete(message.guild.id)}, 30000);
8181
8182 if (voiceChannel.permissionsFor(peeky.user).has('CONNECT' && 'SPEAK')) {
8183
8184 await voiceChannel.join().then(async connection => {
8185
8186 const stream = ytdl(GuessTheSong[ChosenSong][0]);
8187 const dispatcher = await connection.playStream(stream, StreamOptions);
8188 const LengthDate = new Date(); LengthDate.setMinutes(LengthDate.getMinutes() + (30 / 60));
8189
8190 //dispatcher.on('end', async reason => {});
8191
8192 peeky.serverData.set(keySF, "Guess the Song", "Title");
8193 peeky.serverData.set(keySF, DefaultBackground, "Thumbnail");
8194 peeky.serverData.set(keySF, "", "Author");
8195 peeky.serverData.set(keySF, LengthDate, "Length");
8196 peeky.serverData.set(keySF, new Date(), "Started");
8197 peeky.serverData.set(keySF, "", "Link");
8198
8199 var TranslatedMessages = ["**Try to guess the name of this song!**", "**Zkuste uhádnout jméno této písničky!**"];
8200 const embed = {"description": TranslatedMessages[Language] + "\n" + GuessTheSong[ChosenSong][2], "color": EmbedColor};
8201 message.channel.send({ embed });
8202
8203 message.channel.awaitMessages(response => response.content.toLowerCase() == GuessTheSong[ChosenSong][1].toLowerCase(), { maxMatches: 1, time: 30000, errors: ['time'] })
8204 .then(collected => {
8205 var key = collected.first().author.id;
8206
8207 //Gamer Badge
8208 if (peeky.userData.has(key) && peeky.userData.get(key, "GamerBadge") == false) {
8209 peeky.userData.set(key, true, "GamerBadge");
8210 InfoMessages.push(InfoMessage1[Language]);
8211 };
8212
8213 if (peeky.userData.has(key)) {
8214 peeky.userData.math(key, "+", 100, "Gredit");
8215 };
8216
8217 voiceChannel.leave();
8218
8219 const embed = {"description": SuccessIcon + " **" + function_RemoveFormatting(collected.first().member.displayName, "other", true) + "** has guessed the song's name!" + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
8220 message.channel.send({ embed });
8221
8222 })
8223 .catch(collected => {
8224 const embed = {"description": ErrorIcon + " The song's name was **" + GuessTheSong[ChosenSong][1] + "**." + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
8225 message.channel.send({ embed });
8226
8227 voiceChannel.leave();
8228 });
8229
8230 });
8231
8232 };
8233
8234 } else {
8235 const embed = {"description": ErrorIcon + " You need to join a voice channel.", "color": EmbedColor};
8236 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8237 };
8238
8239
8240 } else {
8241 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
8242 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8243 };
8244
8245};
8246
8247//TriviaQuestions
8248if (CommandName == "triviaquestions") {
8249
8250 if (!ActiveMinigames.has(message.guild.id)) {
8251
8252 var ChosenQuestion = Math.floor((Math.random() * TriviaQuestions.length));
8253 var Answers = function_ShuffleArray(TriviaQuestions[ChosenQuestion].slice(1, 4));
8254
8255 ActiveMinigames.add(message.guild.id);
8256 setTimeout(() => {ActiveMinigames.delete(message.guild.id)}, 30000);
8257
8258 const embed = {"description": "**" + TriviaQuestions[ChosenQuestion][0] + "**\n" + TriviaQuestions[ChosenQuestion][4] + "\n\n" + function_NumarizeArray(Answers, ["", ""]), "color": EmbedColor};
8259 message.channel.send({ embed });
8260
8261 message.channel.awaitMessages(response => response.content.toLowerCase() == TriviaQuestions[ChosenQuestion][1][0].toLowerCase(), { maxMatches: 1, time: 30000, errors: ['time'] })
8262 .then(collected => {
8263 var key = collected.first().author.id;
8264
8265 //Gamer Badge
8266 if (peeky.userData.has(key) && peeky.userData.get(key, "GamerBadge") == false) {
8267 peeky.userData.set(key, true, "GamerBadge");
8268 InfoMessages.push(InfoMessage1[Language]);
8269 };
8270
8271 if (peeky.userData.has(key)) {
8272 peeky.userData.math(key, "+", 50, "Gredit");
8273 };
8274
8275 const embed = {"description": SuccessIcon + " **" + function_RemoveFormatting(collected.first().member.displayName, "other", true) + "** has chosen the right answer!" + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
8276 message.channel.send({ embed });
8277 })
8278 .catch(collected => {
8279 const embed = {"description": ErrorIcon + " The question's answer was **" + TriviaQuestions[ChosenQuestion][1][0] + "**.", "color": EmbedColor};
8280 message.channel.send({ embed });
8281 });
8282
8283
8284 } else {
8285 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
8286 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8287 };
8288
8289};
8290
8291//DrawAndGuess
8292if (CommandName == "drawandguess") {
8293
8294 if (!ActiveMinigames.has(message.guild.id)) {
8295
8296 var ChosenQuestion = Math.floor((Math.random() * RandomWords.length));
8297 var Active = false;
8298
8299 ActiveMinigames.add(message.guild.id);
8300 setTimeout(() => {ActiveMinigames.delete(message.guild.id)}, 90000);
8301
8302 var embed = {"description": InfoIcon + " Draw the word **" + RandomWords[ChosenQuestion] + "** in under **1 minute**.", "color": EmbedColor};
8303 await function_DirectMessage(message.author.id, { embed, file: "https://cdn.glitch.com/a3bbad00-1612-4e6e-b3cf-731aa68e37c4%2Fempty_canvas.png" });
8304
8305 var embed = {"description": InfoIcon + " **" + function_RemoveFormatting(message.member.displayName, "other", true) + "** has **1 minute** to draw their word!", "color": EmbedColor};
8306 message.channel.send({ embed });
8307
8308 message.channel.awaitMessages(response => response.author.id == message.author.id && response.attachments.array().length > 0, { maxMatches: 1, time: 60000, errors: ['time'] })
8309 .then(collected => {
8310
8311 const embed = {"description": InfoIcon + " Try to guess the word that **" + function_RemoveFormatting(message.member.displayName, "other", true) + "** has drawn!", "color": EmbedColor};
8312 message.channel.send({ embed });
8313
8314 Active = true;
8315
8316 setTimeout(() => {
8317
8318 if (Active == true) {
8319
8320 var Hint = "";
8321
8322 for (var i = 0; i < RandomWords[ChosenQuestion].length; i++) {
8323
8324 if (i == 0) {
8325 Hint = Hint + " " + RandomWords[ChosenQuestion][i] + " ";
8326 }
8327 else
8328 {
8329 Hint = Hint + " - ";
8330 };
8331
8332 };
8333
8334 const embed = {"description": InfoIcon + " Time's running low, so here's a hint: " + Hint, "color": EmbedColor};
8335 message.channel.send({ embed });
8336
8337 };
8338
8339 }, 20000);
8340
8341 message.channel.awaitMessages(response => response.author.id !== message.author.id && response.content.toLowerCase() == RandomWords[ChosenQuestion].toLowerCase(), { maxMatches: 1, time: 30000, errors: ['time'] })
8342 .then(collected => {
8343 var key = collected.first().author.id;
8344
8345 Active = false;
8346
8347 //Gamer Badge
8348 if (peeky.userData.has(key) && peeky.userData.get(key, "GamerBadge") == false) {
8349 peeky.userData.set(key, true, "GamerBadge");
8350 InfoMessages.push(InfoMessage1[Language]);
8351 };
8352
8353 if (peeky.userData.has(key)) {
8354 peeky.userData.math(key, "+", 250, "Gredit");
8355 };
8356
8357 const embed = {"description": SuccessIcon + " Congratulations, **" + function_RemoveFormatting(collected.first().member.displayName, "other", true) + "** has guessed the word!" + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
8358 message.channel.send({ embed });
8359 })
8360 .catch(collected => {
8361 const embed = {"description": ErrorIcon + " The word was **" + RandomWords[ChosenQuestion] + "**.", "color": EmbedColor};
8362 message.channel.send({ embed });
8363 });
8364
8365 })
8366 .catch(collected => {
8367 const embed = {"description": ErrorIcon + " Sorry, but **" + function_RemoveFormatting(message.member.displayName, "other", true) + "** has ran out of time to draw.", "color": EmbedColor};
8368 message.channel.send({ embed });
8369 });
8370
8371
8372 } else {
8373 const embed = {"description": CooldownMessage1[Language], "color": EmbedColor};
8374 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8375 };
8376
8377};
8378
8379//Mute
8380if (CommandName.startsWith("mute")) {
8381
8382 var CommandArgument = CommandName.split("mute")[1];
8383
8384if (CommandArgument.startsWith(" ")) {
8385
8386 CommandArgument = CommandArgument.replace(" ", "");
8387
8388 if (message.member.permissions.has("MUTE_MEMBERS")) {
8389
8390 if (message.guild.me.hasPermission("MANAGE_ROLES")) {
8391
8392 var MentionedMember = message.mentions.members.first();
8393 var name = peeky.serverData.get(keySF, "muted_role");
8394 var Role = message.guild.roles.find(role => role.name == name);
8395
8396 if (MentionedMember) {
8397
8398 if (Role) {
8399
8400 if (!MentionedMember.permissions.has("MUTE_MEMBERS") && MentionedMember.id !== message.author.id && !MentionedMember.roles.has(Role.id)) {
8401
8402 await MentionedMember.addRole(Role.id, "Unmuted by " + message.author.tag + ".").catch(error => {
8403 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8404 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8405 ErrorBag.add(error); Failed = true;
8406 });
8407
8408 if (Failed == false) {
8409 const embed = {"description": SuccessIcon + " I have muted **" + function_RemoveFormatting(MentionedMember.displayName, "other", true) + "** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8410 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8411 };
8412
8413 }
8414 else
8415 {
8416 var TranslatedMessages = [ErrorIcon + " You cannot mute that user.", ErrorIcon + " Tohoto uživatele ztlumit nemůžete."];
8417 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8418 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8419 };
8420
8421 }
8422 else
8423 {
8424 var TranslatedMessages = [ErrorIcon + " I cannot find a role called **X001**.", ErrorIcon + " Nemohu najít roli s jménem **X001**."];
8425 const embed = {"description": TranslatedMessages[Language].replace("X001", name), "color": EmbedColor};
8426 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8427 };
8428
8429 }
8430 else
8431 {
8432 const embed = {"description": ErrorMessage3[Language], "color": EmbedColor};
8433 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8434 };
8435
8436 }
8437 else
8438 {
8439 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8440 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8441 };
8442
8443 }
8444 else
8445 {
8446 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8447 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8448 };
8449
8450}
8451 else if (CommandArgument == "")
8452{
8453 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8454 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8455};
8456
8457};
8458
8459//Unmute
8460if (CommandName.startsWith("unmute")) {
8461
8462 var CommandArgument = CommandName.split("unmute")[1];
8463
8464if (CommandArgument.startsWith(" ")) {
8465
8466 CommandArgument = CommandArgument.replace(" ", "");
8467
8468if (message.member.permissions.has("MUTE_MEMBERS")) {
8469
8470if (message.guild.me.hasPermission("MANAGE_ROLES")) {
8471
8472 var MentionedMember = message.mentions.members.first();
8473 var name = peeky.serverData.get(keySF, "muted_role");
8474 var Role = message.guild.roles.find(role => role.name == name);
8475
8476 if (MentionedMember) {
8477
8478 if (Role) {
8479
8480 if (!MentionedMember.permissions.has("MUTE_MEMBERS") && MentionedMember.id !== message.author.id && MentionedMember.roles.has(Role.id)) {
8481
8482 await MentionedMember.removeRole(Role.id, "Unmuted by " + message.author.tag + ".").catch(error => {
8483 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8484 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8485 ErrorBag.add(error); Failed = true;
8486 });
8487
8488 if (Failed == false) {
8489 const embed = {"description": SuccessIcon + " I have unmuted **" + function_RemoveFormatting(MentionedMember.displayName, "other", true) + "** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8490 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8491 };
8492
8493 }
8494 else
8495 {
8496 var TranslatedMessages = [ErrorIcon + " You cannot unmute that user.", ErrorIcon + " Tohoto uživatele odztlumit nemůžete."];
8497 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8498 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8499 };
8500
8501 }
8502 else
8503 {
8504 var TranslatedMessages = [ErrorIcon + " I cannot find a role called **X001**.", ErrorIcon + " Nemohu najít roli s jménem **X001**."];
8505 const embed = {"description": TranslatedMessages[Language].replace("X001", name), "color": EmbedColor};
8506 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8507 };
8508
8509 }
8510 else
8511 {
8512 const embed = {"description": ErrorMessage3[Language], "color": EmbedColor};
8513 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8514 };
8515
8516}
8517 else
8518{
8519 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8520 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8521};
8522
8523}
8524 else
8525{
8526 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8527 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8528};
8529
8530}
8531 else if (CommandArgument == "")
8532{
8533 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8534 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8535};
8536
8537};
8538
8539//IDBan
8540if (CommandName.startsWith("idban")) {
8541
8542 var CommandArgument = CommandName.split("idban")[1];
8543
8544 if (CommandArgument.startsWith(" ")) {
8545
8546 CommandArgument = CommandArgument.replace(" ", "");
8547
8548 if (message.member.permissions.has("BAN_MEMBERS")) {
8549
8550 if (message.guild.me.hasPermission("BAN_MEMBERS")) {
8551
8552 var ValidID = 0;
8553
8554 await peeky.fetchUser(CommandArgument, true).catch(error => { ErrorBag.add(error); ValidID ++; });
8555
8556 if (ValidID == 0) {
8557
8558 if (!message.guild.members.find(m => m.id == CommandArgument)) {
8559
8560 await message.guild.ban(CommandArgument, "ID banned by " + message.author.tag + ".").catch(error => {
8561 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8562 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8563 ErrorBag.add(error); Failed = true;
8564 });
8565
8566 if (Failed == false) {
8567 const embed = {"description": SuccessIcon + " I have ID banned **" + function_RemoveFormatting(peeky.users.get(CommandArgument).username, "other", true) + "** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8568 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8569 };
8570
8571 }
8572 else
8573 {
8574 var TranslatedMessages = [ErrorIcon + " You cannot ID ban someone inside the server.", ErrorIcon + " Nemůžete ID Zabanovat někoho na serveru."];
8575 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8576 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8577 };
8578
8579 }
8580 else
8581 {
8582 var TranslatedMessages = [ErrorIcon + " You must enter a valid ID.", ErrorIcon + " Musíte zadat validní ID."];
8583 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8584 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8585 };
8586
8587 }
8588 else
8589 {
8590 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8591 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8592 };
8593
8594 }
8595 else
8596 {
8597 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8598 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8599 };
8600
8601 }
8602 else if (CommandArgument == "")
8603 {
8604 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8605 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8606 };
8607
8608};
8609
8610//Ban
8611if (CommandName.startsWith("ban")) {
8612
8613 if (message.member.permissions.has("BAN_MEMBERS")) {
8614
8615 if (message.guild.me.hasPermission("BAN_MEMBERS")) {
8616
8617 var MentionedMember = message.mentions.members.first();
8618
8619 if (MentionedMember && MentionedMember.bannable && !MentionedMember.permissions.has("BAN_MEMBERS")) {
8620
8621 await message.guild.ban(MentionedMember.user.id, "Banned by " + message.author.tag + ".").catch(error => {
8622 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8623 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8624 ErrorBag.add(error); Failed = true;
8625 });
8626
8627 if (Failed == false) {
8628 const embed = {"description": SuccessIcon + " I have banned **" + function_RemoveFormatting(MentionedMember.displayName, "other", true) + "** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8629 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8630 };
8631
8632 }
8633 else
8634 {
8635 var TranslatedMessages = [ErrorIcon + " You cannot ban that user.", ErrorIcon + " Tohoto uživatele zabanovat nemůžete."];
8636 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8637 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8638 };
8639
8640 }
8641 else
8642 {
8643 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8644 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8645 };
8646
8647 }
8648 else
8649 {
8650 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8651 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8652 };
8653
8654};
8655
8656//Kick
8657if (CommandName.startsWith("kick")) {
8658
8659 if (message.member.permissions.has("KICK_MEMBERS")) {
8660
8661 if (message.guild.me.hasPermission("KICK_MEMBERS")) {
8662
8663 var MentionedMember = message.mentions.members.first();
8664
8665 if (MentionedMember && MentionedMember.bannable && !MentionedMember.permissions.has("KICK_MEMBERS")) {
8666
8667 await MentionedMember.kick("Kicked by " + message.author.tag + ".").catch(error => {
8668 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8669 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8670 ErrorBag.add(error); Failed = true;
8671 });
8672
8673 if (Failed == false) {
8674 const embed = {"description": SuccessIcon + " I have kicked **" + function_RemoveFormatting(MentionedMember.displayName, "other", true) + "** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8675 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8676 };
8677
8678 }
8679 else
8680 {
8681 var TranslatedMessages = [ErrorIcon + " You cannot kick that user.", ErrorIcon + " Tohoto uživatele vykopnout nemůžete."];
8682 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8683 };
8684
8685 }
8686 else
8687 {
8688 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8689 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8690 };
8691
8692 }
8693 else
8694 {
8695 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8696 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8697 };
8698
8699};
8700
8701//Purge
8702if (CommandName.startsWith("purge")) {
8703
8704 var CommandArgument = CommandName.split("purge")[1];
8705
8706 if (CommandArgument.startsWith(" ")) {
8707
8708 if (message.member.permissions.has("MANAGE_MESSAGES")) {
8709
8710 if (message.channel.permissionsFor(peeky.user).has('MANAGE_MESSAGES')) {
8711
8712 CommandArgument = CommandArgument.replace(" ", "");
8713
8714 if (isNaN(CommandArgument) == false && CommandArgument > 0 && CommandArgument <= 100) {
8715
8716 await message.delete().catch(error => ErrorBag.add(error));
8717
8718 message.channel.bulkDelete(CommandArgument).catch(error => {
8719 const embed = {"description": ErrorMessage13[Language], "color": EmbedColor};
8720 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8721 ErrorBag.add(error); Failed = true;
8722 });
8723
8724 if (Failed == false) {
8725 const embed = {"description": SuccessIcon + " I have purged **" + CommandArgument + " messages** at **" + function_RemoveFormatting(message.member.displayName, "other", true) + "**'s request.", "color": EmbedColor};
8726 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8727 };
8728
8729 }
8730 else
8731 {
8732 var TranslatedMessages = [ErrorIcon + " You can only purge 1 to 100 messages.", ErrorIcon + " Můžete vyčistit jenom 1 až 100 zpráv."];
8733 const embed = {"description": TranslatedMessages[Language], "color": EmbedColor};
8734 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8735 };
8736
8737 }
8738 else
8739 {
8740 const embed = {"description": PermissionsMessageError3[Language], "color": EmbedColor};
8741 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8742 };
8743
8744 }
8745 else
8746 {
8747 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8748 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8749 };
8750
8751 }
8752 else if (CommandArgument == "")
8753 {
8754 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8755 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8756 };
8757
8758};
8759
8760//Prefix
8761if (CommandName.startsWith("prefix")) {
8762
8763 var CommandArgument = CommandName.split("prefix")[1];
8764
8765 if (CommandArgument.startsWith(" ")) {
8766
8767 CommandArgument = CommandArgument.replace(" ", "").slice(0, 5).toLowerCase();
8768
8769 if (message.member.user.id == message.guild.owner.user.id || message.author.id == OwnerId) {
8770
8771 if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
8772
8773 const InfoMessages = [InfoIcon + " If the prefix is broken, join the Support Server."];
8774
8775 peeky.serverData.set(keySF, CommandArgument, "prefix");
8776
8777 var TranslatedMessages = [SuccessIcon + " The prefix is now **X001**.", SuccessIcon + " Prefix je teď **X001**."];
8778 const embed = {"description": TranslatedMessages[Language].replace("X001", CommandArgument) + InfoMessages.join("\n\n"), "color": EmbedColor};
8779 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8780
8781 }
8782 else
8783 {
8784 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
8785 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8786 };
8787
8788 }
8789 else
8790 {
8791 const embed = {"description": PermissionsMessageError2[Language], "color": EmbedColor};
8792 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8793 };
8794
8795 }
8796 else if (CommandArgument == "")
8797 {
8798 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8799 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8800 };
8801
8802};
8803
8804//HighlightedChannel
8805if (CommandName.startsWith("highlightedchannel")) {
8806
8807 var CommandArgument = CommandName.split("highlightedchannel")[1];
8808
8809 if (CommandArgument.startsWith(" ")) {
8810
8811 CommandArgument = function_RemoveFormatting(CommandArgument.replace(" ", ""), "channel", true);
8812
8813 if (message.member.user.id == message.guild.owner.user.id || message.author.id == OwnerId) {
8814
8815 if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
8816
8817 peeky.serverData.set(keySF, CommandArgument, "highlighted_channel");
8818
8819 var TranslatedMessages = [SuccessIcon + " The highlighted channel is now **#X001**.", SuccessIcon + " Zvýrazněný kanál je teď **#X001**."];
8820 const embed = {"description": TranslatedMessages[Language].replace("X001", CommandArgument) + InfoMessages.join("\n\n"), "color": EmbedColor};
8821 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8822
8823 }
8824 else
8825 {
8826 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
8827 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8828 };
8829
8830 }
8831 else
8832 {
8833 const embed = {"description": PermissionsMessageError2[Language], "color": EmbedColor};
8834 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8835 };
8836
8837 }
8838 else if (CommandArgument == "")
8839 {
8840 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8841 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8842 };
8843
8844};
8845
8846//FunctionNotifications
8847if (CommandName.startsWith("functionnotifications")) {
8848
8849 if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
8850
8851 if(peeky.serverData.get(keySF, "function_notifications") == true) {peeky.serverData.set(keySF, false, "function_notifications");}
8852 else peeky.serverData.set(keySF, true, "function_notifications");
8853
8854 var TranslatedMessages = [SuccessIcon + " The function notifications are now set to **X001**.", SuccessIcon + " Upozornění na funkce jsou teď nastaveny na **X001**."];
8855 const embed = {"description": TranslatedMessages[Language].replace("X001", peeky.serverData.get(keySF, "function_notifications")), "color": EmbedColor};
8856 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8857
8858 }
8859 else
8860 {
8861 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8862 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8863 };
8864
8865};
8866
8867//LevelNotifications
8868if (CommandName.startsWith("levelnotifications")) {
8869
8870 if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
8871
8872 if(peeky.serverData.get(keySF, "level_notifications") == true) {peeky.serverData.set(keySF, false, "level_notifications");}
8873 else peeky.serverData.set(keySF, true, "level_notifications");
8874
8875 var TranslatedMessages = [SuccessIcon + " The level notifications are now set to **X001**.", SuccessIcon + " Upozornění na levely jsou teď nastaveny na **X001**."];
8876 const embed = {"description": TranslatedMessages[Language].replace("X001", peeky.serverData.get(keySF, "function_notifications")), "color": EmbedColor};
8877 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8878
8879 }
8880 else
8881 {
8882 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8883 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8884 };
8885
8886};
8887
8888//MuteRole
8889if (CommandName.startsWith("muterole")) {
8890
8891 var CommandArgument = CommandName.split("muterole")[1];
8892
8893 if (CommandArgument.startsWith(" ")) {
8894
8895 if (message.member.permissions.has("MANAGE_GUILD") || message.author.id == OwnerId) {
8896
8897 CommandArgument = CommandArgument.replace(" ", "");
8898
8899 if (message.mentions.channels.first() == undefined && message.mentions.roles.first() == undefined && message.mentions.members.first() == undefined) {
8900
8901 var FixedMutedRole = function_RemoveFormatting(CommandArgument, "role", true);
8902 var RoleExist = message.guild.roles.find(role => role.name == CommandArgument);
8903 var FilteredChannels = message.guild.channels.array().filter(channel => !TextChannels.includes(channel.type));
8904
8905 if (!RoleExist && message.guild.me.hasPermission("MANAGE_ROLES")) {
8906
8907 if (!RoleCooldown.has(message.guild.id)) {
8908
8909 RoleCooldown.add(message.guild.id);
8910 setTimeout(() => {RoleCooldown.delete(message.guild.id)}, RoleCooldownMS);
8911
8912 await message.guild.createRole({
8913 name: CommandArgument,
8914 color: "#943148"
8915 }).catch(error => ErrorBag.add(error));
8916
8917 InfoMessages.push(InfoIcon + " Created a role called **" + CommandArgument + "**.");
8918
8919 if (message.guild.roles.find(role => role.name == CommandArgument) && message.guild.me.hasPermission("MANAGE_CHANNELS") && !RoleCooldown.has(message.guild.id + "muterole")) {
8920
8921 RoleCooldown.add(message.guild.id + "muterole");
8922 setTimeout(() => {RoleCooldown.delete(message.guild.id + "muterole")}, 300000);
8923
8924 var Amount = 0;
8925 var MuteRole = message.guild.roles.find(role => role.name == CommandArgument);
8926
8927 FilteredChannels.forEach(channel => {
8928
8929 var Failed = false;
8930
8931 if (channel.type == "voice" && !channel.permissionsFor(message.guild.me).has("CONNECT")) {
8932 Failed = true;
8933 };
8934
8935 if (Failed == false && Amount < 25) {
8936
8937 channel.overwritePermissions(MuteRole, {
8938 'SEND_MESSAGES': false
8939 }).catch(error => ErrorBag.add(error));
8940
8941 Amount ++;
8942
8943 };
8944
8945 });
8946
8947 var TranslatedMessages = [InfoIcon + " Edited **X001** channels for the **@X002** role.", InfoIcon + " Upravil jsem **X001** kanálu pro roli **X002**."];
8948 InfoMessages.push(TranslatedMessages[Language].replace("X001", Amount + "/" + FilteredChannels.length).replace("X002", CommandArgument));
8949
8950 }
8951 else
8952 {
8953 var TranslatedMessages = [ErrorIcon + " Couldn't edit channels for the **@X001** role.", ErrorIcon + " Nemohl jsem upravit kanály pro roli **X001**."];
8954 InfoMessages.push(TranslatedMessages[Language].replace("X001", CommandArgument));
8955 };
8956
8957 }
8958 else
8959 {
8960 const embed = {"description": CooldownMessage3[Language], "color": EmbedColor};
8961 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8962 };
8963
8964 };
8965
8966 peeky.serverData.set(keySF, CommandArgument, "muted_role");
8967
8968 var TranslatedMessages = [SuccessIcon + " The mute role is now set to **@X001**.", SuccessIcon + " Role na ztlumení je teď nastavena na **@X001**."];
8969 const embed = {"description": TranslatedMessages[Language].replace("X001", CommandArgument) + "\n\n" + InfoMessages.join("\n\n"), "color": EmbedColor};
8970 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8971
8972 }
8973 else
8974 {
8975 const embed = {"description": ErrorMessage8[Language], "color": EmbedColor};
8976 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8977 };
8978
8979 }
8980 else
8981 {
8982 const embed = {"description": PermissionsMessageError1[Language], "color": EmbedColor};
8983 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8984 };
8985
8986 }
8987 else if (CommandArgument == "")
8988 {
8989 const embed = {"description": ErrorMessage18[Language], "color": EmbedColor};
8990 message.channel.send({ embed }).catch(error => ErrorBag.add(error));
8991 };
8992
8993};
8994
8995};
8996
8997};
8998
8999};
9000};
9001});
9002
9003peeky.login(process.env.BOT_TOKEN).catch(console.error);