Skip to main content

基于 python-telegram-bot 的 Telegram 日志和统计机器人。

项目描述

电报统计机器人

PyPi 包版本 支持的 Python 版本 GitHub 提交活动 LGPLv3 许可证

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文件中适当地设置TZBOT_TOKENCHAT_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_utcuser_eventsuser_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 -hstats <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 或更高版本下重新分发。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

telegram-stats-bot-0.6.4.tar.gz (537.3 kB 查看哈希

已上传 source

内置分布

telegram_stats_bot-0.6.4-py3-none-any.whl (536.2 kB 查看哈希

已上传 py3