SteweX
@SteweX

Зависает tasks.loop в cogs, что делать?

Добрый вечер, написал вот такой код:
import discord
from discord.ext import commands, tasks

import valve.rcon
import valve.source.a2s


class Check(commands.Cog):

    def __init__(self, client, address, password):
        self.client = client
        self.address = address
        self.password = password
        self.check.start()


    @tasks.loop(seconds=10)
    async def check(self):
        try:
            with valve.source.a2s.ServerQuerier(self.address, timeout=10.0) as server:
                info = server.info()
                players = info['player_count']
                max_players = info['max_players']
                print(f"-----------------------------------\n"
                      f"Player count: {players}/{max_players}")
            if players == 0:
                await self.client.change_presence(status=discord.Status.idle,
                                             activity=discord.Game(f"{players}/{max_players}"))
            else:
                await self.client.change_presence(status=discord.Status.online,
                                             activity=discord.Game(f"{players}/{max_players}"))
        except valve.source.NoResponseError:
            print(f"-----------------------------------\n"
                  f"Server dead")
            await self.client.change_presence(status=discord.Status.dnd,
                                         activity=discord.Game("Ислам"))


Данный код, каждые 10 секунд, запрашивает информацию с сервера CS:GO. Он рабочий, но через некоторое время +- пару часов, он просто перестаёт работать, и приходиться перезапускать бота. Пробовал делать через апишку хостинга, но результат тот же, подозреваю что не правильно сделал tasks.loop (Сделано в коге). Заранее спасибо за помощь!
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
А зачем делать в Cog? Просто создаём функцию с декоратором @tasks.loop, а потом её запускаем:

@task.loop(seconds=10)
async def cool_task():
  do_something_awesome

cool_task.start()
bot.run(TOKEN)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы