前述
众所周知,Telegram 的中文搜索非常稀烂。其原因,跟它最开始设计「搜索」这个功能的时候就有关系。Telegram 的发言搜索,实际上是按照单词
分组的(空格或符号作为分隔符),后端把这些词再加以存储归类(并非我们通常所以为和常用的逐字匹配
)
举个简单的例子,现在你看到一条消息:
从中文的角度来看,第二句是:我加了一堆愿望单
,如果也发一句英文版就是 I added a lot to wishlist
。这个时候,你如果在 Telegram 的搜索功能里搜索愿望单
是搜不到的,但是你搜索 wishlist
却可以(当然前提是你发了英文版)。
为什么?正如前面所说的,Telegram 的发言搜索,实际上是按照单词分组的
,也就是说,这个句子里面,我加了一堆愿望单
对于 Telegram 来说是一个完整的词语,你只有在搜索功能里搜索完整的这一段文字才能搜到。
但是正常人都不可能在搜索的时候记得自己完整的句子内容……
从原理上反推,如果你 打字 的 时候 记得 给 词语 分词,那么 你的 话 也 比较 容易 可以 搜索 出来。但 正常人 都 不会 这么 说话。
所以 luoxu 这类程序就是预先把聊天记录存进数据库,后面再依赖数据库来搜索(
准备
- 依云开发的 luoxu:https://github.com/lilydjwg/luoxu
- 👴编写的 Telegram Bot:https://github.com/TigerBeanst/luoxu-bot
- 可能需要一台存储空间足够的机器,我这边同时索引 6 个群组,数据库大概吃了 1G 的空间,程序本身不断运行抓取也会吃掉一定的内存
此文章所用环境为 CentOS 7.9,请确保你的机器能连接 Telegram 的 Bot API
安装 git
、screen
、vim
:
yum update -y
yum install -y git screen vim
找个文件夹存储你的小东西们,请自行修改:
mkdir /home/TigerBeanst/telegram-bot
cd /home/TigerBeanst/telegram-bot
拉取 luoxu 和 luoxu-bot:
git clone https://github.com/lilydjwg/luoxu.git
git clone https://github.com/TigerBeanst/luoxu-bot.git
Python 版本
luoxu 可能需要 Python 3.8 以上的版本,如果机器上的 Python 版本不够(使用 python3 -V
检查),可以参阅博客文章更新:
最后,前往 My Telegram
获取
API development tools
中的api_id
和api_hash
luoxu
安装依赖:
cd /home/TigerBeanst/telegram-bot/luoxu
pip3 install -r requirements.txt
修改配置文件:
cp config.toml.example config.toml
vim config.toml
按下键盘上的 i
进入编辑模式,移动光标到对应位置修改好以下字段:
- api_id(前面获取了)
- api_hash(前面获取了)
- account(需要带+号,即带国家地区代码的)
- session_db(随意)
- index_groups(需要未设置禁止引用的群组,设置了的群组可能会一直抓空)
index_groups
字段是你实际要索引的群组 ID 或 公开链接(带 @ 的那种),如果你使用第三方 Telegram 客户端可以直接获取到群组 ID 的话,可以直接在此输入(注意,这个 ID 前面是不带 -100 的。如果你查看的结果是带了 -100 的,移除掉 -100 后剩下的部分就是群组 ID 了)。
当然作者也有预先写好了相关的模块用于获取群组 ID:
python3 -m luoxu.ls_dialogs
首次使用可能会需要输入登录验证码(和密码,如果设置了的话)
修改好后,按下 Esc
,再输入 :wq
回车保存
然后修改 /luoxu/db.py
中的 SEARCH_LIMIT
,修改至 10
,因为默认 50 会导致过长的搜索结果,Bot 发不出来
PostgreSQL
参考 https://ken.io/note/centos7-postgresql12-install-and-configuration
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12 postgresql12-server
然后还要安装 PGroonga 扩展:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(cut -d: -f5 /etc/system-release-cpe | cut -d. -f1)-$(rpm -qf --queryformat="%{ARCH}" /etc/redhat-release)/pgdg-redhat-repo-latest.noarch.rpm
yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm
yum install -y postgresql12-pgdg-pgroonga
然后再来初始化 PostgreSQL 和设置开机自启:
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl start postgresql-12
systemctl enable postgresql-12
提前把 luoxu 文件夹的权限给到 postgres 用户:
chown postgres /home/TigerBeanst/telegram-bot/luoxu -R
安装完成后会生成 postgre
s 用户,切换过去:
su postgres
psql
创建数据库(以下指令都在 psql 里进行,注意部分句子句末有分号,请不要把 # 或者 $ 之前的东西一起复制了,这里一起贴出来主要是好理解当前在什么状态下):
postgres=# create database luoxu; //创建数据库
postgres=# \c luoxu //进入数据库
luoxu=# CREATE EXTENSION pgroonga; //添加扩展
luoxu=# exit //退出
导入数据库:
bash-4.2$ psql luoxu < /home/TigerBeanst/telegram-bot/luoxu/dbsetup.sql;
回到原来的 root 用户,回到 luoxu 目录,使用 screen(或任何你喜欢的后台运行工具):
screen -R luoxu
su postgres
cd /home/TigerBeanst/telegram-bot/luoxu
python3 -m luoxu
如果提示 ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/Python3.10.5/lib/python3.10/site-packages/opencc/clib/opencc_clib.cpython-310-x86_64-linux-gnu.so) 之类的,下载 后上传到
/usr/lib64/
目录下,备份原有(mv libstdc++.so.6 libstdc++.so.6.bak
)后,创建新的符号链接:ln -s libstdc++.so.6.0.26 libstdc++.so.6
screen 是用来挂后台运行的,如果成功开始索引了,直接关掉当前终端窗口就行,等着吧。
luoxu-bot
同理,进到 luoxu-bot 的目录,安装依赖
cd /home/TigerBeanst/telegram-bot/luoxu-bot
pip3 install -r requirements.txt
编辑配置文件 config.py
vim config.py
修改对应字段:
- my_id:你的账号的 ID,可以通过向 @getuseridbot 发送
/start
来获得 - api_id:上面拿过
- api_hash:上面拿过
- bot_token:上面还是拿过
直接使用 screen(或任何你喜欢的后台运行工具)运行 main.py
screen -R luoxu-bot
cd /home/TigerBeanst/telegram-bot/luoxu-bot
python3 main.py
当出现 开摆
时,代表项目已启动,可以向自己的 Bot 尝试发送指令(请提前向自己的 Bot 激活 /start
)
共有 0 条评论