2017-01-19 10 views
0

Я написал программу Discord Bot. Он разработан с помощью C#. Мой список команд заполняется, значение команды получает этот список. Но команда не выполняет код при вызове.Discord Bot (с использованием C#) не выполняет команду

My prefix char is '!' за которым следует команда. Мой базовый класс выглядит следующим образом:

public class Bot 
    { 
     string token = "#######################"; // my Token 

     CommandService command; // The commands holder 
     EventController eventController = new EventController(); // event class 
     CommandController commandController = new CommandController(); // commands class 

     public Bot() 
     { 
      var client = new DiscordClient(); // my client 

      client = new DiscordClient(input => 
      { 
       input.LogLevel = LogSeverity.Info; 
       input.LogHandler = Log; 
      }); 

      client.UsingCommands(input => 
      { 
       input.PrefixChar = '!';    // the prefix char to call commands 
       input.AllowMentionPrefix = true; 
      }); 

      eventController.HandleEvents(client); // reference to events 

      command = client.GetService<CommandService>(); 

      commandController.HandleCommands(command, client); // reference to commands 

      client.ExecuteAndWait(async() => 
      { 
       while (true) 
       { 
        await client.Connect(token, TokenType.Bot); 
        break; 
       } 
      }); 
     } 

     private void Log(object sender, LogMessageEventArgs e) 
     { 
      Console.WriteLine(e.Message); 
     } 

Я разделил код на два класса - eventController и commandController. Командный контроллер является релевантным.

Моя команда класса выглядит следующим образом:

private List<Tuple<string, string, string>> commandList = new List<Tuple<string, string, string>>(); // the List holding all commands 

     public void HandleCommands(CommandService command, DiscordClient client) 
     { 
      FillCommandList(); // Fill the List with the commands 

      foreach (Tuple<string, string, string> tuple in commandList) 
      { 
       command.CreateCommand('!' + tuple.Item1).Do(async (e) => 
       { 
        await e.Channel.SendMessage(tuple.Item2); // Create all commands from the List 
       }); 
      } 
     } 

     private void Add(string commandName, string textToReturn, string commandDescription) 
     { 
      commandList.Add(new Tuple<string, string, string>(commandName, textToReturn, commandDescription)); // Method to lower the mass of code 
     } 

     private void FillCommandList() 
     { 
      Add("test0", "success0", "info0"); // commands for testing 
      Add("test1", "success1", "info1"); 
      Add("test2", "success2", "info2"); 
      Add("test3", "success3", "info3"); 

      Add("help", UseHelp(), "List all Commands"); // call the help 
     } 

     private string UseHelp() 
     { 
      string commandItems = ""; 
      foreach (Tuple<string, string, string> tuple in commandList) 
      { 
       commandItems += "- !" + tuple.Item1 + " - " + tuple.Item3 + "\r\n"; // List all commands 
      } 
      return commandItems; 
     } 

Так что, когда я называю команду, как «test0» или «UseHelp()» команда получает содержимое строки. Все 5 команд перечислены боту. Но когда я использую команду в Discord, Bot не отвечает.

Это связано и заполняется данные "команда" ...

ответ

0

Во-первых, посмотрите на это:

client.UsingCommands(input => 
      { 
       input.PrefixChar = '!';    // the prefix char to call commands 
       input.AllowMentionPrefix = true; 
      }); 

и теперь, это: command.CreateCommand('!' + tuple.Item1)

В раздора .net, когда вы делаете PrefixChar уже, PrefixChar всегда будет отображаться внутри аргумента command.CreateCommand() спереди по умолчанию. Поэтому, следовательно, нет необходимости размещать еще один '!'. Если вы это сделаете, вы должны вызвать команду, используя !!test0. Просто обработайте его, так как система автоматически добавила префикс в аргумент на command.CreateCommand() автоматически спереди.

Чтобы исправить это: просто удалите аргумент char '!' спереди в command.CreateCommand('!' + tuple.Item1). Проверьте бота, позвонив !test0 или что-то, он должен работать.

 Смежные вопросы

  • Нет связанных вопросов^_^