2016-11-29 9 views
0

私は不協和音のボットを作成していますが、私はどのようにユーザーを蹴るかを理解するのに苦労しています。私はこれに関するコードや文書を見つけることができません。私はあなたがDiscord.Netを使用しているように見えるDiscord.NET 0.9.6CSのボットで不協和音のユーザーを蹴る

+0

何関数は 'e.Channel'の下で利用できますか? – ColinM

+0

FindUsersは関数の1つですが、使用方法はわかりません。 – NodziGames

+0

オリジナルのポストを更新して、使用しているDiscord .NET Frameworkが何であるか教えてください – ColinM

答えて

1

を使用しています。ここでは、コード

private void MuteUserCommand() 
    { 
     commands.CreateCommand("stfu") 
      .Parameter("PersonToKick", ParameterType.Required) 
      .Do(async (e) => 
      { 
       string persontomute = e.GetArg("PersonToKick"); 
       if (e.User.ServerPermissions.MuteMembers == false) 
       { 
        await e.Channel.SendMessage("Yoo cahnot tells " + persontomute + " to shut up, iz not enuff poweh!"); 
       } 
       else 
       { 
        await e.Channel.SendMessage("Shut up " + persontomute + "!"); 
        //How do I kick persontomute here? 
       } 
      }); 
    } 

更新です。 documentationで説明されているように、サーバーからユーザーを取得してから蹴る必要があります。
編集:私の悪い、私は友人のボットからこのスニペットを取って、それはカスタム拡張を使用して忘れてしまった。私は「バニラ」の方法を追加しましたstraight from the sample bot

var user = await _client.FindUser(e, e.Args[0], e.Args[1]); //args[0]would be the username, args[1] would be the discriminator (the random number that follows the discord id) 
if (user == null) return;  
await user.Kick(); 

string err; 
User user = e.Server.Users.FindUser(persontomute, out err); 
if(user != null) 
{ 
    await user.Kick(); 
    await e.Channel.SendMessage("Shut up " + persontomute + "!"); 
} 
+0

ありがとうそんなに!あなたは、疲労の負荷から私を救った。私はすぐにこれを実装します – NodziGames

+0

Np、ちょうど答えを受け入れる。将来の参考として、apiの大半を見せてくれるサンプルボットを紹介します:https://github.com/RogueException/DiscordBot – 0xFF

+0

2番目の引数はoutキーワード以外のものではないということです。 – NodziGames

2

これは等の適切なアクセス権のチェック、私は人をキックするために使用するコマンドです(ボットがofcourseのキック権限自体を持っていることを確認してください)

_client.GetService<CommandService>().CreateGroup("user", cgb => 
     { 
      cgb.CreateCommand("kick") 
       .Description("Kick a user from the Server.") 
       .Parameter("User", ParameterType.Required) 
       .AddCheck((command, user, channel) => !paused) 
       .Do(async e => 
       { 
        try 
        { 
         if (e.User.ServerPermissions.KickMembers) 
         { 
          User user = null; 
          try 
          { 
           // try to find the user 
           user = e.Server.FindUsers(e.GetArg("User")).First(); 
          } 
          catch (InvalidOperationException) 
          { 
           await e.Channel.SendMessage($"Couldn't kick user {e.GetArg("User")} (not found)."); 
           return; 
          } 
          // double safety check 
          if (user == null) await e.Channel.SendMessage($"Couldn't kick user {e.GetArg("User")} (not found)."); 
          await user.Kick(); 
          await e.Channel.SendMessage($"{user.Name} was kicked from the server!"); 
         } 
         else 
         { 
          await e.Channel.SendMessage($"{e.User.Name} you don't have the permission to kick."); 
         } 
        } 
        catch (Exception ex) 
        { 
         // needs a better error handling haven't changed it since i tested it xD 
         await e.Channel.SendMessage(ex.Message); 
        } 
       }); 
関連する問題