web-dev-qa-db-ja.com

discord.jsでユーザーのニックネームを変更する

あなたが助けることができるのだろうか(私はそれを検索し、何も...)私はdiscord.jsノードで作業する方法を学んでおり、ユーザーのニックネーム(ユーザー名自体ではなく)を変更したい

私のコードは

const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
    console.log('I am ready!');
});

client.on('message', message => {
    if (message.content.includes('changeNick')) {
        client.setNickname({nick: message.content.replace('changeNick ', '')});
    }
});

client.login('token');
7
Bossa

Docs によると、ギルドメンバーのニックネームのみを変更できるため、クライアントIDからクライアントのメンバーオブジェクトを取得し、ドキュメントのようにニックネームを設定する必要があります。 :

message.guild.members.get(bot.user.id).setNickname("some nickname");

これは常に機能するとは限らないことに注意してください。クライアントはchangeNicknameを持っている必要があります。そうでないと機能しません。

2

Discord.jsは、メッセージから GuildMember を取得し、 GuildMember#setNickname メソッドを使用して、ニックネームの変更を実装します。メッセージを実行したユーザーのニックネームを設定する簡単な例を次に示します。

if (message.content.includes('changeNick')) {
    message.member.setNickname(message.content.replace('changeNick ', ''));
}

しかし、ボットがユーザーのニックネームを設定する権限を持っていない場合、これは単に実行されません。ユーザーのニックネームを設定する場合、ボット自体にニックネームを設定する権限が必要です。これにはもう少し工夫が必要ですが、 Guild#me を使用してGuildMemberを取得し、次に GuildMember#hasPermission を使用してMANAGE_NICKNAMES権限を確認します- Permissions#Flags 。これは多くのことを理解できるので、ここで、先ほど述べたすべてをまとめた例を示します。

if (message.content.includes('changeNick')) {
    if (!message.guild.me.hasPermission('MANAGE_NICKNAMES')) return message.channel.send('I don\'t have permission to change your nickname!');
    message.member.setNickname(message.content.replace('changeNick ', ''));
}

これは、コマンドのニックネームを実行したユーザーを設定するために機能します。しかし、ユーザーの名前ではなくBOTのニックネームを変更したい場合はどうでしょうか?まあそれは簡単です。 message.member.setNickname with message.guild.me.setNickname、許可の確認方法と同様。これにより、コマンドを実行したユーザーの代わりにボットのニックネームが変更されます。ハッピーコーディング!

2

message.content.startsWith()およびmessage.author.setNickname()を使用します。

client.on('message', message => {
  if (message.content.startsWith('changeNick')) {
    message.author.setNickname({
      nick: message.content.replace('changeNick ', '')
    });
  }
});
0
Tyler Berger

Client.setNickname ()の代わりに discord.js GuildMember.setNickname functionを使用する必要があります

client.on ('message', async message => {
  var nickname = message.content.split (" ").slice (1).join (" ");
  if (message.content.startsWith ('setNickname')) {
    message.member.setNickname (nickname);
  }
});
0
Eudrino

@Zaidhaanが言ったように、ここにニックネームを設定しようとする小さなスニペットがあります

_    if (message.guild.members.get(bot.user.id).hasPermission("MANAGE_NICKNAMES") && message.guild.members.get(bot.user.id).hasPermission("CHANGE_NICKNAME")) {
        message.guild.members.get(bot.user.id).setNickname("Nickname Here");
    } else {
        message.channel.sendMessage("I dont have the permissons to change my nickname in this server.");
    }
_

message.guild.members.get()経由でユーザーを取得するため、サーバー上のニックネームを編集するにはパーマが必要です。

0
DEG0029

これを使用すれば動作するはずです

message.guild.members.get("Random ID or something").setNickname("RandomName")
0
K1nzy_The_Idiot

実際には思っているより簡単です。必要なのは、このコードを貼り付けるだけです。

Gotem, I'm not pasting the code. Spoon-feeding is a sin, lmao.

とにかく、これを行うには、最初に言及したユーザーを取得する必要があります。それを行うには:

let nickedUser = message.mentions.users.first();

それを行った後、ユーザーと呼ぶものを取得する必要があります。 nickReasonを使用するだけで、何でもやりたいことができます。

let nickReason = args.join(" ").slice(22);

さて、その後、言及されたユーザーがいないかどうかを確認する必要があります。これは簡単です:

if(!nickedUser) return message.channel.send("No mentioned user.");

それを追加したら、有効な名前があるかどうかを確認する必要があります。これも簡単です。

if(!nickReason) return message.channel.send("Not having a name is not a good nickname.");

次に、それらにMANAGE_NICKNAMES権限があるかどうかを確認します。これも簡単です。上記のユーザーにMANAGE_NICKNAMES権限があるかどうかも確認します。

if(!message.member.hasPermission("MANAGE_NICKNAMES")) return message.channel.send("No permissions!");

if(nick.hasPermission("MANAGE_NICKNAMES")) return message.channel.send("No need to change the nickname of someone that can change nicknames as well.");

さて、これで私たちは彼らのニックネームを変更しました!

nickedUser.setNickname(nickReason);

message.channel.send("Changed " + nickedUser + "'s nickname!");

コードを貼り付けるだけではありません。コピーして貼り付けるだけであれば、すべて読んでみてください。

0
Toku