2016-11-29 2 views
0

Ich erstelle einen Diskretions-Bot, und ich habe Mühe, herauszufinden, wie man einen Benutzer kickt. Ich kann dazu weder Code noch Dokumentation finden. Hier ist der CodeTritt Discord Benutzer durch Bot in CS

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

Update: Ich bin mit Discord.NET 0.9.6

+0

Was Funktionen sind unter 'e.Channel' verfügbar? – ColinM

+0

FindUsers ist eine der Funktionen, aber ich habe keine Ahnung, wie man es benutzt. – NodziGames

+0

Bitte aktualisieren Sie Ihren ursprünglichen Beitrag und teilen Sie uns mit, welches Discord .NET Framework Sie verwenden – ColinM

Antwort

1

Sie scheinen Discord.Net werden. Sie müssen den Benutzer vom Server holen und dann treten, wie in der documentation erläutert.
BEARBEITEN: mein Schlechter, ich nahm diesen Ausschnitt vom Bot eines Freunds und vergaß es benutzte eine kundenspezifische Verlängerung. Ich fügte eine "Vanille" Weise hinzu, genommen 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(); 

Old

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

Danke so sehr! Du hast mich vor vielen Qualen gerettet. Ich werde dies sofort implementieren – NodziGames

+0

Np, nur die Antwort akzeptieren. Für zukünftige Referenz, hier ist ein Beispiel-Bot, die meisten der API zeigen: https://github.com/RogueException/DiscordBot – 0xFF

+0

Es sagt mir, dass das zweite Argument nicht das Schlüsselwort out kann. – NodziGames

2

Dies ist der Befehl, den ich nutzen, um Menschen zu treten, für die richtigen Berechtigungen Überprüfung usw. (Sicherstellen, dass der Bot hat Kick Berechtigungen selbst natürlich)

_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); 
        } 
       }); 
Verwandte Themen