所以我为我的一个Discord服务器制作了验证机器人,并且我遇到了一个问题。
目的:
当用户第一次加入时,他们将仅被允许在一个特定频道(验证频道)中讲话。当他们键入$verify {username on-site}
时,机器人将在服务器内回复,告诉用户检查他们的DM以继续。将给出链接到数据库中的验证行的唯一字符串,并且将告知discord用户将其现场状态更改为给定的唯一ID。一旦他们这样做,他们将获得"已验证"角色,并将能够谈论不和。
问题: 当一切正常,并且用户准备好在discord服务器上获得角色时,机器人将不会发挥作用。我假设这是因为机器人正在尝试授予角色的用户没有链接到实际的不和谐服务器,因为它在DM中。
我在寻找什么: 如果可能,请举例说明如何通过DM或文档为discord服务器上的用户授予角色。那会非常有用!
代码:我只会包含重要的部分,没有其他错误。
snekfetch.get("https://vertineer.com/api/getUniq.php?discord_id="+message.author.id).then(function(r){
console.log("here 2");
let uniq = JSON.parse(r.text);
if(uniq.id == uniq.status){
message.member.addRole("Verified");
message.reply("Success!");
} else {
message.reply("Looks like you didn't change your status to `"+uniq.id+"`, try again with `$finish`.");
}
});
答案 0 :(得分:1)
如果这只适用于一台服务器,您可以这样做:
client.guilds.get('myguildID').members.get(message.author.id).addRole('193654001089118208')
而且,要为用户提供角色,您无法使用该名称。您需要使用ID或角色对象 如果您更喜欢使用名称,则需要执行以下操作:
var role = client.guilds.get('myguildID').roles.find(role => role.name === "Verified");
client.guilds.get('myguildID').members.get(message.author.id).addRole(role);