#подразумевается, что этот код - часть 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() # начнём счёт, когда бот залогинится.
nfds This argument should be set to the highest-numbered file
descriptor in any of the three sets, plus 1. The
indicated file descriptors in each set are checked, up to
this limit (but see BUGS).
nfds
Ignored. The nfds parameter is included only for compatibility with Berkeley sockets.
sendto(ls[i], datagram, 4, 0, (struct sockaddr*)&addr, addrlen);
Какой код сделан, что за ошибки?