-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautoprofile.py
More file actions
163 lines (139 loc) · 6.79 KB
/
Copy pathautoprofile.py
File metadata and controls
163 lines (139 loc) · 6.79 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# На модуль распространяется лицензия "GNU General Public License v3.0"
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
# meta developer: @pymodule
# meta fhsdesc: tool, tools, user, profile
from hikkatl.types import Message
from telethon.tl.functions.account import UpdateProfileRequest
from .. import loader, utils
import asyncio
import random
@loader.tds
class AutoProfileMod(loader.Module):
"""Automatically update your profile description"""
strings = {
"name": "AutoProfile",
"no_desc": "<b>[AutoProfile] No saved descriptions!</b>",
"error": "<b>[AutoProfile] Auto bio update error:</b> {}",
"enabled": "<b>[AutoProfile] Auto bio enabled!</b>",
"disabled": "<b>[AutoProfile] Auto bio disabled!</b>",
"usage": "<b>[AutoProfile] Usage:</b> .autodesc on/off",
"desc_added": "<b>[AutoProfile] Description added:</b> {}",
"desc_removed": "<b>[AutoProfile] Description removed:</b> {}",
"invalid_number": "<b>[AutoProfile] Invalid number!</b>",
"enter_number": "<b>[AutoProfile] Enter a description number to delete!</b>",
"desc_list": "<b>[AutoProfile] Description list:</b>\n{}",
"desc_empty": "<b>[AutoProfile] No descriptions saved!</b>",
"enter_text": "<b>[AutoProfile] Enter text to add!</b>",
"set_interval": "<b>[AutoProfile] Update interval set:</b> {} sec.",
"enter_interval": "<b>[AutoProfile] Enter interval in seconds!</b>",
}
strings_ru = {
"no_desc": "<b>[AutoProfile] Нет сохранённых описаний!</b>",
"error": "<b>[AutoProfile] Ошибка автообновления описания:</b> {}",
"enabled": "<b>[AutoProfile] Автоописание включено!</b>",
"disabled": "<b>[AutoProfile] Автоописание отключено!</b>",
"usage": "<b>[AutoProfile] Использование:</b> .autodesc on/off",
"desc_added": "<b>[AutoProfile] Описание добавлено:</b> {}",
"desc_removed": "<b>[AutoProfile] Описание удалено:</b> {}",
"invalid_number": "<b>[AutoProfile] Некорректный номер!</b>",
"enter_number": "<b>[AutoProfile] Введите номер описания для удаления!</b>",
"desc_list": "<b>[AutoProfile] Список описаний:</b>\n{}",
"desc_empty": "<b>[AutoProfile] Список описаний пуст!</b>",
"enter_text": "<b>[AutoProfile] Введите текст для добавления!</b>",
"set_interval": "<b>[AutoProfile] Интервал смены установлен:</b> {} сек.",
"enter_interval": "<b>[AutoProfile] Введите интервал в секундах!</b>",
}
def __init__(self):
self._task = None
async def client_ready(self, client, db):
self.client = client
self.db = db
self.config = loader.ModuleConfig(
"enabled", False, "Auto bio enabled",
"interval", 3600, "Interval in seconds",
"descriptions", [], "List of descriptions"
)
if self.config["enabled"]:
self._task = asyncio.create_task(self._update_bio())
async def _update_bio(self):
while self.config["enabled"]:
descs = self.config["descriptions"]
if not descs:
await self.client.send_message("me", self.strings("no_desc"))
return
try:
new_bio = random.choice(descs)
await self.client(UpdateProfileRequest(about=new_bio[:70]))
except Exception as e:
await self.client.send_message("me", self.strings("error").format(str(e)))
await asyncio.sleep(self.config["interval"])
@loader.command(
ru_doc="Включить или отключить автоописание",
en_doc="Enable or disable auto bio updates"
)
async def autodesccmd(self, message: Message):
"""Toggle auto bio"""
arg = utils.get_args_raw(message)
if arg not in ["on", "off"]:
await utils.answer(message, self.strings("usage"))
return
enabled = arg == "on"
self.config["enabled"] = enabled
if enabled:
self._task = asyncio.create_task(self._update_bio())
await utils.answer(message, self.strings("enabled"))
else:
await utils.answer(message, self.strings("disabled"))
@loader.command(
ru_doc="Добавить описание: .adddesc <текст>",
en_doc="Add a description: .adddesc <text>"
)
async def adddesccmd(self, message: Message):
"""Add description"""
text = utils.get_args_raw(message)
if not text:
await utils.answer(message, self.strings("enter_text"))
return
self.config["descriptions"].append(text)
await utils.answer(message, self.strings("desc_added").format(text))
@loader.command(
ru_doc="Удалить описание по номеру: .deldesc <номер>",
en_doc="Delete description by number: .deldesc <number>"
)
async def deldesccmd(self, message: Message):
"""Delete description"""
args = utils.get_args_raw(message)
if not args.isdigit():
await utils.answer(message, self.strings("enter_number"))
return
index = int(args) - 1
descs = self.config["descriptions"]
if 0 <= index < len(descs):
removed = descs.pop(index)
await utils.answer(message, self.strings("desc_removed").format(removed))
else:
await utils.answer(message, self.strings("invalid_number"))
@loader.command(
ru_doc="Показать список описаний",
en_doc="Show list of descriptions"
)
async def listdesccmd(self, message: Message):
"""List descriptions"""
descs = self.config["descriptions"]
if not descs:
await utils.answer(message, self.strings("desc_empty"))
return
text = "\n".join([f"{i + 1}. {d}" for i, d in enumerate(descs)])
await utils.answer(message, self.strings("desc_list").format(text))
@loader.command(
ru_doc="Установить интервал обновления: .setinterval <сек>",
en_doc="Set update interval: .setinterval <seconds>"
)
async def setintervalcmd(self, message: Message):
"""Set update interval"""
args = utils.get_args_raw(message)
if not args.isdigit():
await utils.answer(message, self.strings("enter_interval"))
return
self.config["interval"] = int(args)
await utils.answer(message, self.strings("set_interval").format(args))