discord.js - 如何根据 DIScord bot 中的 DM 消息向用户添加角色
问题描述
我想写一个不和谐的机器人。当用户向机器人发送 DM 时,该机器人会为用户分配一个角色。代码如下所示。但 message.member 为空。
bot.on('message', async msg => {
if (msg.channel.type != "dm") {
return;
}
let message = msg.content;
if (message.substring(0, 1) == '!') {
var args = message.substring(1).split(' ');
var cmd = args[0];
switch (cmd) {
case 'role':
const guildMember = message.member; (message.member is null)
guildMember.addRole('<@&439191493169643521>');
}
}
解决方案
您的第一个问题是您使用了错误的message
. 您声明message
为等于的变量msg.content
,所以我相信您误认为它是msg
。
其次,addRole方法接受一个 ID 或雪花。因此,您只需将角色的 ID 粘贴在方法内的引号中即可。
即使您要进行这些更改,您仍然会收到错误消息。为什么?因为您的机器人正在阅读DM
频道,而不是Guild
频道。所以做这样的事情是行不通的。
const guildMember = msg.member;
guildMember.addRole('<@&439191493169643521>');
我已经对您的 switch 语句进行了一些调整以使其正常工作。
switch (cmd) {
case 'role':
const guild = client.guilds.get('GUILD_ID');
// grabs the id of the user who messaged the bot
var dmUser = msg.author.id;
// this looks for the users id in the guild
var isMember = guild.members.get(dmUser)
// if true
if (isMember) {
// then add the role
isMember.addRole('ROLE_ID');
} else {
// if not true. send the user this message
msg.reply('You are not part of ___ guild')
}
}
推荐阅读
- flutter - 无法在运行 Flutter 应用程序时使用 BuildSessionScopeServices 创建 ScriptPluginFactory 和 FileHasher 类型的服务?
- vue.js - Vue-Bootstrap:增加输入字段宽度+响应性
- c# - 为 IncludeAssets 创建具有特定默认值的 nuget 包
- javascript - 如何在javascript中获取所有地图值的总和?
- sql - 动态连接表中的所有列
- sql - 统计 select 语句中的所有行,结果值包含 select 中的所有行号
- java - 空手道框架 - 模拟服务器定义线程池
- ml.net - ML.NET 启动后将新模型加载到预测引擎池中
- c# - 在 web.config 文件中存储电子邮件凭据
- amazon-web-services - 为什么安全组中没有deny的概念?