#javascript #node.js #discord #discord.js
Вопрос:
Использование Discord.js (V12)
В настоящее время я пытаюсь создать сценарий, который делает так, чтобы, когда кто-то говорит «что», бот отвечал «Вы застряли с этим!», а затем давал пользователю роль. Но я хочу, чтобы, когда следующий человек скажет, что именно, он снимет эту роль с предыдущего владельца. В настоящее время он работает там, где он может добавлять роль, но не удалять ее у предыдущего человека.
Вот мой текущий рабочий код:
module.exports = {
name: 'what',
description: 'Responds with You are stuck with it and adds role!',
execute(message, args) {
message.channel.send('You are stuck with it!');
message.member.roles.add('886996311117795429')
}
}
Комментарии:
1. Просто сохраните
message.member
в переменной за пределами вашегоmodule.exports
, напримерvar previousMember
, в конце вашегоexecute()
метода после добавления к ним роли. Затем добавьтеif (previousMember) previousMember.roles.remove("role id")
в начало своеexecute()
. Это очень просто. Если этого недостаточно для вас, вы можете выполнить поиск в кэше членов гильдии и отфильтровать всех участников, у которых есть роль с заданным идентификатором роли, а затем использовать.remove()
каждого из них.
Ответ №1:
Проблема объявления переменной внутри вашего кода, как предложил @Cannicide, заключается в том, что если бот выйдет из строя и вам нужно будет загрузить его снова, эта переменная будет потеряна.
Самый простой способ сохранить данные даже после перезапуска-это использовать quick.db
//your other stuff if you have any
const db = require('quick.db')
module.exports = {
name: 'what',
description: 'Responds with You are stuck with it and adds role!',
execute(message, args) {
message.channel.send('You are stuck with it!');
message.member.roles.add('886996311117795429')
if(db.get('previousRoleUser')){
let prevUser = message.guild.members.cache.find(m => m.id === db.get('previousRoleUser'));
if(prevUser){
prevUser.roles.remove('886996311117795429')
}
db.set('previousRoleUser', message.author.id)
}
}
Приведенный выше код является просто примером, который не тестируется. Но я думаю, что это как — то сработало бы. Просто установите значение предыдущего пользователя в quick.db, а затем извлеките оттуда информацию, когда захотите ее использовать.
Комментарии:
1. Вы также можете использовать сообщение.гильдия.участники.кэш. функция фильтрации также была бы более эффективной, так как иногда присоединение базы данных добавляет много путаницы некоторым программистам, как правило, с хорошими ответами!!
2. Честно говоря, я бы просто использовал кэш членов гильдии (или извлекал членов гильдии), как мы с Jeffplays2005 упоминали в наших комментариях. Устраняет необходимость в сохранении каких-либо данных, будь то в переменной или базе данных. Тем более, что даже если бот выйдет из строя, этот подход все равно будет работать так же хорошо, как и база данных. Хотя в любом случае работает.