async def adm(self, user):
async with self.pool.acquire() as conn:
async with conn.cursor() as cur:
result = await cur.execute("SELECT admin FROM profile WHERE uid=%s", user.id)
row = await cur.fetchall()
if result == 1:
await cur.execute("UPDATE profile SET admin=Хелпер WHERE uid=%s", user.id)
for adm in row[0]:
return adm
Я обновляю себе роль, а хотел пользователю из беседы, пишу место user.id, member, не чего не происходит
Код выдачи админки:
@command(name="+адм")
async def prov(self, ctx, member=None):
user = await self.bot.get_user(ctx.from_id)
adm = await basa.register.main.chekc_adm(user)
uca = ("Участник")
admin = ("Разраб")
helper = 1
admin1 = 2
moderator = 3
covetnic = 4
programmer = 5
zam = 6
cozdatel = 7
if member is None:
await ctx.send("Перешлите или укажите айди пользователя")
elif adm == uca or programmer >= 5:
await ctx.send(format(user.first_name) + ", выдал роль администратора пользователю" + member)
else:
await ctx.send("Не достаточно прав")
Ну это я знаю, я вот когда пытаюсь выдать кому то админку рангом 1, 1 админ это обычный хелпер
Пишу ("UPDATE profile SET admin=1 WHERE uid=%s", user.id), то я себе сношу админку до 1 ранга и забираю у себя у самого все права которые доступны с ранг 5 и выше
Артём Смирнов, лучше приведите реальный код, по крайней мере кусок с выполнением этого update.
И что именно подразумевается под "сношу админку до 1 ранга"? То, что ставите себе admin=1 ? Значит вы свой uid в update и передаете.
async def adm(self, user):
async with self.pool.acquire() as conn:
async with conn.cursor() as cur:
result = await cur.execute("SELECT admin FROM profile WHERE uid=%s", user.id)
row = await cur.fetchall()
if result == 1:
r = await cur.execute("UPDATE profile SET admin=Хелпер WHERE uid=%s", user.id)
for adm in row[0]:
return adm
@command(name="+адм")
async def prov(self, ctx, member=None):
user = await self.bot.get_user(ctx.from_id)
adm = await basa.register.main.chekc_adm(user)
uca = ("Участник")
admin = ("Разраб")
helper = 1
admin1 = 2
moderator = 3
covetnic = 4
programmer = 5
zam = 6
cozdatel = 7
if member is None:
await ctx.send("Перешлите или укажите айди пользователя")
elif adm == uca or zam >= 5:
await ctx.send(format(user.first_name) + ", выдал роль администратора пользователю" + member)
else:
await ctx.send("Не достаточно прав")
Вот код, я когда выдаю, то снимаю себе админку не чайно, мне посоветовали так сделать, делал отдельный класс для перменных, выходит ошибка:IndexError: tuple index out of range
Артём Смирнов, проблема явно не с базой и не с запросами, как уже заметил o5a в user находится не тот юзер, который вы ожидаете. Надо копать документацию библиотеки, с помощью которой вы бота пишите.
нужно дебажить, но продполагаю что нужно сохранить транзакицию
await cur.execute("UPDATE profile SET admin=Хелпер WHERE uid=%s", user.id)
await conn.commit()
Также, стоит попробовать такую запись:
await cur.execute("UPDATE profile SET admin=Хелпер WHERE uid=%s", (user.id,))
Также, стоит попробовать писать не запрос не в таких кавычках "{sql запрос}", а в таких """ {sql запрос}""" , причем удобно передавать праметр через формат строку, например так - """select * from {}""".format('orders')
denislysenko, Хорошо, я это использую
А это можно как то сократить?
user = await self.bot.get_user(ctx.from_id)
adm = await basa.register.main.chekc_adm(user)
мне каждый раз приходится одни и теже переменные делать