1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Code auslagern/aufräumen

Dieses Thema im Forum "Stellenangebote/Projekte (unentgeltlich)" wurde erstellt von Garzec, 18. April 2017.

  1. Garzec

    Garzec Grünschnabel

    Guten Tag,
    ich habe für Discord einen Bot mithilfe von Node.js geschrieben. Leider kenne ich nur C# und habe zum Kennenlernen erstmal den Code so geschrieben, dass er funktioniert. Nun will ich aber, bevor ich weitermache, zuerst den Code aufräumen. Leider habe ich absolut keine Ahnung, wie man sowas für Javascript bzw. hier mit Node.js macht.

    Ich würde gerne den Code so aufräumen, dass ich für ein neues Event / einen neuen Command eine neue Datei anlege, diesen Command irgendwo in einer Hauptdatei registriere und dieser dann funktioniert. Gleiches für Events.

    Die ganzen strings würde ich in eine "Text Klasse" auslagern, Hilfsmethoden, die von den ganzen Commands etc. aufgerufen werden, in eine Helperklasse.

    Es wäre super, wenn mir dabei jemand helfen könnte :) Ich möchte keinen Code, der aussieht wie ein Schlachtfeld.

    Zum Code:

    Code (Text):
    1. const discord = require("discord.js");
    2. const client = new discord.Client();
    3.  
    4. //#####################################
    5. // LoginEvents
    6. //#####################################
    7.  
    8. client.on("ready", () => {
    9.     console.log("Ready");
    10. });
    11.  
    12. //#####################################
    13. // UserEvents
    14. //#####################################
    15.  
    16. // UserJoined
    17. client.on("guildMemberAdd", (member) => {
    18.  
    19.     member.user.sendMessage("WillkommensText");
    20.  
    21.     member.guild.defaultChannel.sendMessage(member.user.username + " ist dem Server beigetreten. **Willkommen!**");
    22.  
    23.     member.addRole('rollenId').catch(error => console.log(error));
    24.  
    25.     SendMessageToAdmin(member.user.username + " ist dem Server beigetreten");
    26. });
    27.  
    28. // UserLeft
    29. client.on("guildMemberRemove", (member) => {
    30.     SendMessageToAdmin(member.user.username + " hat den Server verlassen.");
    31. });
    32.  
    33. // UserBanned
    34. client.on("guildBanAd", (guild, user) => {
    35.     guild.defaultChannel.sendMessage(user.username + " wurde gebannt");
    36.  
    37.     SendMessageToAdmin(user.username + " wurde gebannt");
    38. });
    39.  
    40. // UserUnbanned
    41. client.on("guildBanRemove", (guild, user) => {
    42.     guild.defaultChannel.sendMessage(user.username + " ist nicht mehr gebannt");
    43.  
    44.     SendMessageToAdmin(user.username + " ist nicht mehr gebannt");
    45. });
    46.  
    47. //#####################################
    48. // ChannelEvents
    49. //#####################################
    50.  
    51. // // ChannelCreated
    52. // client.on("channelCreate", (channel) => {
    53. //     if (channel.type === "text")
    54. //         channel.sendMessage("Der Textkanal " + channel.name + " wurde erstellt.");
    55. //     else
    56. //         channel.guild.defaultChannel.sendMessage("Der Sprachkanal " + channel.name + " wurde erstellt.");
    57.  
    58. //     SendMessageToAdmin("Der Kanal " + channel.name + " wurde erstellt");
    59. // });
    60.  
    61. // // ChannelDestroyed
    62. // client.on("channelDelete", (channel) => {
    63. //     channel.guild.defaultChannel.sendMessage("Der Kanal " + channel.name + " wurde gelöscht.");
    64.  
    65. //     SendMessageToAdmin("Der Kanal " + channel.name + " wurde gelöscht");
    66. // });
    67.  
    68. //#####################################
    69. // RoleEvents
    70. //#####################################
    71.  
    72. // RoleCreated
    73. client.on("roleCreate", (role) => {
    74.     role.guild.defaultChannel.sendMessage("Die Rolle " + role.name + " wurde erstellt");
    75.  
    76.     SendMessageToAdmin("Die Rolle " + role.name + " wurde erstellt");
    77. });
    78.  
    79. // RoleDeleted
    80. client.on("roleDelete", (role) => {
    81.     role.guild.defaultChannel.sendMessage("Die Rolle " + role.name + " wurde gelöscht");
    82.  
    83.     SendMessageToAdmin("Die Rolle " + role.name + " wurde gelöscht");
    84. });
    85.  
    86. //#####################################
    87. // InputEvents
    88. //#####################################
    89.  
    90. client.on("message", message => {
    91.  
    92.     if (!message.content.startsWith("!"))
    93.         return;
    94.  
    95.     if (message.author.bot)
    96.         return;
    97.  
    98.     if (message.channel.type != "dm")
    99.         message.delete();
    100.  
    101.     var args = message.content.split(/[ ]+/);
    102.  
    103.     // --- help ---
    104.  
    105.     if (commandIs("help", message)) {
    106.  
    107.         var commands = [
    108.             "### Befehle für Administratoren und Moderatoren ###",
    109.             "!delete [Anzahl der zu löschenden Nachrichten] - Löscht die X zuletzt geschriebenen Nachrichten",
    110.             "!kick [@User] - Kickt einen User",
    111.             "!ban [@User] - Bannt einen User",
    112.             "!apprusers - Liste aller User mit der Rolle Approval",
    113.  
    114.             "### Persönliche Befehle ###",
    115.             "!rules - Information der Serverregeln",
    116.             "!syntax - Hilfe zum Posten von Codeblöcken",
    117.             "!myid - persönliche Id abfragen",
    118.             "!usersize - Informationen zur Anzahl der User auf dem Server",
    119.  
    120.             "### Serverspezifische Befehle ###",
    121.             "!dice - Lässt den Bot zwischen 1 und 6 würfeln",
    122.             "!random [Zahl] - Zufallszahl zwischen 0 bis X",
    123.         ];
    124.  
    125.         var members = "Führe Commands mit einem ! aus. Die Commands lauten:" + NewLine() + "```Markdown" + NewLine();
    126.         for (var i = 0; i < commands.length; i++) {
    127.             members += commands[i] + NewLine();
    128.         }
    129.         members += "```";
    130.  
    131.         message.author.sendMessage(members);
    132.     }
    133.  
    134.     // --- rules ---
    135.  
    136.     if (commandIs("rules", message)) {
    137.         message.author.sendMessage("Die Regeln:" + NewLine() +
    138.             "```Markdown" + NewLine() +
    139.             "# freundlicher Umgang, Kritik bleibt sachlich" + NewLine() +
    140.             "# Kritik muss begründet sein und belegt werden können" + NewLine() +
    141.             "# Beleidigungen, übertriebener Spam etc. werden gelöscht, Verweise können durchgeführt werden" + NewLine() +
    142.             "# Rassistische, anfeindende, drohende, gesetzeswidrige und sexistische Posts und Links sind verboten" + NewLine() +
    143.             "# Allgemeine ideologische Indoktrination ist ebenfalls verboten```");
    144.     }
    145.  
    146.     // --- syntax ---
    147.  
    148.     if (commandIs("syntax", message)) {
    149.         message.author.sendMessage("Wie schreibe ich Code?" + NewLine() +
    150.             "3x ```" + NewLine() +
    151.             "Direkt dahinter die Angabe der gewünschten Programmiersprache (zB. csharp oder js)" + NewLine() +
    152.             "Jetzt kann der Code einfügt werden, Enter fügt nun Zeilenumbrüche ein" + NewLine() +
    153.             "Zum Schluss wieder 3x ```, um den Codeblock zu schließen");
    154.     }
    155.  
    156.     // --- dice ---
    157.  
    158.     if (commandIs("dice", message)) {
    159.         message.channel.sendMessage(message.author + ", Ich habe eine **" + Math.floor((Math.random() * 6) + 1) + "** gewürfelt");
    160.     }
    161.  
    162.     // --- random ---
    163.  
    164.     if (commandIs("random", message)) {
    165.         if (args.length === 2)
    166.             message.channel.sendMessage(message.author + ", meine ausgedachte Zahl lautet **" + Math.floor((Math.random() * args[1]) + 1) + "**");
    167.     }
    168.  
    169.     // --- delete ---
    170.  
    171.     if (commandIs("delete", message)) {
    172.         if (callWasOnServer(message)) {
    173.             if (hasRole(message.member, "Admin") || hasRole(message.member, "Moderator")) {
    174.                 if (args.length < 3) {
    175.                     var msgCounter;
    176.                     if (args.length === 1)
    177.                         msgCounter = 2;
    178.                     else
    179.                         msgCounter = parseInt(args[1]) + 1;
    180.  
    181.                     message.channel.fetchMessages({ limit: messageCount }).then(messages => message.channel.bulkDelete(messages)).catch(console.error);
    182.                 }
    183.             }
    184.         }
    185.     }
    186.  
    187.     // --- kick ---
    188.  
    189.     if (commandIs("kick", message)) {
    190.         if (callWasOnServer(message)) {
    191.             if (hasRole(message.member, "Admin") || hasRole(message.member, "Moderator")) {
    192.                 if (args.length === 2)
    193.                     message.guild.member(message.mentions.users.first()).kick();
    194.             }
    195.         }
    196.     }
    197.  
    198.     // --- ban ---
    199.  
    200.     if (commandIs("ban", message)) {
    201.         if (callWasOnServer(message)) {
    202.             if (hasRole(message.member, "Admin") || hasRole(message.member, "Moderator")) {
    203.                 if (args.length === 2)
    204.                     message.guild.member(message.mentions.users.first()).ban();
    205.             }
    206.         }
    207.     }
    208.  
    209.     // --- everyoneUsers ---
    210.  
    211.     if (commandIs("apprusers", message)) {
    212.         if (callWasOnServer(message)) {
    213.             if (hasRole(message.member, "Admin") || hasRole(message.member, "Moderator")) {
    214.                 var memberCount = message.guild.roles.get("rollenId").members;
    215.                 var approvalMembers = memberCount.map(m => m.user.username);
    216.                 message.author.sendMessage(memberCount.size + " User ohne Schreibrechte. Die User sind: " + approvalMembers);
    217.             }
    218.         }
    219.     }
    220.  
    221.     // --- myid ---
    222.  
    223.     if (commandIs("myid", message)) {
    224.         message.author.sendMessage("Deine persönliche UserId lautet: " + message.author.id);
    225.     }
    226.  
    227.     // --- userSize ---
    228.  
    229.     if (commandIs("usersize", message)) {
    230.         if (callWasOnServer(message))
    231.             message.author.sendMessage("Auf dem Server befinden sich aktuell " + message.guild.memberCount + " User");
    232.     }
    233. });
    234.  
    235. //#####################################
    236. // Hilfsmethoden
    237. //#####################################
    238.  
    239. function callWasOnServer(message) {
    240.     if (message.channel.type != "dm")
    241.         return true;
    242.  
    243.     return false;
    244. }
    245.  
    246. function commandIs(commandName, msg) {
    247.     return msg.content.toLowerCase().startsWith("!" + commandName);
    248. }
    249.  
    250. function pluck(array) {
    251.     return array.map(function (item) {
    252.         return item["name"];
    253.     });
    254. }
    255.  
    256. function hasRole(member, role) {
    257.     if (pluck(member.roles).includes(role)) {
    258.         return true;
    259.     }
    260.     return false;
    261. }
    262.  
    263. function NewLine() {
    264.     return "\r\n";
    265. }
    266.  
    267. function SendMessageToAdmin(message) {
    268.     client.users.get('meineEigeneId').sendMessage(message);
    269. }
    270.  
    271. //#####################################
    272. // Login
    273. //#####################################
    274.  
    275. client.login("meinBotToken");