2017-02-05 5 views
4

Ich fing an, einen Discord-Bot zu schreiben, aber ich schaffte es schon, auf ein Problem zu stoßen. Ich habe ziemlich genau geschrieben, was he mit einigen kleinen Änderungen geschrieben hat, die das Programm nicht zu sehr beeinflussen sollten. Ich habe 2 Klassen, die Hauptklasse, die gerade das Token für den Bot bekommt und erstellt dann den Bot mitDiscord Bot [C#] führt den Befehl nicht aus

MyBot bot = MyBot(token) 

Hier ist die MyBot.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Discord; 
using Discord.Commands; 

namespace Coding_Bot 
{ 
    class MyBot 
    { 
     DiscordClient discord; 
     String botToken; 

     public MyBot(String tempToken) 
     { 

      botToken = tempToken; 
      discord = new DiscordClient(x => 
      { 
       x.LogLevel = LogSeverity.Info; 
       x.LogHandler = Log; 
      }); 
      Console.WriteLine("[BOT] Connecting..."); 
      discord.ExecuteAndWait(async() => 
      { 
       await discord.Connect(botToken, TokenType.Bot); 
      }); 


      discord.UsingCommands(x => 
      { 
       x.PrefixChar = '.'; 
       x.AllowMentionPrefix = true; 
      }); 

      var commands = discord.GetService<CommandService>(); 

      commands.CreateCommand("info").Do(async (e) => 
      { 
       Console.WriteLine("!info executed"); 
       await e.Channel.SendMessage("Coding Bot"); 
      }); 
     } 

     private void Log(object sender, LogMessageEventArgs e) 
     { 
      Console.WriteLine("[BOT] " + e.Message); 
     } 
    } 
} 

Es stellt keine Verbindung und der Bot tut komm online. Dies ist die Ausgabe in meiner Konsole:

[BOT] Connecting... 
[BOT] Connected 
[BOT] GUILD_AVAILABLE: BotTestServer 

Wenn ich jetzt .info in #general passiert nichts geben. Nichts in der Konsole und nichts in # general. Ich sah schon this, aber es löste mein Problem nicht

EDIT: Ich weiß, ich sollte eine CommandHandler-Klasse verwenden und nicht nur alle meine Befehle dort. Das werde ich in Zukunft nicht machen, aber das war nur zum Testen.

Antwort

2

Ich kopierte Ihren Code auf einen meiner Test-Bot und änderte ein wenig und mein Bot konnte eine Verbindung herstellen, nur dass es auf Befehle nicht reagierte.
Diese sind, was ich geändert:

Erster Wechsel

MyBot bot = new MyBot(token); //instead of MyBot bot = MyBot(token); 

ich geändert, weil ich habe diesen Fehler: enter image description here

Zweite Änderung: Der Bot auf Befehle reagieren nicht

Console.WriteLine("[BOT] Connecting..."); 
      discord.ExecuteAndWait(async() => 
      { 
       await discord.Connect(botToken, TokenType.Bot); 
      }); 

Das oben wurde an der falschen Stelle des Codes platziert, so zog ich es

commands.CreateCommand("info").Do(async (e) => 
     { 
      Console.WriteLine("!info executed"); 
      await e.Channel.SendMessage("Coding Bot"); 
     }); 

So am Ende unterhalb wird hier gestellt werden: enter image description here

Weitere Details: Überprüfen Sie Ihre .NET Framework-Version, ich wurde mit 4.6.2 wenn Sie diesen Code zu testen, und die API Discord.NET Version wurde auf 0.9.6

Wenn das Problem weiterhin besteht, können Sie hier Hilfe suchen: https://discord.gg/JBp6gSN

Leichte Notiz
Auch eine neueste Version von Discord.NET erschien vor kurzem, v1.0.0. Es beinhaltet wesentliche Änderungen von v1 nach v0.9.6, wodurch alles basierend auf async ausgeführt wird. Wenn dieses Problem Ihnen Kopfschmerzen bereitet, können Sie die Situation einfach umgehen, indem Sie stattdessen Discord.NET v1 verwenden.

+0

Danke! Der MyBot-Bot = [neu] myBot (Token); war nur ein Tippfehler hier im Stackoverflow. Den Befehl zu setzen, bevor er es verbindet, hat es für mich repariert! Vielen Dank! – FritzFurtz

+0

Ich kann Discord.NET v1 jedoch nicht im NuGet Packet Manager finden. – FritzFurtz

+0

@FritzFurtz Sie benötigen eine neue Paketquelle zum Herunterladen der Vorabversion, die Paketquelle ist diese "https://www.myget.org/F/discord-net/api/v3/index.json" Pre-Release-API-Pakete, so dass Sie die v1 des Pakets sehen können. Die Dokumentation ist noch nicht veröffentlicht, aber Sie können versuchen, Hilfe in dem Chat, den ich verlinkt habe, zu verwenden oder den Beispiel-Bot hier zu verwenden: https://github.com/420foxbot/DiscordExampleBot – WQYeo

2

Ich weiß, das ist dumm, aber haben Sie die Bots Wanted Berechtigungen wange? (Das ist mir passiert.)

+0

Der erste von allen: Vielen Dank für die Antwort! Ich habe einen BotTestServer ohne Konfiguration. Es gibt keine Rollen auf dem Server. Ich habe rechts auf #general geklickt und überprüft, dass @everyone die Berechtigung zum Senden von Nachrichten hat. Muss ich noch etwas tun, um dem Bot die Erlaubnis zu geben? – FritzFurtz

+0

Seltsam.Ich kann Ihnen meinen Code senden und Sie können das versuchen, wenn Sie möchten. –

+0

Das wäre wirklich nett! – FritzFurtz

Verwandte Themen