2016-11-29 67 views
0

我正在創建一個不和諧的機器人,並且我正在努力弄清楚如何踢用戶。我無法找到關於此的代碼或文檔。下面的代碼在CS中通過機器人K Disc不和用戶

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? 
       } 
      }); 
    } 

更新:我使用Discord.NET 0.9.6

+0

什麼函數在'e.Channel'下可用? – ColinM

+0

FindUsers是其中的一個功能,但我不知道如何使用它。 – NodziGames

+0

請更新您的原文,並告訴我們您正在使用什麼Discord .NET Framework – ColinM

回答

1

你似乎使用Discord.Net。您需要從服務器獲取用戶,然後踢他們,詳見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

它告訴我,第二個參數不能除了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); 
        } 
       });