Komputer: MacOS W / Python 3.7 i Discord pakiet zainstalowany

Serwer: centos 6 z pakietem Python 3.6 i Discord

Myślę, że kod jest zły lub może być zoptymalizowany, aby usunąć problem.

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))
        print(self.user.id)
        print('------')
        # loops through connected servers and assigns increments server count variable
        server_count = 0
        quote_count = 0
        for guild in client.guilds:
            server_count += 1
        print("The server count is {}".format(server_count))
        for quote in quotes:
            quote_count += 1
        print("There number of quotes available is: " + str(quote_count))
        print('------')
        while not client.is_closed():
            now = datetime.strftime(datetime.now(), '%H:%M')
            iter_count = 0
            print("current time is: " + now)
            if now == wakeup_time:  # enter for-loop at specific time
                for guild in client.guilds:
                    for channel in guild.channels:
                        if str(channel) == 'chat':
                            await channel.send('Good Morning/Afternoon/Good Night. Here is today\'s random quote:')
                            await channel.send('```' + str(random.choice(quotes)).strip('[]') + '```')
                            print("{} Server Greeted.").format(guild.name)
                            iter_count += 1
                            if iter_count == server_count:
                                await asyncio.sleep(7200)  # puts loop on hold for 1 hour
            else:
                await asyncio.sleep(10)

Co robi lokalnie: Zamieszczanie do kanału #Chat na każdym serwerze Discord Server, a następnie spanie funkcję przez 2 godziny. Bot jest podłączony do czterech serwerów niezgody. (To jest to, co chcę zrobić).

Co robi na serwerze Centos Linux: , umieszczając na kanale #Chat tylko jednego z serwerów 5 razy, a następnie śpi funkcję przez dwie godziny.

Pytanie: Czy jest lepszy sposób na optymalizację kodu do pętli przez serwery i pocztę w kanałach czatu raz dziennie?

1
Josh 12 kwiecień 2020, 01:18

1 odpowiedź

Najlepsza odpowiedź

Osobiście używałbym tego zadania w tle. Również zamiast używać guild.channels użyj guild.text_channels. Mam nadzieję, że kilka zmian w kodzie, miejmy nadzieję, że to pomoże.

class MyClient(discord.Client):
    async def start_task(self):
        while not client.is_closed():
            now = datetime.strftime(datetime.now(), '%H:%M')
            iter_count = 0
            print("current time is: " + now)
            if now == wakeup_time:  # enter for-loop at specific time
                for guild in client.guilds:
                    for channel in guild.text_channels:
                        if channel.name == 'chat':
                            await channel.send('Good Morning/Afternoon/Good Night. Here is today\'s random quote:')
                            await channel.send('```' + str(random.choice(quotes)).strip('[]') + '```')
                            print("{} Server Greeted.").format(guild.name)
                            iter_count += 1
                            if iter_count == server_count:
                                await asyncio.sleep(7200)  # puts loop on hold for 1 hour
                            break
            else:
                await asyncio.sleep(10)

    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))
        print(self.user.id)
        print('------')
        # loops through connected servers and assigns increments server count variable
        quote_count = 0
        print("The server count is {}".format(len(client.guilds)))
        for quote in quotes:
            quote_count += 1
        print("There number of quotes available is: " + str(quote_count))
        client.loop.create_task(start_task())
2
Konyer 13 kwiecień 2020, 01:29