#python #discord
Вопрос:
Я пытаюсь создать бота, который добавляет роль пользователям на основе набора критериев. У меня есть идентификатор пользователя, хранящийся в базе данных MySQL.
Моя функция добавления роли:
@client.command(pass_context=True)
@commands.has_permissions(administrator=True)
async def add_role(ctx, member: discord.Member, role: discord.Role):
await client.get_guild(ctx.guild.id).fetch_member(member).add_roles(role)
Позже я вызову эту функцию и попытаюсь передать идентификатор разногласий пользователей, который хранится в базе данных. Значение «d» из массива-это сохраненный идентификатор разногласий.
@client.command()
async def daily_task(ctx):
try:
message = ""
connectDB()
cursor = cnx.cursor(buffered=True)
stmt = """very long sql statement"""
cursor.execute(stmt)
for a, b, c, d, e, f, g ,h ,i, j, k, l in cursor.fetchall():
print(d) #troubleshooting
if d != 0:
await add_role(ctx, d, "VEP")
cursor.close()
cnx.close()
except Error as e:
await ctx.send(e)
print(e)
Сообщение об ошибке:
AttributeError: 'coroutine' object has no attribute 'add_roles'
Комментарии:
1. Можете
user.add_roles(role)
ли вы заменитьclient.get_user(user).add_roles(role)
и попробовать запустить его?2. @SuneeshJacob «AttributeError: объект» Пользователь «не имеет атрибута «add_roles «» Я так понимаю, мне может потребоваться поменять класс пользователя на члена?
3. Да, вам нужно использовать объект-член. Объект пользователя — это просто объект пользователя Discord, и у него нет никакой информации о каком-либо конкретном сервере, в то время как объект-участник связан с конкретным сервером.
4. Если у вас есть идентификатор сервера, вы можете попробовать что-то вроде этого:
client.get_guild('<server id>').fetch_member(user).add_roles(role)
5. @SuneeshJacob Спасибо. Я попробовал это и обновил операцию с моим текущим кодом и новой ошибкой. Ошибка атрибута: объект «сопрограмма» не имеет атрибута «add_roles»
Ответ №1:
@client.command(pass_context=True)
@commands.has_permissions(administrator=True)
async def add_role(ctx, member : discord.Member, role : discord.Role):
server = client.get_guild(12345678912344566)
user = await server.fetch_member(member)
await user.add_roles(discord.utils.get(user.guild.roles, name="VEP"))
async def daily_task(ctx):
try:
message = ""
connectDB()
cursor = cnx.cursor(buffered=True)
stmt = """sql string"""
cursor.execute(stmt)
for a, b, c, d, e, f, g ,h ,i, j, k, l in cursor.fetchall():
if d != 0:
print(d)
if (4 g i) - l > 0:
await add_role(ctx, d, "VEP")
cursor.close()
cnx.close()
except Error as e:
await ctx.send(e)
print(e)