-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautoresponder.py
More file actions
68 lines (56 loc) · 3.04 KB
/
Copy pathautoresponder.py
File metadata and controls
68 lines (56 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from .. import loader, utils
from telethon.tl.types import Message, UserStatusOffline, User
import logging
logger = logging.getLogger(__name__)
@loader.tds
class AutoResponderMod(loader.Module):
"""Автоответчик для HerokuUserBot"""
strings = {
"name": "AutoResponder",
"config_message": "Сообщение автоответчика",
"no_message_set": "⚠️ Сообщение автоответчика не установлено в конфиге!"
}
strings_ru = {
"config_message": "Сообщение автоответчика",
"no_message_set": "⚠️ Сообщение автоответчика не установлено в конфиге!"
}
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
"auto_message",
"Я сейчас оффлайн, напишу позже!",
lambda: self.strings["config_message"],
validator=loader.validators.String()
)
)
self._replied_chats = set() # Хранит ID чатов, где автоответчик уже сработал
async def client_ready(self, client, db):
self.client = client
self.db = db
async def watcher(self, message):
"""Следит за входящими сообщениями в ЛС и отправляет автоответ, если пользователь оффлайн."""
try:
if not isinstance(message, Message) or message.out:
return
# Проверяем, что сообщение из ЛС (от пользователя, не группы)
chat = await message.get_chat()
if not isinstance(chat, User):
return
# Проверяем статус пользователя
user = await self.client.get_me()
if not isinstance(user.status, UserStatusOffline):
self._replied_chats.discard(message.chat_id) # Сбрасываем, если пользователь онлайн
return
# Проверяем, не отправляли ли уже автоответ в этот чат
if message.chat_id in self._replied_chats:
return
# Проверяем, задано ли сообщение в конфиге
if not self.config["auto_message"] or not self.config["auto_message"].strip():
logger.debug("Сообщение автоответчика не установлено или пустое")
return
# Отправляем автоответ
await utils.answer(message, self.config["auto_message"])
self._replied_chats.add(message.chat_id)
logger.debug(f"Автоответ отправлен в чат {message.chat_id}: {self.config['auto_message']}")
except Exception as e:
logger.debug(f"Ошибка в watcher: {e}", exc_info=False)