2017-03-14 2 views
2

私は、C#でディスパッチボットを介してコマンドを作成しようとしています。これにより、ユーザーは別のユーザーのニックネームを変更できるようになり、PMは管理者に送信され、名前を変更する。実際のニックネームの変更以外はすべて動作しています。私はこれを達成するために使用しようとしましたコードはユーザーのニックネームを変更するコマンド不一致

userBeingChanged.Nickname = newName; 

である。しかし、それは、それが読み取り専用であるので、私はこれを行うことはできませんと言います。誰かが別の方法でユーザーのニックネームを変更することを知っていますか?

編集:私はユーザー名ではなくニックネームを変更しようとしています。問題のボットには管理者権限があります。上記のコードはコンパイルされず、代わりの方法があるかどうかを尋ねていました。

ありがとうございました。

+1

他の人のニックネームを実際に変更することはできますか?私はこれが大きな見落としになると思います。 –

+0

コードを完成したら、私の妻のニックネームを変更すると、私はそれを気に入るはずです。 –

+0

もう1つ取得;設定;プロパティ?これは、読み取り専用でなければなりません。 – ARr0w

答えて

0

ボットは、サーバー上の誰かのニックネームを変更するには、「ニックネーム管理」権限または「管理者」権限が必要です。

は、これが唯一のサーバー上の人物ではなく、彼らのグローバル不和名のニックネームを変更することができ、覚えておいてください。

ボットが許可していないことをしようとしているため、問題が発生している可能性があります。

+0

ニックネームのプロパティは読み取り専用なので、上記のコードはコンパイルされません。別のセット名プロパティがあるかどうかわかりません。問題のボットには、私が使用しているサーバーの管理者権限があります。 – Killy666

1

これ以上の可能性があります。

await userBeingChanged.Edit(nickname: newName).ConfigureAwait(false); 

使用しているバージョンはわかりませんが、ここに例があります。

cmd.CreateCommand("setnick") 
      .Description("Changes, or sets, the nickname of the specified user.") 
      .Parameter("user") 
      .Parameter("newname", ParameterType.Unparsed) 
      .Do(async (e) => 
     { 
      var user = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault(); 
      string newname = e.GetArg("newname"); 
      await user.Edit(nickname: newname).ConfigureAwait(false); 
     }); 

私はこれをあなたのために書いていますが、同様の機能を持つ別のコマンドを作成すると、これがどのように機能するか理解していただければ幸いです。

コマンドには、usernewnameという2つのパラメータが追加されています。理由はnewnameで、userはありませんが、userではユーザに言及するかプレーンテキストで書くことができるため、解析されません。ただし、userにはスペースを含めることはできません。したがって、スペースが含まれている場合はユーザーに言及するか、現在の表示名をコピーして貼り付けるのが最善の方法です。 にはにスペースが含まれているため、newnameは解析されません。

メッセージの長さにかかわらず、最初のパラメータに値が与えられているため、1つのコマンドに2つの未解析パラメータを設定することはできません。到達できません。

ニックネームを変更するには、オンラインにする必要があります。

e.GetArg()がどのように機能するかの例を示します。ボットにあなたがそれを伝えるようにするための簡単なコマンドを書いてください。

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

使用法:!say Hello, this works.、ボットはこの作品、こんにちはを言うになるだろう。。もちろん、メッセージには空白が含まれているため、パラメータを解析しないでください。ご不明な点がございましたら、お気軽にお問い合わせください。