Итак, я делаю проверочного бота для одного из моих серверов Discord и столкнулся с проблемой.
Цель:
Когда пользователь впервые присоединяется, ему будет разрешено разговаривать только по одному конкретному каналу, каналу проверки. Когда они набирают $verify {username on-site}, бот отвечает на сервере, предлагая пользователю проверить свои личные сообщения, чтобы продолжить. Будет предоставлена уникальная строка, связанная с проверочной строкой в базе данных, и пользователю Discord будет предложено изменить свой статус на сайте на данный уникальный идентификатор. Как только они это сделают, им будет предоставлена роль «Проверено», и они смогут говорить о разногласиях.
Проблема: Когда все пойдет правильно, и пользователь готов к тому, чтобы получить роль на сервере Discord, бот не будет отдавать роль. Я предполагаю, что это связано с тем, что пользователь, которому бот пытается дать роль, не связан с фактическим сервером Discord для него, потому что он находится в DM.
Что я ищу: Если возможно, дайте мне пример того, как дать роль пользователю на сервере Discord из DM или документации. Это было бы действительно полезно!
Код: Включу только ту часть, которая важна, других ошибок нет.
snekfetch.get("https://vertineer.com/api/getUniq.php?discord_id = "+message.author.id).then(function(r){
console.info("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`.");
}
});
Итак, как мне получить членский класс от пользователя DM? Также спасибо за обнаружение этой ошибки, но это все еще не исправляет ее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если это работает только для одного сервера, вы можете:
client.guilds.get('myguildID').members.get(message.author.id).addRole('193654001089118208')
А также, чтобы дать пользователю роль, вы не можете использовать имя. Вам необходимо использовать идентификатор или объект роли. Если вы предпочитаете использовать это имя, вам нужно будет сделать что-то вроде этого:
var role = client.guilds.get('myguildID').roles.find(role => role.name === "Verified");
client.guilds.get('myguildID').members.get(message.author.id).addRole(role);
Вы можете добавить роль только для
member, но не дляauthor.