создание модуля на хикку чтоб создавал отложеные с...
Created on: July 16, 2025
Created on: July 16, 2025
создание модуля на хикку чтоб создавал отложеные сообшение чтоб можно было настроить текст промежуток количество и во сколько отправлять
Ниже — полнофункциональный пример плагина (Hikka module) для Telegram-userbot’а Hikka.
Он позволяет:
HH:MM
);После загрузки плагина появится команда .autosend
text.autosend "<текст>" <кол-во_сообщений> <интервал> <HH:MM>
text.autosend "Доброе утро!" 5 1h 09:00
Отправит «Доброе утро!» 5 раз: в 09:00, 10:00, 11:00, 12:00 и 13:00.
python# -*- coding: utf-8 -*- # ⇝ filename: autosend.py # ⇝ requirements: telethon>=1.35 from .. import loader, utils from datetime import datetime, timedelta import asyncio import pytz # убедитесь, что библиотека установлена: pip install pytz class AutoSendMod(loader.Module): """Отложенная и повторяющаяся отправка сообщений""" strings = { "name": "AutoSend", "start": "<b>[AutoSend]</b> Запланировано <code>{}</code> сообщений; старт в <code>{}</code> (UTC+0)", "done": "<b>[AutoSend]</b> Отправка завершена", "bad_syntax": "<b>[AutoSend]</b> Использование:\n.autosend \"текст\" <кол-во> <интервал> <HH:MM>" } async def client_ready(self, client, db): self.client = client @loader.owner # только владелец юзербота async def autosend(self, m: loader.Message): """\"текст\" <кол-во> <интервал> <HH:MM> — создать задачу""" args = utils.get_args_raw(m) if not args or args.count('"') < 2: return await m.edit(self.strings("bad_syntax")) # --- Парсинг аргументов --- try: text = args.split('"')[1] rest = args.split('"')[2].strip().split() count = int(rest[0]) interval_raw = rest[1] start_time_raw = rest[2] except (IndexError, ValueError): return await m.edit(self.strings("bad_syntax")) # интервал: поддержка s / m / h mult = {"s": 1, "m": 60, "h": 3600} try: seconds = int(interval_raw[:-1]) * mult[interval_raw[-1].lower()] except Exception: return await m.edit("<b>[AutoSend]</b> Интервал должен оканчиваться на s/m/h") # время первой отправки try: hh, mm = map(int, start_time_raw.split(":")) now = datetime.utcnow() start_dt = now.replace(hour=hh, minute=mm, second=0, microsecond=0) if start_dt <= now: start_dt += timedelta(days=1) # если время уже прошло — завтра except Exception: return await m.edit("<b>[AutoSend]</b> Время укажите в формате HH:MM") await m.edit(self.strings("start").format(count, start_dt.strftime("%Y-%m-%d %H:%M"))) # --- Планирование --- for i in range(count): delay = (start_dt - datetime.utcnow()).total_seconds() await asyncio.sleep(max(delay, 0)) await self.client.send_message(m.chat_id, text) start_dt += timedelta(seconds=seconds) await m.respond(self.strings("done"))
autosend.py
.modules
..load autosend
.datetime.utcnow()
на datetime.now(pytz.timezone("Europe/Moscow"))
(или ваш тайм-зон) и уберите .replace(...)
корректно.schedule_date
, но живой sleep
-цикл проще и надёжнее, особенно если интервал небольшой.