2017-05-15 6 views
-1

私はC#を初めて使用しています。特定のユーザーが何かを入力したときにDiscordボットに何かを伝えたい。たとえば、彼が何かを入力すると、ボットは応答して「シャット・アップ」します。会話は次のようになります:特定のユーザーが何かランダムに入力した場合、ボットの種類を何かにしますか?

ユーザー:hello there、bot!
ボット:

を黙って私が思い付くことができたすべてがこれです:

   commands.CreateCommand("test") 
       .AddCheck((command, user, channel) => user.Id == < user id >) 
       .Do(async (e) => 
     { 
       await e.User.SendMessage("shut up"); 
     }); 

これは、私は、これはprefixchar =を使用するコマンドであるとして、それがすべてでやりたいことはありません!また、プライベートメッセージを介してメッセージを送信します。

答えて

0

あなたが気にしている特定のユーザーに対して有効な入力がありますか?

 private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result) 
 
     { 
 
      var activity = await result as Activity; 
 

 
      if (activity != null && activity.Text.ToLower().Contains(username)) 
 
      { 
 
       await context.PostAsync($"Shut up {username}!"); 
 
      }      
 

 
      context.Wait(MessageReceivedAsync); 
 
     }

ボットは、「{ユーザー名}をシャット・アップ!」と返信する必要がある場合:いない場合は、あなたの非同期メッセージは、関数が呼び出される受け取ったとき、あなたは条件付きユーザチェックを試みることができますすべての単一のユーザーのために、あなたはあなたのメッセージコントローラにConversationUpdateへの応答を結ぶことができます:

private async Task<Activity> HandleSystemMessage(Activity message) 
 
     { 
 
      switch (message.Type) 
 
      { 
 
       case ActivityTypes.ConversationUpdate: 
 
        IConversationUpdateActivity update = message; 
 
        using (
 
         var scope = 
 
          Microsoft.Bot.Builder.Dialogs.Internals.DialogModule.BeginLifetimeScope(Conversation.Container, 
 
           message)) 
 
        { 
 
         var client = scope.Resolve<IConnectorClient>(); 
 

 
         if (!update.MembersAdded.Any()) return null; 
 

 
         foreach (var newMember in update.MembersAdded) 
 
         { 
 
          if (newMember.Id == message.Recipient.Id) continue; 
 
          await _configurationLibrary.MultiThreadLoadSettings(); 
 

 
          var reply = message.CreateReply(); 
 
          reply.Text = $"Shut up {username}"; 
 
          await client.Conversations.ReplyToActivityAsync(reply); 
 
         } 
 
        } 
 
        break; 
 
      } 
 
      return null; 
 
     }

switch文を使用すると、スケールアップしたい場合にはあります。

+0

ご意見ありがとうございました!ボットは、ユーザーのユーザーIDまたは特定の役割のいずれかをコードが検出できるように、すべての人が入力するのではなく、チャネルに入力する特定の1人のユーザーにシャットダウンコードを返信できるだけです。 – jink

+0

いずれの例も使用できますそのためには、きれいなコードの観点から、最初のものを使用し、user.IDをユーザー名として渡すことをお勧めします。その返事を受け取る必要がある特定のユーザーIDをハードコーディングしているのですか、それをどこかのDBに保管していますか? – bsmith

+0

エラーCS1061: 'IAwaitable 'に 'GetAwaiter'の定義が含まれておらず、 'IAwaitable 'の最初の引数を受け入れる拡張メソッド 'GetAwaiter'が見つかりませんでしたusingのディレクティブまたはアセンブリの参照がありませんか?)とエラーCS1061: 'オブジェクト'に 'ToLower'の定義が含まれておらず、拡張メソッドがありません 'ToLower'が 'オブジェクト'型の最初の引数を受け取りましたusing指示やアセンブリ参照がありません) – jink

関連する問題