通过 DM discord 为服务器中的用户赋予角色

Posted

技术标签:

【中文标题】通过 DM discord 为服务器中的用户赋予角色【英文标题】:Give role to user in a server through DM discord 【发布时间】:2020-11-16 01:22:44 【问题描述】:

我实际上并不太了解编程,但我正在尝试制作一个不和谐的机器人,它在用户的 DM 中询问并接受用户的回答,并在服务器中分配一个特定的角色。

const Discord = require('discord.js');
const bot = new Discord.Client();
const < role > = '<roleid>';
bot.login('<token>');

bot.on('message', (message) => 
    var mem = (message.author.id)


if (message.content == '<hotword>') //calls bot in the server verification channel


    message.reply('Hi there! Check your personal message if you want to become one!');
    message.author.send('<question>'); //dm's the user
    message.author.send('<hint>');

if (message.content == '<ans>') 
    message.reply('Congrats!! ');
    message.author.send('<next question>');

if (message.content == '<ans>') 

    message.author.send('Impressive! ');
    message.guilds.get('<ServerGuildID>').members.get(mem).roles.add( < role > ) //assigns role



);

我认为message.guilds.get('&lt;ServerGuildID&gt;').members.get(mem).roles.add(&lt;role&gt;) 行有问题,但没有足够的编程知识来解决它。

【问题讨论】:

bot.guilds.get("GuildId").members.get(message.author.id).roles.add(role)。我建议你切换到 Discord JS V12。 【参考方案1】:

我已对您的代码进行了总体整理并更改了以下行:

message.guilds.get('<ServerGuildID>').members.get(mem).roles.add(<role>) //assigns role
// to
(await bot.guilds.cache.get('<ServerGuildID>').members.fetch(mem)).roles.add(<role>); // assigns role

如果您不确定特定的属性或方法,请参阅Discord documentation。

修改代码

const Discord = require('discord.js');
const bot = new Discord.Client();

const <role> = '<roleid>';

bot.on('message', async (message) => 
  let mem = (message.author.id);

  if (message.content === '<hotword>') // calls bot in the server verification channel
  
    message.reply('Hi there! Check your personal messages if you want to become one!');
    message.author.send('<question>'); // dm's the user
    message.author.send('<hint>'); 
  
  else if (message.content === '<ans>')
  
    message.reply('Congrats!');
    message.author.send('<next question>');
  
  else if (message.content === '<ans>')
  
    message.author.send('Impressive!');
    (await bot.guilds.cache.get('<ServerGuildID>').members.fetch(mem)).roles.add(<role>); // assigns role
  
);

bot.login('<token>');

【讨论】:

非常感谢!正如我所说,我对编程知之甚少。我知道代码只有在那一行有缺陷,但我无法解决它【参考方案2】:

您使用的是 v12 吗?我希望如此,它的某些语法与以前的版本有所不同,这在 10 月将不再支持 - 所以我建议尽快更改。

任何带有 .get 的内容都必须替换为 .cache.get - 如 v11 to v12 updater guide 中所示。

这将使您的代码成为bot.guilds.cache.get(&lt;ServerGuildID&gt;).members.cache.get(&lt;MemberID&gt;).roles.add(&lt;RoleID&gt;)

【讨论】:

非常感谢!我不知道这太容易了! 没问题!我总是建议检查文档或 v11 到 v12 更新指南。

以上是关于通过 DM discord 为服务器中的用户赋予角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord JS - 向机器人所在的每台服务器中的每个用户发送 dm

Discord 欢迎留言 DM

为通过 guilds.join 范围、Discord OAuth2.0 添加到公会的用户赋予角色

你如何让 Discord 机器人响应 DM 中的命令? (Python)

Discord.py 以间隔将 dm 发送给多个特定成员

Discord.js :将特定服务器上的角色添加到 DM 机器人的用户