2017-03-12 43 views
0

私は現在、不協和音のボットに取り組んでいます。何かを入力するとコマンドを実行しようとしましたが、ボットはその部分をあなたに返します。ここでわかるように、私は部分文字列を使用しました。ダウンロードしたメッセージが文字列に変換されると、それは1つのように機能しません。 私はcommmandを不和にしても、うまく動作しません。私はエラーメッセージを受け取っていません。ただ応答しません。メッセージの部分文字列の部分文字列の部分文字列

private void RegisterSayCommand() 
    { 
     commands.CreateCommand("say") 
      .Do(async (e) => 
      { 
       string messagestosay, message_b; 
       int message_sub; 
       Message[] message_a; 
       message_a = await e.Channel.DownloadMessages(1); 
       message_b = message_a.ToString(); 
       message_sub = message_b.Length; 
       messagestosay = message_b.Substring(4, message_sub); 

       await e.Channel.SendMessage(messagestosay); 
      }); 
    } 

答えて

0

メッセージをダウンロードすると、Message[]データ型が返されます。そしてそれを文字列に直接変換してメッセージを得ることはできません。

代わりにe.Args[0]を使用してください。基本的にstringというデータ型が返され、コマンドなしのメッセージが含まれています。
例:私はコマンド内にコードstring x = e.Args[0];を持っていて、 '!this this'とタイプします。 「this」はxの値になります。

効果的に、それを部分文字列にする必要はありません。あなたが文字通り行う必要があるのはstring message_a = e.Args[0];で、message_aを直接チャンネルに送ってください!

編集: ここでの後ろにボットを入力できるようにするには、.Parameter("user", ParameterType.Unparsed)を追加してください。これにより、ボットはユーザーから追加の入力を受けることができます。

+0

私はこのメソッドを理解していますが、コードでどのように使用するのか分かりません。 あなたのコードでどのように使用したかをさらに説明してください:) – SugoiSheep

+0

'string messageSay = e.Args [0]; 「e.Channel.SendMessage(messageSay);」を待ちます。これは、文字通りコマンド機能内のコードになります。 **最初に**、このコードを試してください。 ** Second **は、あなたのmessageSayがどのように文字列であり、どのようにコマンドを部分文字列にする必要がないかを確認します。 **古いコードから3番目の**は、メッセージチャネルに 'message_b'を送ります、それがどれほど奇妙であるか注意してください。 **最後に**ここには次のような部分があります: 'Message []'データ型を文字列に直接変換する方法がないため、古いコードが動作しません。これは配列であり、Discord.NETでは 'まだその種の機能はありません。 – WQYeo

+0

申し訳ありませんが、動作しているようには見えません。 – SugoiSheep

関連する問題