tangled
alpha
login
or
join now
me.vylion.com
/
velascobot2
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
Added dynamic calculation of processed messages
me.vylion.com
1 month ago
5ddae470
2d143ebc
+48
-34
5 changed files
expand all
collapse all
unified
split
.gitignore
velascobot2
bot.py
database.py
messenger.py
parrot.py
+4
-1
.gitignore
···
10
11
# databases
12
*.db
13
-
*.sqlite
0
0
0
···
10
11
# databases
12
*.db
13
+
*.sql*
14
+
15
+
# personal scripts
16
+
.personal_*
+21
-33
velascobot2/bot.py
···
191
assert update.message
192
193
chat_id = str(update.message.chat.id)
194
-
chat_data = self.messenger.get_chat_data(chat_id)
195
-
if chat_data is None:
196
-
try:
197
-
await update.message.reply_text(
198
-
"I've processed no messages so far."
199
-
)
200
-
except (
201
-
telegram.error.Forbidden,
202
-
telegram.error.BadRequest,
203
-
telegram.error.NetworkError,
204
-
) as e:
205
-
logger.error(str(e))
206
-
return
207
-
208
-
num = (
209
-
str(chat_data.processed_messages)
210
-
if chat_data.processed_messages > 0
211
-
else "no"
212
-
)
213
try:
214
await update.message.reply_text(
215
-
"I've processed {} messages so far.".format(num)
216
)
217
except (
218
telegram.error.Forbidden,
···
379
"let only admins" if not chat_data.restricted else "let everyone"
380
)
381
try:
382
-
await update.message.reply_text(f"I will {allowed} configure me now.")
0
0
383
except (
384
telegram.error.Forbidden,
385
telegram.error.BadRequest,
···
672
self, update: Update, context: ContextTypes.DEFAULT_TYPE
673
):
674
"""Handles the /speak command."""
0
675
chat = update.message.chat
676
chat_id = str(chat.id)
0
0
0
0
0
0
0
0
0
0
677
chat_data = self.messenger.get_chat_data(chat_id)
678
679
if chat_data is None:
680
return
681
682
if not self.testing and chat_data.restricted:
683
-
assert update.message
684
user = await update.message.chat.get_member(
685
update.message.from_user.id
686
)
···
696
# words = update.message.text.split()
697
# if len(words) > 1:
698
# self.messenger.process_text(chat_id, ' '.join(words[1:]))
699
-
if chat_data.processed_messages > 0:
700
-
await self.speak(chat_id, reply_to_message_id=rid)
701
-
else:
702
-
empty_gen_warning = "I haven't learned a single word yet."
703
-
await self.send(
704
-
chat_id,
705
-
Response.TEXT,
706
-
content=empty_gen_warning,
707
-
reply_to_message_id=rid,
708
-
)
709
710
async def show_config(
711
self, update: Update, context: ContextTypes.DEFAULT_TYPE
···
726
else:
727
permissions = "neither restricted nor silenced"
728
0
0
729
answer = (
730
f"You're messaging in the chat of __{chat_data.name}__, with id "
731
f"`{chat_data.id}`, message count "
732
-
f"{chat_data.processed_messages}, period "
733
f"{chat_data.message_period}, and answer probability "
734
f"{chat_data.answer_chance}.\n\nThis chat is {permissions}."
735
)
···
191
assert update.message
192
193
chat_id = str(update.message.chat.id)
194
+
count = self.messenger.get_processed_messages(chat_id)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
195
try:
196
await update.message.reply_text(
197
+
f"I remember {count} messages."
198
)
199
except (
200
telegram.error.Forbidden,
···
361
"let only admins" if not chat_data.restricted else "let everyone"
362
)
363
try:
364
+
await update.message.reply_text(
365
+
f"I will {allowed} configure me now."
366
+
)
367
except (
368
telegram.error.Forbidden,
369
telegram.error.BadRequest,
···
656
self, update: Update, context: ContextTypes.DEFAULT_TYPE
657
):
658
"""Handles the /speak command."""
659
+
assert update.message
660
chat = update.message.chat
661
chat_id = str(chat.id)
662
+
if self.messenger.get_processed_messages(chat_id) == 0:
663
+
empty_gen_warning = "I haven't learned a single word yet."
664
+
await self.send(
665
+
chat_id,
666
+
Response.TEXT,
667
+
content=empty_gen_warning,
668
+
reply_to_message_id=update.message.message_id,
669
+
)
670
+
return
671
+
672
chat_data = self.messenger.get_chat_data(chat_id)
673
674
if chat_data is None:
675
return
676
677
if not self.testing and chat_data.restricted:
678
+
assert update.message.from_user
679
user = await update.message.chat.get_member(
680
update.message.from_user.id
681
)
···
691
# words = update.message.text.split()
692
# if len(words) > 1:
693
# self.messenger.process_text(chat_id, ' '.join(words[1:]))
694
+
await self.speak(chat_id, reply_to_message_id=rid)
0
0
0
0
0
0
0
0
0
695
696
async def show_config(
697
self, update: Update, context: ContextTypes.DEFAULT_TYPE
···
712
else:
713
permissions = "neither restricted nor silenced"
714
715
+
processed_messages = self.messenger.get_processed_messages(chat_id)
716
+
717
answer = (
718
f"You're messaging in the chat of __{chat_data.name}__, with id "
719
f"`{chat_data.id}`, message count "
720
+
f"{processed_messages}, period "
721
f"{chat_data.message_period}, and answer probability "
722
f"{chat_data.answer_chance}.\n\nThis chat is {permissions}."
723
)
+14
velascobot2/database.py
···
154
155
return rows
156
0
0
0
0
0
0
0
0
0
0
0
0
0
0
157
def get_graphics(self, chat_id: str):
158
with _SQLiteContextMgr(database=self.db_name) as db:
159
rows = db.execute(
···
154
155
return rows
156
157
+
def get_chat_vocab_count(self, chat_id: str) -> int:
158
+
with _SQLiteContextMgr(database=self.db_name) as db:
159
+
result = db.execute(
160
+
"SELECT SUM(count) FROM vocab WHERE chat_id = ?", (chat_id,)
161
+
).fetchone()[0]
162
+
return result or 0
163
+
164
+
def get_chat_graph_count(self, chat_id: str) -> int:
165
+
with _SQLiteContextMgr(database=self.db_name) as db:
166
+
result = db.execute(
167
+
"SELECT SUM(count) FROM graphics WHERE chat_id = ?", (chat_id,)
168
+
).fetchone()[0]
169
+
return result or 0
170
+
171
def get_graphics(self, chat_id: str):
172
with _SQLiteContextMgr(database=self.db_name) as db:
173
rows = db.execute(
+3
velascobot2/messenger.py
···
138
139
def update_set_silenced(self, chat_id: str, silenced: bool):
140
self._parrot.update_chat_set_silenced(chat_id, silenced)
0
0
0
···
138
139
def update_set_silenced(self, chat_id: str, silenced: bool):
140
self._parrot.update_chat_set_silenced(chat_id, silenced)
141
+
142
+
def get_processed_messages(self, chat_id: str) -> int:
143
+
return self._parrot.get_processed_messages(chat_id)
+6
velascobot2/parrot.py
···
133
134
def update_chat_set_silenced(self, chat_id: str, silenced: bool):
135
self.db.update_chat_set_silenced(chat_id, silenced)
0
0
0
0
0
0
···
133
134
def update_chat_set_silenced(self, chat_id: str, silenced: bool):
135
self.db.update_chat_set_silenced(chat_id, silenced)
136
+
137
+
def get_processed_messages(self, chat_id: str) -> int:
138
+
graph_count = self.db.get_chat_graph_count(chat_id)
139
+
start_words = self.db.get_next_words(chat_id, " ")
140
+
start_word_count = sum(weight for _, weight in start_words)
141
+
return graph_count + start_word_count