Бот вседозволенно меняет роли мемберам
Бот, который меняет никнейм от его содержания, меняет никнеймы вседозволено.
Этот бот смотрит через guildMemberUpdate, если мембер поменял ник на сервере в форме Nickanme (Realname), то выдаёт ему роль, и отбирает старую.
Вот код:
client.on("guildMemberUpdate", async function (oldMember, newMember) {
if (oldMember !== newMember.username && newMember.username !== null){
not_member_role = newMember.guild.roles.cache.get("968239763708579881")
member_role = newMember.guild.roles.cache.get("972763466995761152")
splitted_nick = newMember.user.username.split(' ')
if (splitted_nick.length == 2) {
if (splitted_nick[1].startsWith('(') && splitted_nick[1].endsWith(')')) {
await newMember.roles.add(member_role)
await newMember.roles.remove(not_member_role)
}
else {
await newMember.roles.remove(member_role)
await newMember.roles.add(not_member_role)
}
}
else{
await newMember.roles.remove(member_role)
await newMember.roles.add(not_member_role)
}
}
})
Но также имеется и код на python,именно этой же части кода, в котором всё рабоатет отлично. Код предоставил @denisnumb, огромное ему спасибо.
@bot.event
async def on_member_update(before, after):
if before.nick != after.nick and after.nick != None:
# роль, когда ник не по форме
not_member_role = after.guild.get_role(id)
# роль, когда ник оформлен правильно
member_role = after.guild.get_role(id)
splitted_nick = after.nick.split(' | ')
if len(splitted_nick) == 2:
if splitted_nick[1].startswith('(') and splitted_nick[1].endswith(')'):
await after.add_roles(member_role)
await after.remove_roles(not_member_role)
else:
await after.remove_roles(member_role)
await after.add_roles(not_member_role)
else:
await after.remove_roles(member_role)
await after.add_roles(not_member_role)
Есть ли догадки как решить данную проблему?
Ответы (1 шт):
Автор решения: Corrygan
→ Ссылка
Скорее всего, проблема в том, что вы забыли указать в скобках id роли, а оставили просто слово ‘id’ Может есть еще ошибки, но я увидел только это.
not_member_role = after.guild.get_role(id)
member_role = after.guild.get_role(id)