member
The member who added the reaction. Only available if event_type is REACTION_ADD and the reaction is inside a guild.
#подразумевается, что этот код - часть cog-класса для бота.
def __init__(self):
#создаём подключение к БД сами...
#возможно, его стоит передавать в параметрах конструктора нашего сog?
self.db = aiosqlite.connect('mydatabase.sqlite')
@tasks.loop(seconds=60) #выполняем эту функцию каждые 60 секунд
async def countdown_processor(self):
#тупо уменьшаем значение счётчика для всех пользователей
#но (для примера) с ограничением до нуля
cursor = await self.db.execute("UPDATE user_counters SET counter = counter - 1 WHERE counter > 0")
await cursor.close() #так как это не select-запрос, нам курсор без надобности.
#всё, больше ничего не требуется!
#так как вызов асинхронный, бот может заниматься другими делами, пока запрос выполняется
Делаете цикл по строкам исходного файла. Кажду строку сверяете с набором выражений. Если совпадений не было, строки помещаете во временный файл, затем временный файл перемещаете на место исходного.
from discord.ext import tasks
@tasks.loop(seconds=60) # асинхронная подпрограмма будет вызываться каждые 60 секунд
# она НЕ ДОЛЖНА выполнять длительных действий, так как на это время бот блокируется!
async def my_background_task(self):
#в этом пример бо тпросто пишет в канал увеличивающийся счётчик
channel = self.get_channel(1234567) # channel ID goes here
self.counter += 1
await channel.send(self.counter)
@my_background_task.before_loop # а так можно выполнить подпрограмму ДО начала циклической задачи
#обрати внимание на имя декоратора: my_background_task, как у функции выше
async def before_my_task(self):
await self.wait_until_ready() # начнём счёт, когда бот залогинится.