@xzartsust
Учусь

Как сделать так чтобы таймер не сбрасывался при перезапуске бота?

Имею такой код для выдачи роли мут на определенный промежуток времени:
import discord
from discord.ext import commands
import psycopg2
import asyncio, asyncpg
import os

########################################################## Connect to SQL ###################################################


database = os.environ.get('DATABASE')
user = os.environ.get('USER')
password = os.environ.get('PASSWORD')
host = os.environ.get('HOST')
port = os.environ.get('PORT')

conn = psycopg2.connect(
    database = f"{database}", 
    user = f"{user}", 
    password = f"{password}", 
    host = f"{host}", 
    port = "5432"
)

cursor = conn.cursor()


########################################################################################################################

class MuteCommand(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    @commands.has_permissions(administrator = True)
    async def mute(self, ctx, who: discord.Member, time: int, what: str, reason = None):
        
        guild = ctx.message.guild
        cursor.execute(f'SELECT role_id FROM public.mute_role WHERE guild_id = \'{guild.id}\';')
        role_mute = cursor.fetchone()
        conn.commit()
        print(role_mute[0])
        role = ctx.message.guild.get_role(role_mute[0])
        
        await ctx.channel.purge(limit = 1)
        
        print(f'[command.mute] От {ctx.author}, кого {who} роль {role}')
        
        if what == str('m'):
            if time >=1 and time <= 59:
                
                await ctx.send(f'--> {who} получил мут на {time}м. по причине: {reason}')

                await who.add_roles(role)
                await who.move_to(None)
                await asyncio.sleep(time * 60)
                await who.remove_roles(role)
                await ctx.send('Мут забраний')
        
        if what == str('h'):
            if time >= 1 and time <= 24:
                await ctx.send(f'--> {who} получил мут на {time}ч. по причине: {reason}')

                await who.add_roles(role)
                await who.move_to(None)
                await asyncio.sleep(time * 3600)
                await who.remove_roles(role)
                await ctx.send('Мут забраний')
        
        if what == str('d'):
            if time >= 1 and time <= 365:
                await ctx.send(f'--> {who} получил мут на {time}д. по причине: {reason}')

                await who.add_roles(role)
                await who.move_to(None)
                await asyncio.sleep(time * 86400)
                await who.remove_roles(role)
                await ctx.send('Мут забраний')
        
        if what == str('y'):
            if time >= 1:
                await ctx.send(f'--> {who} получил мут на {time}л. по причине: {reason}')

                await who.add_roles(role)
                await who.move_to(None)
                await asyncio.sleep(time * 31557600)
                await who.remove_roles(role)
                await ctx.send('Мут забраний') 


    @commands.command()
    @commands.has_permissions(administrator = True)
    async def muterole(self, ctx, role_id: discord.Role):
        guild = ctx.message.guild
        role = ctx.message.guild.get_role(role_id)

        cursor.execute(f'UPDATE public.mute_role SET role_id = \'{role_id}\' WHERE guild_id = \'{guild.id}\';')
        conn.commit()

        emb = discord.Embed(
            title= 'Успешно!',
            description = f'Роль {role.mention} была установленна для команды `mute`',
            timestamp = ctx.message.created_at
            )
        emb.set_footer(
            text = 'Запросил: ' + f'{ctx.author}',
            icon_url = ctx.author.avatar_url
            )
        
        if ctx.guild.system_channel is not None:
            await ctx.guild.system_channel.send(embed = emb)
        elif ctx.guild.system_channel is None:
            await ctx.send(embed = emb)

def setup(bot):
    bot.add_cog(MuteCommand(bot))

Когда я заливаю бота на хост то таймер сбрасывается и через то время через который бот должен забрать эту роль не забирает (роль просто лишаеться в юзера)

Как это можно пофиксить?
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Использовать любой способ хранения состояния - файлы, редис, базы данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы