#discord.js
#discord.js
Вопрос:
Я пытаюсь создать discord.js бот для моего сервера, который я создал для людей в моей школе. Я пытаюсь создать #classes
канал, и если вы реагируете на определенные сообщения, это дает вам роль (которая дает вам доступ к текстовому каналу для этого класса).
client.on('messageReactionAdd', (reaction, user) => {
console.log("client.on completed.")
if (message.channel.name === 'classes') {
console.log("if(message) completed.")
if (reaction.emoji.name === "reminder_ribbon") {
console.log("emoji test completed.")
const guildMember = reaction.message.guild.members.get(user.id);
const role = reaction.message.guild.roles.find(role => role.name === "FACS");
guildMember.addRole(role);
}
}
});
Это то, что я пробовал до сих пор, однако это не дает мне / другим людям, отреагировавшим на это, роли и не возвращает сообщение об ошибке.
P.S. Кроме того, как бы я мог сделать так, чтобы, когда они не реагировали, это удаляло роль?
Редактировать: Кажется, что он получает реакции только из кэшированных сообщений / сообщений, отправленных после запуска бота. Кроме того, сообщение не определено в первом, если(message.channel.id ) сообщение.
Комментарии:
1. Вы также используете,
<message>
хотя это не определено в вашей области, простоreaction
иuser
. При удалении реакции генерируетсяmessageReactionRemove
событие, после чего вы можете использовать.removeRole('id');
2. Как бы мне убедиться, что канал является каналом #classes?
Ответ №1:
Попробуйте использовать следующий код:
client.on('messageReactionAdd', (reaction, user) => {
if (reaction.message.channel.id === '552708152232116224') {
if (reaction.emoji.name === "reminder_ribbon") {
const guildMember = reaction.message.guild.members.get(user.id);
const role = reaction.message.guild.roles.get('552709290427940875');
guildMember.addRole(role);
}
}
});
Прежде всего, reaction.users
это объект со всеми пользователями, которые отреагировали на сообщение, поэтому сначала вам нужно определить, какому пользователю вы хотите назначить роль. Я исправил эту выборку guildMember
с user.id
помощью.
Вторая ошибка заключалась в том, что вы пытались присвоить идентификатор роли a guildMember
, хотя сначала вам нужно получить роль, а затем назначить объект роли guildMember
.
Комментарии:
1. Это сделало то же самое, что и мой другой код; ничего не делать. Я не уверен, что делать дальше. Возможно, если (сообщение …. и т.д. неверно? Если да, то как мне это исправить? Предполагается, что реакция была в #classes
2. Вы также можете проверить это с помощью
message.channel.name === 'classes'
(Работает, только если у вас есть только один текстовый канал гильдии с таким названием)3. Но есть ли какая-либо ошибка, которая выдается в вашей консоли? Я не могу вам помочь, не зная, где мне искать ошибки…
4. Ошибок нет. Возможно, это не запускается? Означает ли это, что это будет проблемой в первом из 2 «if() {«ов? В противном случае это будет работать или возвращать / регистрировать ошибки.
5. Попробуйте установить разные журналы консоли после каждой строки, чтобы увидеть, где мы должны искать проблемы