2016-04-10 22 views
2

Discordのボットをコーディングし、エラーの場合はデバッグしやすくしたい。multlass階層に変換するのに手助けが必要

私はこの

private static void Main(string[]) args) 
{ 
    var client = new DiscordClient(); 
    client.Connect(" "); 
    var commands = new client.Services.Get<CommandService>(); 
    commands.CreateCommand("test") 
     .Description("This is a test command.") 
     .Do(async e => 
      { 
       await e.Channel.SendMessage("Test Successful!"); 
      }); 
} 

を取ると、可能ならば、それは私がして良かったことがありません。この

namespace Console.scripts 
{ 
    class test 
    { 
     commands.CreateCommand("test") 
      .Description("This is a test command.) 
      .Do(async e => 
       { 
        await e.Channel.SendMessage("Test Successful!"); 
       }); 
    } 
} 

のようなものですので、それはので、各コマンドが独自のクラスファイルを持っているようにしたいです同様の何かの例でさえ助けになるでしょう。

答えて

1

このコマンドを実行する名前、説明、および方法でインターフェイスIDiscordCommandを作成できます。

public interface IDiscordCommand 
{ 
    string Name { get; set; } 
    string Description { get; set; } 
    void Run(CommandEventArgs e); 
} 

サンプル実装は

public class TestCommand : IDiscordCommand 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public void Run(CommandEventArgs e) 
    { 
     e.Channel.SendMessage("Test"); 
    } 
} 

は、その後、あなたのプログラムに使用可能なすべてのコマンドのリストを作成することができますだろう、とのforeachコマンドは、この

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var client = new DiscordClient(); 
     client.Connect(" "); 

     RegisterCommands(client.Services.Get<CommandService>()); 
    } 

    public static void RegisterCommands(CommandService commandService) 
    { 
     var commands = new List<IDiscordCommand>(); 
     commands.Add(new TestCommand()); 

     foreach (var command in commands) 
     { 
      commandService.CreateCommand(command.Name) 
       .Description(command.Description) 
       .Do(command.Run); 
     } 
    } 
} 
+0

からのようなCommandServiceに登録します私の理解は現在、私はCommandEventArgsイベントを使用したいが、私は行 ".Do(command.Run);の問題に遭遇した" "この非同期メソッドには 'await'演算子がなく、同期的に実行されます。" "代入、呼び出し、増分、減分、および新しいオブジェクト式のみが文として使用できます。行を ".Do(async e => command.Run);に編集しました。 – TehPirate

+0

次に、コマンドクラス(この場合は 'TestCommand')で' Run'メソッドのシグネチャに 'async'を追加します。それから '.Do(async e => await command.Run(e));'に変更してください。 – BrunoLM

+0

SDKの外部に適用すると、Asyncが未知のメソッドとして表示されます。 – TehPirate

関連する問題