基于 python-telegram-bot 的 Telegram 日志和统计机器人。
项目描述
电报统计机器人
Telegram-stats-bot 是一个简单的机器人,它存在于您的 Telegram 组中,将消息记录到 Postgresql 数据库,并将统计表和图表作为 Telegram 消息提供给用户。
目录
介绍
该软件旨在在服务器上运行,使用优秀的Python-telegram-bot库为每个频道单个机器人处理更新(如果有兴趣,可以在某个时候添加多频道支持) 。
该机器人仍在积极开发中,但目前具有以下特点:
使用可选 JSON 文件备份将消息记录到 Postgresql 数据库
组中用户的统计输出作为电报消息,可选择按日期过滤或限制查询用户。有些统计数据比其他统计数据更有用,但它们主要是为了让用户玩得开心。
表:
最活跃用户
一个用户与其他用户的消息时间相关性
一个用户与其他用户的消息时间差中值
情节:
一天中每小时的消息活动
按星期几的消息活动
一周内按小时和按天的消息活动
消息活动历史
基本要求
Python 3.8+
禁用隐私模式的电报机器人令牌(需要记录消息)
详情见这里_
Postgresql(用 12.3 测试,但不应该有任何东西不适用于 9.4 或更高版本)
这可以在与电报统计机器人不同的系统上,并且需要数据库上的表创建权限,或者可以按照db.py中的设置预先初始化数据库
安装
安装或升级最简单的方法是使用 pip:
$ pip install telegram-stats-bot --upgrade
这也可以直接从 git 存储库中工作:
$ pip install --upgrade git+https://github.com/mkdryden/telegram-stats-bot
或者您可以使用诗歌安装整个 venv 进行开发:
$ git clone https://github.com/mkdryden/telegram-stats-bot.git
$ cd telegram-stats-bot
$ poetry install
码头工人
Docker 映像位于mkdryden/telegram-stats-bot下,示例docker-compose.yml位于存储库的根目录中,包括数据库设置。请务必在docker -run命令或docker-compose.yml文件中适当地设置TZ、BOT_TOKEN和CHAT_ID环境变量。
设置
安装后,您可以通过使用一些必需参数调用主模块来运行机器人:
$ python -m telegram_stats_bot.main BOT_TOKEN CHAT_ID POSTGRESQL_URL
BOT_TOKEN:您的机器人令牌,例如110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
CHAT_ID:要监控的聊天ID(将是一个大整数,可能为负数,如果未知,设置为0,见下文)
POSTGRESQL_URL : 形式的连接信息:postgresql://USERNAME:PASSWORD@ADDRESS/DB_NAME
如果 DB_NAME 存在,则不能有名为messages_utc、user_events或user_names 列的表不正确
还存在两个可选参数:
json-path:在此处指定路径会将消息记录到除数据库之外的 json 文件。如果只指定了一个前缀,它们将保存在您平台的首选应用程序数据目录中的该前缀下。这主要用于开发目的,在正常使用中不是必需的。
tz:在此处指定一个 tz 数据库时区字符串(例如America/New_York)以返回该时区的统计查询。(默认为Etc./UTC)
一个完整的命令可能如下所示:
$ python -m telegram_stats_bot.main --tz="America/Toronto" "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw" "postgresql://telegram:CoolPassword@localhost/telegram_bot"
启动时,机器人将尝试创建数据库和表(如果它们尚不存在)。如果你不知道聊天的 id 并且如上所述设置为 0,你可以在群内发送/chatid命令,机器人会回复它,然后用 id 重新启动机器人。如果您忘记禁用隐私模式,则会在终端中记录错误。
该机器人现在将记录该组中的所有消息,但只会响应发送了之前已记录的消息的用户(并且此列表仅每小时更新一次,因此如果您不耐烦,可以重新启动机器人在您发送消息触发更新后)。您可以通过查看终端输出来查看是否正确记录了消息。每当记录消息时,您应该会看到类似2020-06-04 02:08:39,212 - __main__ - INFO - 8的行。
获取统计信息
要获取统计信息,只需使用/stats命令 在正在记录的组内或直接消息中向机器人发送消息 。不带参数的/stats打印最活跃用户的表格,其他统计信息可通过各种子命令获得。所有命令都记录在案,并且可以使用/stats -h或stats <subcommand> -h显示内置帮助。
大多数命令都有改变输出行为的可选参数。几乎所有人都有:
-start和-end后跟时间戳(例如,2019、2019-01、2019-01-01、“2019-01-01 14:21”)指定要获取的数据范围,否则将使用所有可用数据. 可以给出一个或两个选项。
-lquery后跟一个词法查询(使用 Postgres 的 tsquery 语法)将结果限制为匹配的消息。
-me计算发送命令的用户的统计信息,而不是所有聊天用户。
每个可用子命令的示例输出如下。
计数
/stats counts返回组中最活跃用户的列表。
User Total Messages Percent
@ACoolUser 42150 7.0
@NumberOne 37370 6.2
@WinstonChurchill 32668 5.4
@AAAAAAA 32134 5.4
@WhereAreMyManners 30481 5.1
@TheWorstOfTheBest 28705 4.8
小时
/stats hours返回一天中各小时的消息频率图。
天
/stats days返回一周中各天的消息频率图。
星期
/stats week按星期几和一天中的小时返回数据周期内的总消息图。
历史
/stats history返回消息与日期的关系图。
标题
/stats title返回一个组标题随时间变化的图。
用户
/stats user返回用户的基本统计信息。
Messages sent: 16711
Average messages per day: 12.31
First message was 1357.22 days ago.
Usernames on record: 3
Average username lifetime: 452.41 days
joined on 2017-10-01 16:11:08-04:00
更正
/stats corr返回与请求用户具有最高和最低消息时间相关性的用户列表。
User Correlations for @TheManWhoWasThursday
HIGHEST CORRELATION:
@MyGoodFriend 0.335
@Rawr 0.302
@MangesUnePoutine 0.284
@GreenBlood 0.251
@TooMuchVacuum 0.235
LOWEST CORRELATION:
@Shiny 0.146
@BlueDog 0.142
@CoolCat 0.122
@EatMe 0.116
@JustPassingBy 0.106
三角洲
/stats delta返回与请求用户的消息时间差异最短的用户列表。
Median message delays for @KingLeer and:
@PolyamorousPasta 00:03:23
@AggressiveArgon 00:04:43
@AdjectiveNoun 00:08:27
@SuperSalad 00:09:05
@ABoredProgrammer 00:09:06
类型
/stats types按类型返回消息表,将请求用户与完整组进行比较。
Messages by type, @AUser vs group:
type Group Count Group Percent User Count User Percent
text 528813.0 88.3 13929.0 83.4
sticker 34621.0 5.8 1226.0 7.3
photo 25995.0 4.3 1208.0 7.2
animation 6983.0 1.2 274.0 1.6
video 1325.0 0.2 48.0 0.3
voice 475.0 0.1 2.0 0.0
location 252.0 0.0 2.0 0.0
video_note 84.0 0.0 1.0 0.0
audio 62.0 0.0 1.0 0.0
poll 29.0 0.0 1.0 0.0
document 1.0 0.0 1.0 0.0
Total 598640.0 100.0 16693.0 100.0
字
/stats words返回最常用词位表
Most frequently used lexemes:
Lexeme Messages Uses
like 1265 1334
well 753 765
actual 628 645
make 600 619
yeah 609 609
mean 544 553
thing 473 490
realli 472 482
though 467 470
peopl 415 445
think 425 433
know 403 409
need 396 408
time 371 389
want 354 371
would 345 366
much 345 357
probabl 348 356
even 331 338
stuff 318 332
随机的
/stats random从数据库中打印一条随机消息。
未来
Telegram-stats-bot 正在进行中。将添加新的统计信息,但如果 Telegram 的消息结构发生更改或我需要更改某些内容以使新的统计信息正常工作,则无法保证数据库结构将保持不变。
执照
Telegram-stats-bot 是免费软件:您可以根据GNU 通用公共许可证 v3.0 或更高版本的条款重新分发和/或修改它 。衍生作品也必须在 GPL v3 或更高版本下重新分发。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。