Как каждый день отправлять сообщение для каждого пользователя в их время?
В чем суть вопроса. У меня есть команда /settime @user time
К примеру я пишу /settime anton#2834 17 потом /settime egor#5234 13
17 и 13 записалось в базу данных для антона и егора, и мне нужно чтобы бот каждый день бот присылал во время антона сообщение для антона, а во время егора сообщение для егора.
Можно хоть тред делать с бесконечным while, маленькими sleep и постоянными проверками. В schedule эта логика примерно так и реализована.
Ещё можно базу грепать каждую секунду на предмет "вот сейчас будет что-нибудь?". Этот вариант чуть лучше в плане стабильности (можно рестартовать машину без опасений - само восстановится), но чуть менее точный и с повышенной нагрузкой на базу.
В реальных проектах используются гибридные варианты.
Deerenaros, если делать через таски, как именно сделать разное время для разных пользователей? Таск не передаёт ведь member? А я должен получить время из бд
creat1vv, можешь использовать глобальные переменные, или внутри таски грепать базу, или создавать таску как было получено сообщение, то есть сразу в контексте, да хоть dbless если не так критичны пропуски и ошибки. Не понимаю, в чём, собственно, проблема? Попробуй, не получится - тогда пиши. Или вопрос подробнее писать надо.
Deerenaros, привет. Никак не могу получить из базы данных в тасках пользователей и их даты.
Сам код:
@tasks.loop(minutes=1)
async def main(self):
users = self.db.get_data2
if users['workdate'] != 0:
time1 = int(users['workdate'] + timedelta(minutes=-10))
now = datetime.now()
if now == time1:
time2 = int(time1.timestamp())
channel2 = self.bot.get_channel(987413413900718170)
await channel2.send(f"<@{users['member_id']}>, твоя смена будет <t:{time2}:R>")
time3 = int(users['workdate'] + timedelta(days=1))
await self.db.update_member({"member_id": users['member_id']}, {"$set": {"workdate": time3}})
Вылазит ошибка:
Unhandled exception in internal background task 'main'.
Traceback (most recent call last):
File "C:\python\lib\site-packages\disnake\ext\tasks\__init__.py", line 157, in _loop
await self.coro(*args, **kwargs)
File "C:\Users\Creativchak\Desktop\HarukoBot\cogs\tasks.py", line 29, in main
if users['workdate'] != 0:
TypeError: 'method' object is not subscriptable
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.