2017-03-14 2 views
2

Ich habe versucht, einen Befehl über einen Discord-Bot in C# zu erstellen, der es Benutzern ermöglicht, den Spitznamen eines anderen Benutzers zu ändern und dann einen PM an die Admins zu senden, der meldet, dass der Nickname des Benutzers geändert wurde und wer dafür verantwortlich ist um den Namen zu ändern. Alles funktioniert, außer dass sich der Spitzname ändert. Der Code habe ich versucht, zu verwenden, um dies zu erreichen istBefehl zum Ändern des Spitznamens des Benutzers Discord

userBeingChanged.Nickname = newName; 

Aber es sagt, dass ich dies nicht tun, weil es nur gelesen wird. Kennt jemand eine alternative Möglichkeit, den Spitznamen eines Benutzers zu ändern?

Edit: Ich versuche nur, den Spitznamen nicht Benutzername und der Bot in Frage hat Administratorrechte zu ändern. Der obige Code kompiliert nicht und ich fragte, ob es einen alternativen Weg dazu gäbe.

Danke.

+1

Ist es tatsächlich möglich, den Spitznamen anderer Personen zu ändern? Ich würde denken, dass dies ein großes Versehen wäre. –

+0

Sobald Sie Ihren Code vervollständigen, würde ich es lieben, wenn Sie den Spitznamen meiner Frau ändern, werde ich Ihnen das neue privat senden. –

+0

einen anderen bekommen; Eigentum? wenn dieser ist, muss nur lesen. – ARr0w

Antwort

0

Der Bot sollte die Berechtigung "Nickname verwalten" oder die Berechtigung "Administrator" benötigen, um den Spitznamen eines Benutzers auf dem Server zu ändern.

Denken Sie daran, diese können Sie nur den Spitznamen der Person auf dem Server ändern, nicht ihre globalen Zwietracht Namen.

Das Problem könnte dort entstehen, da der Bot versucht, etwas zu tun, was nicht erlaubt ist.

+0

Es ist kein Problem mit Berechtigungen, der obige Code wird nicht kompiliert, da die Nickname-Eigenschaft schreibgeschützt ist und ich nicht weiß, ob es eine andere Set-Name-Eigenschaft gibt. Der betreffende Bot hat Administratorrechte auf dem Server, auf dem ich ihn verwende. – Killy666

1

Mehr als wahrscheinlich muss so aussehen.

Nicht sicher, welche Version Sie verwenden, aber hier ist ein Beispiel.

Ich schrieb dieses für Sie, aber ich hoffe, Sie verstehen, wie das funktioniert, sollten Sie einen anderen Befehl mit einer ähnlichen Funktion machen.

Wir fügen dem Befehl zwei Parameter hinzu: user und newname. Der Grund newname ist nicht geparst, während user nicht ist, weil in user Sie den Benutzer erwähnen können, oder schreiben Sie es im Klartext. user kann jedoch keine Leerzeichen enthalten. Daher empfiehlt es sich, den Benutzer zu erwähnen, wenn Leerzeichen enthalten sind, oder den aktuellen Anzeigenamen zu kopieren und einzufügen. newname ist nicht geparst, weil es kann Leerzeichen enthalten.

Sie können nicht zwei ungeparste Parameter in einem Befehl haben, da nur der erste einen Wert erhält, unabhängig von der Länge Ihrer Nachricht, er ist nicht erreichbar.

Denken Sie daran, der Benutzer muss online sein, wenn Sie seinen Spitznamen ändern möchten.

Ich gebe Ihnen ein Beispiel, wie e.GetArg() funktioniert. Einen einfachen Befehl schreiben, damit der Bot sagt, was immer du sagst.

cmd.CreateCommand("say") 
      .Parameter("msg", ParameterType.Unparsed) 
      .Do(async (e) => 
     { 
      string message = e.GetArg("msg"); 
      await e.Channel.SendMessage(message); 
     }); 

Verbrauch: !say Hello, this works., würde der Bot machen sagen Hallo, das funktioniert.. Und natürlich muss der Parameter nicht geparst werden, da die Nachricht Leerzeichen enthält. Wenn Sie Fragen haben, zögern Sie nicht zu fragen.

Verwandte Themen