From bb5260ce68ea112b8d9b4fa923bd7a1c13d008c3 Mon Sep 17 00:00:00 2001 From: Wizzy69 <45517207+Wizzy69@users.noreply.github.com> Date: Wed, 12 Jan 2022 15:37:45 +0200 Subject: [PATCH] --- .vscode/launch.json | 26 +++++ .vscode/solution-explorer/class.cs-template | 5 + .vscode/solution-explorer/class.ts-template | 3 + .vscode/solution-explorer/class.vb-template | 9 ++ .vscode/solution-explorer/default.ts-template | 3 + .vscode/solution-explorer/enum.cs-template | 5 + .../solution-explorer/interface.cs-template | 5 + .../solution-explorer/interface.ts-template | 3 + .vscode/solution-explorer/template-list.json | 46 +++++++++ .../solution-explorer/template-parameters.js | 17 ++++ .vscode/tasks.json | 42 ++++++++ BUILDS/net5.0/CMD_LevelingSystem.dll | Bin 10240 -> 10240 bytes BUILDS/net5.0/CMD_Utils.dll | Bin 9216 -> 11776 bytes BUILDS/net5.0/PluginManager.dll | Bin 36864 -> 37376 bytes BUILDS/net5.0/ref/CMD_LevelingSystem.dll | Bin 6656 -> 6656 bytes BUILDS/net5.0/ref/CMD_Utils.dll | Bin 6656 -> 7168 bytes CMD_LevelingSystem/Commands/level.cs | 2 + CMD_Utils/Echo.cs | 2 + CMD_Utils/FlipCoin.cs | 2 + CMD_Utils/Poll.cs | 53 ++++++++++ CMD_Utils/Random.cs | 1 + DiscordBot/Data/Languages/Romanian.lng | 16 +++ .../Plugins/Commands/CMD_LevelingSystem.dll | Bin 0 -> 10240 bytes .../Data/Plugins/Commands/CMD_Utils.dll | Bin 0 -> 11776 bytes .../Plugins/Events/EVE_LevelingSystem.dll | Bin 0 -> 9728 bytes .../Data/Plugins/Events/Leveling System.dll | Bin 0 -> 9728 bytes .../Data/Plugins/Events/StartupEvents.dll | Bin 0 -> 12800 bytes DiscordBot/Data/Resources/DiscordBotCore.data | 2 + DiscordBot/Data/Resources/Language.txt | 1 + .../LevelingSystem/462627303479050242.data | 1 + .../LevelingSystem/477015304724021248.data | 1 + .../Resources/StartupEvents/LoginEvent.txt | 7 ++ .../Resources/StartupEvents/UserJoinEvent.txt | 13 +++ DiscordBot/Discord/Commands/Help.cs | 41 ++++++-- DiscordBot/Discord/Commands/Settings.cs | 78 +++++++++++++++ DiscordBot/Discord/Core/Boot.cs | 4 +- DiscordBot/Discord/Core/CommandHandler.cs | 64 +++++++++++- DiscordBot/Program.cs | 93 +++++++----------- PluginManager/Interfaces/DBCommand.cs | 1 + .../DiscordPermissions.cs} | 11 ++- 40 files changed, 484 insertions(+), 73 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/solution-explorer/class.cs-template create mode 100644 .vscode/solution-explorer/class.ts-template create mode 100644 .vscode/solution-explorer/class.vb-template create mode 100644 .vscode/solution-explorer/default.ts-template create mode 100644 .vscode/solution-explorer/enum.cs-template create mode 100644 .vscode/solution-explorer/interface.cs-template create mode 100644 .vscode/solution-explorer/interface.ts-template create mode 100644 .vscode/solution-explorer/template-list.json create mode 100644 .vscode/solution-explorer/template-parameters.js create mode 100644 .vscode/tasks.json create mode 100644 CMD_Utils/Poll.cs create mode 100644 DiscordBot/Data/Languages/Romanian.lng create mode 100644 DiscordBot/Data/Plugins/Commands/CMD_LevelingSystem.dll create mode 100644 DiscordBot/Data/Plugins/Commands/CMD_Utils.dll create mode 100644 DiscordBot/Data/Plugins/Events/EVE_LevelingSystem.dll create mode 100644 DiscordBot/Data/Plugins/Events/Leveling System.dll create mode 100644 DiscordBot/Data/Plugins/Events/StartupEvents.dll create mode 100644 DiscordBot/Data/Resources/DiscordBotCore.data create mode 100644 DiscordBot/Data/Resources/Language.txt create mode 100644 DiscordBot/Data/Resources/LevelingSystem/462627303479050242.data create mode 100644 DiscordBot/Data/Resources/LevelingSystem/477015304724021248.data create mode 100644 DiscordBot/Data/Resources/StartupEvents/LoginEvent.txt create mode 100644 DiscordBot/Data/Resources/StartupEvents/UserJoinEvent.txt create mode 100644 DiscordBot/Discord/Commands/Settings.cs rename PluginManager/Others/{Permissions.cs => Permissions/DiscordPermissions.cs} (56%) diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2fc441b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + "version": "0.2.0", + "configurations": [ + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/DiscordBot/bin/Debug/net5.0/DiscordBot.dll", + "args": [], + "cwd": "${workspaceFolder}/DiscordBot", + // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/solution-explorer/class.cs-template b/.vscode/solution-explorer/class.cs-template new file mode 100644 index 0000000..20c7109 --- /dev/null +++ b/.vscode/solution-explorer/class.cs-template @@ -0,0 +1,5 @@ +namespace {{namespace}}; + +public class {{name}} +{ +} diff --git a/.vscode/solution-explorer/class.ts-template b/.vscode/solution-explorer/class.ts-template new file mode 100644 index 0000000..ff2edef --- /dev/null +++ b/.vscode/solution-explorer/class.ts-template @@ -0,0 +1,3 @@ +export class {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/class.vb-template b/.vscode/solution-explorer/class.vb-template new file mode 100644 index 0000000..38ef67f --- /dev/null +++ b/.vscode/solution-explorer/class.vb-template @@ -0,0 +1,9 @@ +Imports System + +Namespace {{namespace}} + + Public Class {{name}} + + End Class + +End Namespace diff --git a/.vscode/solution-explorer/default.ts-template b/.vscode/solution-explorer/default.ts-template new file mode 100644 index 0000000..04af870 --- /dev/null +++ b/.vscode/solution-explorer/default.ts-template @@ -0,0 +1,3 @@ +export default {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/enum.cs-template b/.vscode/solution-explorer/enum.cs-template new file mode 100644 index 0000000..1ded8c0 --- /dev/null +++ b/.vscode/solution-explorer/enum.cs-template @@ -0,0 +1,5 @@ +namespace {{namespace}}; + +public enum {{name}} +{ +} diff --git a/.vscode/solution-explorer/interface.cs-template b/.vscode/solution-explorer/interface.cs-template new file mode 100644 index 0000000..bf25cbb --- /dev/null +++ b/.vscode/solution-explorer/interface.cs-template @@ -0,0 +1,5 @@ +namespace {{namespace}}; + +public interface {{name}} +{ +} diff --git a/.vscode/solution-explorer/interface.ts-template b/.vscode/solution-explorer/interface.ts-template new file mode 100644 index 0000000..3ea404b --- /dev/null +++ b/.vscode/solution-explorer/interface.ts-template @@ -0,0 +1,3 @@ +export interface {{name}} { + +} \ No newline at end of file diff --git a/.vscode/solution-explorer/template-list.json b/.vscode/solution-explorer/template-list.json new file mode 100644 index 0000000..2849622 --- /dev/null +++ b/.vscode/solution-explorer/template-list.json @@ -0,0 +1,46 @@ +{ + "templates": [ + { + "name": "Class", + "extension": "cs", + "file": "./class.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Interface", + "extension": "cs", + "file": "./interface.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Enum", + "extension": "cs", + "file": "./enum.cs-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Class", + "extension": "ts", + "file": "./class.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Interface", + "extension": "ts", + "file": "./interface.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Default", + "extension": "ts", + "file": "./default.ts-template", + "parameters": "./template-parameters.js" + }, + { + "name": "Class", + "extension": "vb", + "file": "./class.vb-template", + "parameters": "./template-parameters.js" + } + ] +} \ No newline at end of file diff --git a/.vscode/solution-explorer/template-parameters.js b/.vscode/solution-explorer/template-parameters.js new file mode 100644 index 0000000..daba8b2 --- /dev/null +++ b/.vscode/solution-explorer/template-parameters.js @@ -0,0 +1,17 @@ +var path = require("path"); + +module.exports = function(filename, projectPath, folderPath) { + var namespace = "Unknown"; + if (projectPath) { + namespace = path.basename(projectPath, path.extname(projectPath)); + if (folderPath) { + namespace += "." + folderPath.replace(path.dirname(projectPath), "").substring(1).replace(/[\\\/]/g, "."); + } + namespace = namespace.replace(/[\\\-]/g, "_"); + } + + return { + namespace: namespace, + name: path.basename(filename, path.extname(filename)) + } +}; \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..adf4d42 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/DiscordBot/DiscordBot.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/DiscordBot/DiscordBot.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/DiscordBot/DiscordBot.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/BUILDS/net5.0/CMD_LevelingSystem.dll b/BUILDS/net5.0/CMD_LevelingSystem.dll index 7fd2b21338f8eaa0499b64693e6c304b90ca9205..61627efcddd546102cfbe52e32e877fac016d06a 100644 GIT binary patch delta 1820 zcmYk74@^~c6vw~k_wMiB$AicF2M>7<0fFQZR)D6kkcGvNnn4&#!ZH(b#8Ok3X2l;{ zQsyfBskyY4EoX1mraeox{>_XSSsH08ni($9YGY2d#YTP1=Tku9 z$q3*L0;Gns=cqan4!DBX1A!ueJ2->@-7GWP(R6#nr;NVNm@fhTzqwj zNTRASX3S1t5s*F^aq}S2C({-Mr0_}8irC?4KDlNZ;0l<9At53-Vae^oR5v6RboH7hh8&tbqR{kUFS|^f z6@NKQ?01|sOf0gQYO}=V%Qm+O?Y-3+FkEP-6`Y||46x;Gp|cHgwq)cwE0`ZqwUvx* zR<&i~VcYAp8AR`F(~oy(kR4L$n^(zRGl*q!6PdWiDMDBb!Q)zJ?>FpC#=EjwB_@Tt z61cR9dA6sWnTcBG2r_Y#9N|a!(ikw3kq2G+Q(0{VF~!_O$(U#8@y(g6iM#&P}5@UaFj4*sbHTWy?@$#W=i+*aGM$hbrjE?&UEcGSzuoW3fqe#T|8&>dG3xJulRt@<#|t2qgO z#(mFqSqZ|8&vGWyj9Dqd1A|vMFj>$Cx2^i72O>ROH)AS7?mg+@~XhSjQX2 zzmdFe@Pw4|*C%+wz*8Sp6Un*mTiN13qvX#Q52ymqRA((O8^Tv|izld>J;AO_li-7X zyXj093YcDAJep-TD{a=;yxV4@&BvLk=wX`JZ8HkpSroeW5!*6^d&G1M;jmSRrM87A z)hI;*m00EQ5xPV<(#hqV$EKB5H45l1QHNq?1Innzc^})$tfd?ibha`JtqrIlU9yIx zvlmI6bSqNq)ET&u`q763^9KyumSLRd_1{Q;aLHk0NiUYt1;;3lQ_L}D3(0Z5%vDc$ z(`ru3Vw!<^s-z*@LRCEOu=)|D6VyaeT5LW@v(Ra*Vy}>EnO(d|9H85ry>x(1%NOXP zeeXqds2{y|UUvj-_(hDO3CEbr^q873&eY><$J5MiwZNAZ%9VM%L+&NbqlhrarRH~r z>h@)a1@9ehUiw9t$}B+^>)AZ!?^C_!t4`g?ldC70XZ^pUQThAeZrvZS~qcG$ng@Gfs@U$VO8v5wZ&EtSoWwyucPr>%7mVuPU; z;q|`J*tV}>N7XZ9yZ)ZI|F!;D`P4B%B`PPo-u-p_PfS<-P4#4l=~V31?70+6&bi_c OS1V$^=@+Q4$odB$SyABt delta 1744 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 aE5_E(KV$lMhwA?~xNI!1_L>-td;SerW!{GX diff --git a/BUILDS/net5.0/PluginManager.dll b/BUILDS/net5.0/PluginManager.dll index b24bd2d94ccfae79ccb2c152fe5383be1ae57422..1bc41972e5418f350fe2b01c8f2e2d2f4e12754e 100644 GIT binary patch delta 14071 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 R*G>-F6S(smwV|)`{{mxU=vDv# delta 13906 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 aK4N#V^}w{<%K~AJO;s^-z delta 1057 zcmZXTTS$~a6vzMb&9~oPTleCs;iX-T+I1~fGs4VJN^D6`F@^0#%w&tC$W@9S(j~f4 zP%;%kgpp?r-TN2lqbceGy_Mq z<=jBF;!`H|C&gCfX;HdI_j4Q0<16(pVt(QdCUYL5oKC#cUl4C2p*wL+PmsS@^}d3; zh>WdVhTfr24+?RBe(!>x2At#x@xUA!upr4?=%*>KhK4L~vg9J9YUG3zs3$h*n~48Lo<$>hKJW@O*HTK%TCbou3|d zthwe7q!})XLfeYY3}g@ra2|+BOi(85SozY6t1|lM9ul603x0_Zg@5DkmES}oEff((JyzCmqsvuxp{r>K* z{=V+@+dDeSBWdo)v@`oV*WRyF?|LX={tZlP$JPJ< diff --git a/BUILDS/net5.0/ref/CMD_Utils.dll b/BUILDS/net5.0/ref/CMD_Utils.dll index 782729d9a34adffa824638b965acca8157365215..5a716e784397857f6b1428b82afc2027e05cbc8f 100644 GIT binary patch delta 2322 zcmb`JT}&KR7>3_-W|?LA-Ccg{@*{<{RD~j-jW#U}O{r}yrIf!wY61;xD3PBETVoS+ zA&mqzkoofS5Nn!vfvlc50 za%O-W>Q;7?IhDHB=~Jh&Zssx7%gJEu>V7-( z@SWM!fahmbf+Y?h$1#RR2D+Mo-*W-QL7#Qn?Z=z$d4cfjKs&D}$HR7KbaG^TcuLNC zk=MW!!rh%1U|TLce6;&`3;&;|o_9X6YhpgCGDa<TseJ5CQ^k0a6aCQe2fc@F1-bhX40>P#5EUiK32ahYVwhtik)_)A)wmkNf0d{6e0S z#=~`$!3zavKS+Mgfq)~XU5;V4ZA<8A;lHXm@LvXU9%ff6+o{MYkLBVKE|xq#FwI9- zN(NC*7NCMGL?v0o`>RomU1W%FVvQ0$TFvSjvJ893ay&&o3ciQY!gFmr&vU(afo(5Z z+0NvKtROqs_MwMuA9{-^JTr-}9A}g~7Mz8gUHc#K10riU@x@DYUFUk1ubk$f76g%coG~44pBNoQ=f$aLWDFf=$A>1yFdT{YPexw8FftiA zG&D9cz8cA&P(k3YKL(t8{*#s+EOhDvU#Z3`!4lQzlm@F$H-f7I<%dtU^mj)`MyKk; xqh_nQTu#~{KLOH@%gG-YlDpRCj0a2fQrqfV!D+RcSGZy6&kmYjB8&CjKLLkASc3on delta 1801 zcmbuAU1(fI6vzKFv$>m(?pHP&lXerk3AWnRu))?EP0N<1^lPQDn+i)GvM~)sBuOz5 z3@qN2K#B3et~U=pD8`mN)F+d*AU-9ul!7RTpl{VG^hHG<#D`$i|IFRpyTJzw-erDs z{%6jdbMM`mxy7f8`>!nY^w_(XP`SQG&+ZnH0)lijy3Vys>7y5d`3!JIJMutWl@ie% zMPLW@5C`H;LO$-~#F^$#wJXgQbk;;tv^jUhUeQsuW|ttBya%2{KA;8DE+^Mu_))19t%Ncnte=+ClFiHsbnja}~8;(KnWCDkQ7rAv59m++LX;3-|9 zrfgH9D%}!I+e&y!m++J>;VE6hQ@TV=nF>|qRtQuoT<);-Ggak1@dek4r{=M%rre3a z%0xHPQ#!J$+{nxQe)FJ%?_#y5!X7u>%Rw=zJLH z%7%E}NgfTIWQ1=-q7_|a6c2Mz_Zg;;;2rI!ZQ&`}emq0lk3rhLqW*{LuQ?|heB|I= z9z1#-)Q`Q#H34Ro%%eD8pV1gR_S(ewtFse_FN}`%r^@Bvqzq)|W@aZQadvF#!t`YM zXk_}|9}4GI>vK*l`emFSrkw&YH#WIFoAY;ck4QPE+PYg8Dqj>`@~XDer9``2%9P(} WD~M96u^epQRPvKS^8qTQ{Qm%ZekWo8 diff --git a/CMD_LevelingSystem/Commands/level.cs b/CMD_LevelingSystem/Commands/level.cs index ef5f8dc..7bea3e4 100644 --- a/CMD_LevelingSystem/Commands/level.cs +++ b/CMD_LevelingSystem/Commands/level.cs @@ -20,6 +20,8 @@ public class level : DBCommand public bool canUseServer => true; + public bool requireAdmin => false; + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { diff --git a/CMD_Utils/Echo.cs b/CMD_Utils/Echo.cs index 90286a8..fdf7fe1 100644 --- a/CMD_Utils/Echo.cs +++ b/CMD_Utils/Echo.cs @@ -14,6 +14,8 @@ internal class Echo : DBCommand public bool canUseDM => true; public bool canUseServer => true; + public bool requireAdmin => false; + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { string m = message.Content.Substring(6); diff --git a/CMD_Utils/FlipCoin.cs b/CMD_Utils/FlipCoin.cs index 04446f4..e84f83b 100644 --- a/CMD_Utils/FlipCoin.cs +++ b/CMD_Utils/FlipCoin.cs @@ -23,6 +23,8 @@ namespace CMD_Utils public bool canUseServer => true; + public bool requireAdmin => false; + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { System.Random random = new System.Random(); diff --git a/CMD_Utils/Poll.cs b/CMD_Utils/Poll.cs new file mode 100644 index 0000000..bf81df5 --- /dev/null +++ b/CMD_Utils/Poll.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Discord; +using Discord.Commands; +using Discord.WebSocket; + +using PluginManager.Interfaces; + +namespace CMD_Utils +{ + public class Poll : DBCommand + { + public string Command => "poll"; + + public string Description => "Create a poll with options"; + + public string Usage => "poll [This-is-question] [This-is-answer-1] [This-is-answer-2] ... "; + + public bool canUseDM => false; + + public bool canUseServer => true; + + public bool requireAdmin => true; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + if (isDM) return; + string question = message.Content.Split(' ')[1].Replace('-', ' '); + string[] answers = PluginManager.Others.Functions.MergeStrings(message.Content.Split(' '), 2).Split(' '); + EmbedBuilder embedBuilder = new EmbedBuilder(); + embedBuilder.Title = question; + int len = answers.Length; + for (int i = 0; i < len; i++) + embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true); + var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build()); + + List emotes = new List(); + emotes.Add(Emoji.Parse(":one:")); + emotes.Add(Emoji.Parse(":two:")); + emotes.Add(Emoji.Parse(":three:")); + emotes.Add(Emoji.Parse(":four:")); + emotes.Add(Emoji.Parse(":five:")); + emotes.Add(Emoji.Parse(":six:")); + + for (int i = 0; i < len; i++) + await msg.AddReactionAsync(emotes[i]); + } + } +} diff --git a/CMD_Utils/Random.cs b/CMD_Utils/Random.cs index 4794634..4075588 100644 --- a/CMD_Utils/Random.cs +++ b/CMD_Utils/Random.cs @@ -13,6 +13,7 @@ public class Random : DBCommand public bool canUseDM => true; public bool canUseServer => true; + public bool requireAdmin => false; public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { diff --git a/DiscordBot/Data/Languages/Romanian.lng b/DiscordBot/Data/Languages/Romanian.lng new file mode 100644 index 0000000..0535cd0 --- /dev/null +++ b/DiscordBot/Data/Languages/Romanian.lng @@ -0,0 +1,16 @@ +######################## +# # +# Language Config File # +# Romanian # +# # +######################## + +#Language name +LANGUAGE_NAME=Romanian + +#Language on plugins +PLUGIN_LOADING_START=Incarcare extensii... +COMMAND_LOAD_SUCCESS=[COMANDA] Comanda {0} a fost incarcata cu succes +COMMAND_LOAD_FAIL=[COMANDA] Comanda {0} nu a fost incarcata pentru ca {1} +EVENT_LOAD_SUCCESS=[EVENIMENT] Evenimentul {0} a fost initializat cu succes +EVENT_LOAD_FAIL=[EVENIMENT] Evenimentul {0} nu a fost initializat pentru ca {1} \ No newline at end of file diff --git a/DiscordBot/Data/Plugins/Commands/CMD_LevelingSystem.dll b/DiscordBot/Data/Plugins/Commands/CMD_LevelingSystem.dll new file mode 100644 index 0000000000000000000000000000000000000000..61627efcddd546102cfbe52e32e877fac016d06a GIT binary patch literal 10240 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 WaurPZSyg@g6|wC9&G=vNz<&eE>AHyk literal 0 HcmV?d00001 diff --git a/DiscordBot/Data/Plugins/Commands/CMD_Utils.dll b/DiscordBot/Data/Plugins/Commands/CMD_Utils.dll new file mode 100644 index 0000000000000000000000000000000000000000..0980936eff8c316b6711690cc34ede930f2c3f9e GIT binary patch literal 11776 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 literal 0 HcmV?d00001 diff --git a/DiscordBot/Data/Plugins/Events/Leveling System.dll b/DiscordBot/Data/Plugins/Events/Leveling System.dll new file mode 100644 index 0000000000000000000000000000000000000000..5c2caaa8a0c76f34509cf68a45cf8e9d95b34fc0 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/DiscordBot/Data/Plugins/Events/StartupEvents.dll b/DiscordBot/Data/Plugins/Events/StartupEvents.dll new file mode 100644 index 0000000000000000000000000000000000000000..ad9fca9d95cf901190033b2099ddbef16526da05 GIT binary patch literal 12800 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 Username of the user +#{time.date} => Current Date +#{time.time} => Current time (hh:mm::ss) +MessageTitle = Welcome {user.Name} +MessageDescription=Embed description +MessageField1Title=Custom Title +MessageFiled1Text=Custom Filed 1 text +MessageField2Title=Custom Title +MessageFiled2Text=Custom Filed 2 text +MessageFooter=Today: {time.date} at {time.time} \ No newline at end of file diff --git a/DiscordBot/Discord/Commands/Help.cs b/DiscordBot/Discord/Commands/Help.cs index 593b9f5..92f4b25 100644 --- a/DiscordBot/Discord/Commands/Help.cs +++ b/DiscordBot/Discord/Commands/Help.cs @@ -3,6 +3,7 @@ using Discord.WebSocket; using PluginManager.Loaders; using PluginManager.Interfaces; +using PluginManager.Others.Permissions; namespace PluginManager.Commands { @@ -17,21 +18,47 @@ namespace PluginManager.Commands public bool canUseDM => true; public bool canUseServer => true; + public bool requireAdmin => false; + public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { - if (isDM) + bool isAdmin = ((SocketGuildUser)message.Author).isAdmin(); + if (isAdmin) { - foreach (DBCommand p in PluginLoader.Plugins!) - if (p.canUseDM) - context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + if (isDM) + { + foreach (DBCommand p in PluginLoader.Plugins!) + if (p.canUseDM) + if (p.requireAdmin) + context.Channel.SendMessageAsync("[ADMIN] " + p.Usage + "\t" + p.Description); + else context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + } + else + { + foreach (DBCommand p in PluginLoader.Plugins!) + if (p.canUseServer) + if (p.requireAdmin) + context.Channel.SendMessageAsync("[ADMIN] " + p.Usage + "\t" + p.Description); + else context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + } } else { - foreach (DBCommand p in PluginLoader.Plugins!) - if (p.canUseServer) - context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + if (isDM) + { + foreach (DBCommand p in PluginLoader.Plugins!) + if (p.canUseDM && !p.requireAdmin) + context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + } + else + { + foreach (DBCommand p in PluginLoader.Plugins!) + if (p.canUseServer && !p.requireAdmin) + context.Channel.SendMessageAsync(p.Usage + "\t" + p.Description); + } } + } } } \ No newline at end of file diff --git a/DiscordBot/Discord/Commands/Settings.cs b/DiscordBot/Discord/Commands/Settings.cs new file mode 100644 index 0000000..04ed19c --- /dev/null +++ b/DiscordBot/Discord/Commands/Settings.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Discord; +using Discord.Commands; +using Discord.WebSocket; + +using PluginManager.Core; +using PluginManager.Interfaces; +using PluginManager.Others; +using PluginManager.Others.Permissions; + +namespace DiscordBot.Discord.Commands +{ + class Settings : DBCommand + { + public string Command => "set"; + + public string Description => "This command allows you change all settings. Use \"set help\" to show details"; + + public string Usage => "set [keyword] [new Value]"; + + public bool canUseDM => true; + public bool canUseServer => true; + public bool requireAdmin => true; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + var channel = message.Channel; + try + { + + string content = message.Content; + string[] data = content.Split(' '); + string keyword = data[1]; + if (keyword.ToLower() == "help") + { + await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)"); + await channel.SendMessageAsync("set prefix [new value] -- set the value of the new preifx (require restart)"); + + return; + } + + switch (keyword.ToLower()) + { + case "token": + if (data.Length != 3) + { + await channel.SendMessageAsync("Invalid token !"); + return; + } + Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", data[2], '\t'); + break; + case "prefix": + if (data.Length != 3) + { + await channel.SendMessageAsync("Invalid token !"); + return; + } + Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", data[2], '\t'); + break; + default: + return; + } + + await channel.SendMessageAsync("Restart required ..."); + } + catch + { + await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage); + } + + } + } +} diff --git a/DiscordBot/Discord/Core/Boot.cs b/DiscordBot/Discord/Core/Boot.cs index a55bd41..0e47f34 100644 --- a/DiscordBot/Discord/Core/Boot.cs +++ b/DiscordBot/Discord/Core/Boot.cs @@ -46,13 +46,13 @@ namespace PluginManager.Core public async Task ShutDown() { if (client == null) return; + await client.LogoutAsync(); await client.StopAsync(); } private void CommonTasks() { - if (client == null) - return; + if (client == null) return; client.LoggedOut += Client_LoggedOut; client.Log += Log; client.LoggedIn += LoggedIn; diff --git a/DiscordBot/Discord/Core/CommandHandler.cs b/DiscordBot/Discord/Core/CommandHandler.cs index b141584..d2621fc 100644 --- a/DiscordBot/Discord/Core/CommandHandler.cs +++ b/DiscordBot/Discord/Core/CommandHandler.cs @@ -5,10 +5,12 @@ using PluginManager.Interfaces; using System.Reflection; using PluginManager.Others; +using PluginManager.Others.Permissions; using PluginManager.Loaders; using System.Threading.Tasks; using System.Linq; +using Discord; namespace PluginManager.Core { @@ -18,6 +20,9 @@ namespace PluginManager.Core private readonly CommandService commandService; private readonly string botPrefix; + internal static bool awaitRestartOnSetCommand = false; + internal static SocketUser? RestartOnSetCommandCaster = null; + public CommandHandler(DiscordSocketClient client, CommandService commandService, string botPrefix) { this.client = client; @@ -51,7 +56,26 @@ namespace PluginManager.Core } if (!(message.HasStringPrefix(botPrefix, ref argPos) || message.Author.IsBot)) - return; + if (message.Author.IsBot) return; + else + { + if (awaitRestartOnSetCommand && RestartOnSetCommandCaster is not null) + { + if (message.Content.ToLower() == "yes") + { + if (!(((SocketGuildUser)message.Author).hasPermission(GuildPermission.Administrator))) + { + await message.Channel.SendMessageAsync("You do not have permission to use this command !"); + awaitRestartOnSetCommand = false; + RestartOnSetCommandCaster = null; + return; + } + var fileName = Assembly.GetExecutingAssembly().Location; + System.Diagnostics.Process.Start(fileName); + } + } + return; + } var context = new SocketCommandContext(client, message); @@ -63,19 +87,51 @@ namespace PluginManager.Core DBCommand? plugin = PluginLoader.Plugins!.Where(p => p.Command == (message.Content.Split(' ')[0]).Substring(botPrefix.Length)).FirstOrDefault(); + if (plugin != null) { if (message.Channel == await message.Author.CreateDMChannelAsync()) { if (plugin.canUseDM) { + if (plugin.requireAdmin) + { + if (message.Author.isAdmin()) + { + plugin.Execute(context, message, client, true); + Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command); + return; + } + await message.Channel.SendMessageAsync("This command is for administrators only !"); + return; + } plugin.Execute(context, message, client, true); - Functions.WriteLogFile("Executed command (DM) : " + plugin.Command); + Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command); + return; } + + await message.Channel.SendMessageAsync("This command is not for DMs"); return; } - plugin.Execute(context, message, client, false); - Functions.WriteLogFile("Executed command : " + plugin.Command); + if (plugin.canUseServer) + { + if (plugin.requireAdmin) + { + if (message.Author.isAdmin()) + { + plugin.Execute(context, message, client, false); + Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command); + return; + } + await message.Channel.SendMessageAsync("This command is for administrators only !"); + return; + } + plugin.Execute(context, message, client, false); + Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command); + return; + } + return; + } } catch { } diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index 93698e0..1d3f018 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -5,10 +5,10 @@ using System.Threading.Tasks; using PluginManager.Core; using PluginManager.Others; - using PluginManager.Loaders; using PluginManager.LanguageSystem; using PluginManager.Online; + namespace DiscordBot { public class Program @@ -26,8 +26,6 @@ namespace DiscordBot public static void Main(string[] args) { - AppDomain.CurrentDomain.AppendPrivatePath(".\\Requirements"); - Console.Clear(); Directory.CreateDirectory("./Data/Resources"); Directory.CreateDirectory("./Data/Languages"); Directory.CreateDirectory("./Data/Plugins/Commands"); @@ -39,10 +37,10 @@ namespace DiscordBot { Console.WriteLine("Please insert your token: "); Console.Write("TOKEN: "); - string botToken = Console.ReadLine(); + string? botToken = Console.ReadLine(); if (botToken.Length == 59) { - string prefix = Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", + string? prefix = Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", '\t'); if (prefix == String.Empty || prefix == null) prefix = "!"; @@ -123,8 +121,28 @@ namespace DiscordBot break; case "dwlang": string Lname = data.MergeStrings(1); - string[] link = await languageManager.GetDownloadLink(Lname); - if (link[0] == null) + string?[] link = await languageManager.GetDownloadLink(Lname); + try + { + if (link[0] is null || link is null) + { + if (Lname == "") + { + Functions.WriteColorText($"Name is invalid"); + break; + } + Functions.WriteColorText("Failed to find language &b" + Lname + " &c! Use &glistlang &ccommand to display all available languages !"); + break; + } + if (link[1].Contains("CrossPlatform") || link[1].Contains("cp")) + { + Downloader dwn = new Downloader(Lname + ".lng", link[0]); + await dwn.DownloadFileAsync(Functions.langFolder); + } + else Functions.WriteColorText("The language you are trying to download (&b" + Lname + "&c) is not compatible with the version of this bot. User &glistlang &ccommand in order to see all available languages for your current version !\n" + link[1]); + break; + } + catch { if (Lname == "") { @@ -134,13 +152,7 @@ namespace DiscordBot Functions.WriteColorText("Failed to find language &b" + Lname + " &c! Use &glistlang &ccommand to display all available languages !"); break; } - if (link[1].Contains("CrossPlatform") || link[1].Contains("cp")) - { - Downloader dwn = new Downloader(Lname + ".lng", link[0]); - await dwn.DownloadFileAsync(Functions.langFolder); - } - else Functions.WriteColorText("The language you are trying to download (&b" + Lname + "&c) is not compatible with the version of this bot. User &glistlang &ccommand in order to see all available languages for your current version !\n" + link[1]); - break; + case "loadplugins": case "lp": LoadPlugins(discordbooter); @@ -283,18 +295,7 @@ namespace DiscordBot Console.Clear(); Console.ForegroundColor = ConsoleColor.DarkYellow; - Console.WriteLine("Discord BOT for Cross Platform\n\nCreated by: Wizzy\nDiscord: Wizzy#9181\nCommands:"); - Console.WriteLine( - "lp | loadplugins -> load all plugins\n" + - "sd | shutdown->close connection to the server(stop bot)\n" + - "token -> display the current token\n" + - "listplugs -> list all available plugins\n" + - "dwplug [name] -> download plugin by name\n" + - "listlang -> list all available languages\n" + - "dwlang -> download language by name\n" + - "setlang [name] -> set language from the downloaded languages\n" + - "set-setting [setting.path] [value] -> set setting value" - ); + Console.WriteLine("Discord BOT for Cross Platform\n\nCreated by: Wizzy\nDiscord: Wizzy#9181"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("============================ Discord BOT - Cross Platform ============================"); string token = @@ -327,42 +328,22 @@ namespace DiscordBot return Task.CompletedTask; } - /// - /// Replace text in the file - /// - /// The file location (path) - /// The setting key code where to replace - /// The new value - /// If the does not exist, then this error is thrown - private static void ReplaceText(string file, string code, string value) - { - try - { - var f = false; - string[] text = File.ReadAllLines(file); - foreach (string line in text) - if (line.StartsWith(code)) - { - line.Replace(line.Split('\t')[1], value); - f = true; - } - - if (f) - File.WriteAllLines(@"./Data/Resources/DiscordBotCore.data", text); - else throw new FileNotFoundException(); - } - catch (FileNotFoundException) - { - File.AppendAllText(file, code + "\t" + value + "\n"); - } - } - /// /// Handle user input arguments from the startup of the application /// /// The arguments private static async Task HandleInput(string[] args) { + + if (args.Length == 0) + { + if (File.Exists("./ref/startupArguments.txt")) + { + var lines = await File.ReadAllLinesAsync("./ref/startupArguments.txt"); + args = lines; + } + } + int len = args.Length; if (len == 1 && args[0] == "--help") { diff --git a/PluginManager/Interfaces/DBCommand.cs b/PluginManager/Interfaces/DBCommand.cs index 9fce268..785bce9 100644 --- a/PluginManager/Interfaces/DBCommand.cs +++ b/PluginManager/Interfaces/DBCommand.cs @@ -10,6 +10,7 @@ bool canUseDM { get; } bool canUseServer { get; } + bool requireAdmin { get; } void Execute(Discord.Commands.SocketCommandContext context, Discord.WebSocket.SocketMessage message, diff --git a/PluginManager/Others/Permissions.cs b/PluginManager/Others/Permissions/DiscordPermissions.cs similarity index 56% rename from PluginManager/Others/Permissions.cs rename to PluginManager/Others/Permissions/DiscordPermissions.cs index 9d1ea87..5343cf5 100644 --- a/PluginManager/Others/Permissions.cs +++ b/PluginManager/Others/Permissions/DiscordPermissions.cs @@ -3,18 +3,21 @@ using Discord.WebSocket; using System.Linq; -namespace PluginManager.Others +namespace PluginManager.Others.Permissions { - public static class Permissions + public static class DiscordPermissions { public static bool hasPermission(this IRole role, GuildPermission permission) => role.Permissions.Has(permission); public static bool hasRole(this SocketGuildUser user, IRole role) => user.Roles.Contains(role); public static bool hasPermission(this SocketGuildUser user, GuildPermission permission) - => user.Roles.Where(role => role.hasPermission(permission)).Any(); - + => user.Roles.Where(role => role.hasPermission(permission)).Any() || user.Guild.Owner == user; + public static bool isAdmin(this SocketGuildUser user) => user.hasPermission(GuildPermission.Administrator); + public static bool isAdmin(this SocketUser user) => isAdmin((SocketGuildUser)user); } + + } \ No newline at end of file