Skip to content

Commit 2811eda

Browse files
committed
feat(update database when the message has been edited)
1 parent 33cce73 commit 2811eda

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Telegram自带搜索对CJK的支持仅限于整句,不支持分词。本项目
2424
- 消息记录搜索
2525
- 消息链接定位
2626
- 支持多个群组
27+
- 消息编辑后数据库同步更新
2728

2829
![搜索](https://raw.githubusercontent.com/Taosky/telegram-search-bot/master/preview/search.png)
2930

@@ -73,6 +74,9 @@ Telegram自带搜索对CJK的支持仅限于整句,不支持分词。本项目
7374
- Inline Mode placeholder修改需要重启客户端
7475

7576
## Update Records
77+
#### 2022-10-31
78+
- 支持消息编辑后数据库同步更新
79+
7680
#### 2022-10-30
7781
- 支持索引频道、匿名管理消息。
7882
- 修复了一些 BUG
@@ -87,6 +91,9 @@ Telegram自带搜索对CJK的支持仅限于整句,不支持分词。本项目
8791
- 修复Message ID重复的问题
8892
- 修复导入历史记录报错的问题
8993

94+
<details>
95+
<summary>more</summary>
96+
9097
#### 2022-02-17
9198
- 记录和搜索支持多个群组(数据库有变化,要重新导入历史记录)
9299
- 搜索时用户名后显示"@群组"用于区分消息来源
@@ -103,9 +110,6 @@ Telegram自带搜索对CJK的支持仅限于整句,不支持分词。本项目
103110
#### 2022-01-06
104111
- Docker化
105112

106-
<details>
107-
<summary>more</summary>
108-
109113
#### 2021-09-20
110114
- 更新python-telegram-bot库
111115
- 重构代码,简化操作

user_handlers/msg_store.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,52 @@ def insert_message(msg_id, msg_link, msg_text, msg_video, msg_photo, msg_audio,
3535
session.close()
3636

3737

38+
def update_message(from_chat, msg_id, msg_text):
39+
session = DBSession()
40+
session.query(Message)\
41+
.filter(Message.from_chat.is_(from_chat))\
42+
.filter(Message.id.is_(msg_id))\
43+
.update({"text": msg_text})
44+
session.commit()
45+
session.close()
46+
47+
3848
def store_message(update, context):
49+
print(update)
3950
session = DBSession()
4051
chat_ids = [chat.id for chat in session.query(Chat) if chat.enable]
41-
if update.effective_chat.id not in chat_ids \
42-
or update.message.via_bot:
52+
if update.effective_chat.id not in chat_ids:
4353
return
4454

4555
'''
56+
判断是否是 Edited 消息,如果是,根据 GroupID 和 MessageID 在数据库中搜索现存的消息并更新。
57+
58+
关于图片,音频等媒体的更新我个人并不是很想写,即使更新了在目前来看也没啥特别大的用处,图片并不像文字一样没有良好的分词就无法查询,
59+
完全可以使用 TG 自带的图片搜索来解决这个问题。所以我这部分就只更新了文字消息,并不更新其他的任何消息。
60+
61+
除此之外,这里还判断了被编辑消息的时间,如果 原消息发布时间 和 编辑消息的时间 差距过大的话则不更新,以避免 userbot 的 dme 炸库。
62+
'''
63+
if update.edited_message:
64+
# 判断被编辑消息的间隔
65+
if update.edited_message.edit_date - update.edited_message.date > 120:
66+
return
67+
68+
if update.edited_message.text:
69+
msg_text = update.edited_message.text if update.edited_message.text else ''
70+
elif update.edited_message.caption:
71+
msg_text = update.edited_message.caption if update.edited_message.caption else ''
72+
else:
73+
return
74+
75+
msg_id = update.edited_message.message_id
76+
chat_id = update.edited_message.chat.id
77+
78+
update_message(chat_id, msg_id, msg_text)
79+
return
80+
81+
if update.message.via_bot:
82+
return
83+
'''
4684
这里的 if 判断发言是用户还是频道或者是 group。
4785
需要注意的是,这里并不能排除 BOT,因为 Telegram 为了向后兼容,Anon group 实体会附带有一个 from 参数,里面 is_bot 是 true. 如下
4886
"from": {
@@ -101,4 +139,7 @@ def store_message(update, context):
101139
update_chat(chat_id, chat_title)
102140

103141

104-
handler = MessageHandler(Filters.text | Filters.video | Filters.photo | Filters.audio | Filters.voice, store_message)
142+
handler = MessageHandler(
143+
Filters.text | Filters.video | Filters.photo | Filters.audio | Filters.voice,
144+
store_message,
145+
)

0 commit comments

Comments
 (0)