• Как исправить то что не работает await и код выполняется дальше без данных с DB?

    Выполнение синхронного кода в пулах треда или процесса

    Как говорит import this:
    Simple is better than complex.

    Я чисто не вижу смысла во всех этих sync_to_asyncи прочих.
    database_sync_to_async вовсе не используется в данном коде.

    Используйте расширение discord.py называемое "commands". Оно идёт вместе с библиотекой и значительно упрощает жизнь при написании команд.
    Errors should never pass silently.
    Unless explicitly silenced.


    Переподключать бота при любой ошибке - смахивает на ОЧЕНЬ плохую идею.

    import asyncio
    import os
    from functools import partial
    
    import discord
    from discord.ext import commands
    from allauth.socialaccount.models import SocialAccount
    
    from main.models import Game, Purchase, Key
    
    
    bot = commands.Bot()
    
    
    @bot.event
    async def on_ready():
        print('We have logged in as {0.user}'.format(bot))
    
    @commands.command()
    async def hello(ctx):
        game = (await bot.loop.run_in_executor(None, Game.objects.all))[0]
        await ctx.send(game.name)
    
    @bot.event
    async def on_member_join(member):
        allAccounts = await bot.loop.run_in_executor(None, SocialAccount.objects.all)
        for acc in allAccounts:
            if acc.extra_data['id'] == str(member.id):
                account_id = acc.extra_data['id']
                purchases = await bot.loop.run_in_executor(None, partial(Key.objects.filter, user__id=account_id))
                keys = [await bot.loop.run_in_executor(None, partial(Key.objects.filter, purchase__id=purchase.id)) for purchase in purchases]
        for key in keys:
            role = discord.utils.get(member.guild.roles, id=key.cheat.ds_role_id)
            print(str(key.cheat.ds_role_id))
            await member.add_roles(role)
            break
    
    
    bot.run(os.environ.get('DS_BOT_TOKEN'))

    Возможно данный код вам чем-то поможет. Написано без учёта содержимого SocialAccount и main.models, поэтому код затрагивающий их остался примерно неизменным.
    Отступы так же были угаданы чисто по коду.
    Ответ написан
    2 комментария