import asyncio
async def main():
# к этом момент рабочий цикл уже запущен, так как он и выполняет main()
asyncio.create_task(.....)
await bot.polling()
if __name__ == '__main__':
asyncio.run(main())
CREATE TABLE IF NOT EXISTS shop(
id BIGINT PRIMARY KEY,
idx INT UNIQUE,
cost BIGINT
)
async def buy(ctx, index: int):
....
data = cursor.execute("SELECT cost FROM shop WHERE idx = ?", (index, )).fetchall()
# ну и далее по тексту
!buy qqq
должно сработать.async def buy(ctx, role: typing.Union[discord.Role, int, None] = None):
if role is None:
# роль не указана
elif isinstance(role, int):
# роль по индексу
else:
# роль - это discord.Role, смотрим по role.id
async def buy(ctx, *, role: str):
role = role.strip()
if not role:
# роль не указана
return
try:
role_number = int(role)
except ValueError:
# ищем роль в списке ролей гильдии по имени
else:
# роль по индексу
Если этого достаточно, то прекрасно.
Если же нужно получать строки из какого-то источника, то уже не прокатит.