kopia lustrzana https://github.com/mkdryden/telegram-stats-bot
Add README.rst
rodzic
d51d4d7399
commit
5e9395fc0f
267
README.rst
267
README.rst
|
@ -0,0 +1,267 @@
|
||||||
|
==================
|
||||||
|
telegram-stats-bot
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/v/telegram-stats-bot?style=flat-square
|
||||||
|
:target: https://pypi.org/project/telegram-stats-bot/
|
||||||
|
:alt: PyPi Package Version
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/pyversions/telegram-stats-bot?style=flat-square
|
||||||
|
:target: https://pypi.org/project/telegram-stats-bot/
|
||||||
|
:alt: Supported Python versions
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/commit-activity/m/mkdryden/telegram-stats-bot?style=flat-square
|
||||||
|
:target: https://github.com/mkdryden/telegram-stats-bot
|
||||||
|
:alt: GitHub Commit Activity
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/v/telegram-stats-bot?style=flat-square
|
||||||
|
:target: https://pypi.org/project/telegram-stats-bot/
|
||||||
|
:alt: PyPi Package Version
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/l/telegram-stats-bot?style=flat-square
|
||||||
|
:target: https://www.gnu.org/licenses/gpl-3.0-or-later.html
|
||||||
|
:alt: LGPLv3 License
|
||||||
|
|
||||||
|
|
||||||
|
Telegram-stats-bot is a simple bot that lives in your Telegram group, logging messages to a Postgresql database and
|
||||||
|
serving statistical tables and plots to users as Telegram messages.
|
||||||
|
|
||||||
|
.. image:: examples/chat_example.png
|
||||||
|
:alt: Bot conversation example
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
Table of contents
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
- `Introduction`_
|
||||||
|
|
||||||
|
- `Basic Requirements`_
|
||||||
|
|
||||||
|
- `Installation`_
|
||||||
|
|
||||||
|
- `Setup`_
|
||||||
|
|
||||||
|
- `Fetching Stats`_
|
||||||
|
|
||||||
|
- `counts`_
|
||||||
|
|
||||||
|
- `hours`_
|
||||||
|
|
||||||
|
- `days`_
|
||||||
|
|
||||||
|
- `week`_
|
||||||
|
|
||||||
|
- `history`_
|
||||||
|
|
||||||
|
- `corr`_
|
||||||
|
|
||||||
|
- `delta`_
|
||||||
|
|
||||||
|
- `License`_
|
||||||
|
|
||||||
|
------------
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
This software is intended to be run on a server, handling updates for a bot user with a single bot per channel
|
||||||
|
(multi-channel support could be added at some point if there is interest), using the excellent
|
||||||
|
`Python-telegram-bot <https://github.com/python-telegram-bot/python-telegram-bot>`_ library.
|
||||||
|
|
||||||
|
The bot is still in active development but at the moment, it features:
|
||||||
|
|
||||||
|
- Message logging to Postgresql database with optional JSON file backup
|
||||||
|
|
||||||
|
- Statistics output for users in group as Telegram messages, with optional filtering by date or limiting to the querying
|
||||||
|
user.
|
||||||
|
Some statistics are more useful than others, but they are mainly intended to be fun for users to play with.
|
||||||
|
|
||||||
|
- Tables:
|
||||||
|
|
||||||
|
- Most active users
|
||||||
|
|
||||||
|
- A user's message time correlation with other users
|
||||||
|
|
||||||
|
- A user's median message time difference with other users
|
||||||
|
|
||||||
|
- Plots:
|
||||||
|
|
||||||
|
- Message activity by hour of day
|
||||||
|
|
||||||
|
- Message activity by day of week
|
||||||
|
|
||||||
|
- Message activity over the week by hour and day
|
||||||
|
|
||||||
|
- Message activity history
|
||||||
|
|
||||||
|
------------------
|
||||||
|
Basic Requirements
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Python 3.7+
|
||||||
|
|
||||||
|
- A Telegram bot token with privacy mode disabled (needed to log messages)
|
||||||
|
|
||||||
|
- See `here <https://core.telegram.org/bots#6-botfather>`_ for details
|
||||||
|
|
||||||
|
- Postgresql (Tested with 12.3, but there shouldn't be anything that won't work with 9.4 or up)
|
||||||
|
|
||||||
|
- This can be on a different system than telegram-stats-bot and requires either table creation permissions on a
|
||||||
|
database or database can be pre-initialized following the setup in ``db.py``
|
||||||
|
|
||||||
|
------------
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
The easiest way to install or upgrade is with pip:
|
||||||
|
|
||||||
|
.. code:: shell
|
||||||
|
|
||||||
|
$ pip install telegram-stats-bot --upgrade
|
||||||
|
|
||||||
|
Or you can install the latest git version:
|
||||||
|
|
||||||
|
.. code:: shell
|
||||||
|
|
||||||
|
$ pip install git+git://github.com/mkdryden/telegram-stats-bot.git
|
||||||
|
|
||||||
|
Installing directly with ``setup.py`` should also work.
|
||||||
|
|
||||||
|
-----
|
||||||
|
Setup
|
||||||
|
-----
|
||||||
|
Once installed, you can run the bot by calling the ``main`` module with a few required arguments:
|
||||||
|
|
||||||
|
.. code:: shell
|
||||||
|
|
||||||
|
$ python -m telegram_stats_bot.main BOT_TOKEN CHAT_ID POSTGRESQL_URL
|
||||||
|
|
||||||
|
- BOT_TOKEN: Your bot's token e.g., ``110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw``
|
||||||
|
|
||||||
|
- CHAT_ID: The chat id to monitor (will be a large integer, possibly negative, if unknown, set to 0 and see below)
|
||||||
|
|
||||||
|
- POSTGRESQL_URL: Connection information in the form: ``postgresql://USERNAME:PASSWORD@ADDRESS/DB_NAME``
|
||||||
|
|
||||||
|
- if DB_NAME exists, there must not be tables called ``messages_utc``, ``user_events``, or ``user_names``
|
||||||
|
with incorrect columns
|
||||||
|
|
||||||
|
On startup, the bot will attempt to create the database and tables, if they do not already exist.
|
||||||
|
If you do not know the chat's id and have set it to 0 as mentioned above, you can send the ``/chatid`` command inside
|
||||||
|
the group, and the bot will reply with it, then restart the bot with the id.
|
||||||
|
If you have forgotten to disable privacy mode, an error will be logged in the terminal.
|
||||||
|
|
||||||
|
The bot will now log all messages in the group, but will only respond to users who have sent a message that has been
|
||||||
|
logged previously (and this list is only updated once an hour, so if you're impatient, you can restart the bot after
|
||||||
|
you've sent a message to trigger the update).
|
||||||
|
You can see if messages are being logged correctly by reviewing the terminal output.
|
||||||
|
You should see a line like ``2020-06-04 02:08:39,212 - __main__ - INFO - 8``, whenever a message is logged.
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Fetching Stats
|
||||||
|
--------------
|
||||||
|
To fetch stats, simply message the bot, either inside the group being logged, or in a direct message, using the
|
||||||
|
``/stats`` command.
|
||||||
|
``/stats`` with no arguments prints the table of most active users and other statistics are available through various
|
||||||
|
subcommands.
|
||||||
|
All commands are documented and the built in help can be displayed with ``/stats -h`` or ``stats <subcommand> -h``.
|
||||||
|
|
||||||
|
Most commands have optional arguments that change the behaviour of the output.
|
||||||
|
Nearly all have:
|
||||||
|
|
||||||
|
- ``-start`` and ``-end`` followed by a timestamp (e.g., 2019, 2019-01, 2019-01-01, "2019-01-01 14:21") specify the
|
||||||
|
range of data to fetch, otherwise all available data will be used.
|
||||||
|
Either or both options can be given.
|
||||||
|
|
||||||
|
- ``-me`` calculates statistics for the user sending the command, rather than all chat users.
|
||||||
|
|
||||||
|
Sample outputs of each available subcommand follow.
|
||||||
|
|
||||||
|
counts
|
||||||
|
------
|
||||||
|
``/stats counts`` returns a list of the most active users in the group.
|
||||||
|
|
||||||
|
.. code::
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
hours
|
||||||
|
-----
|
||||||
|
``/stats hours`` returns a plot of message frequency for the hours of the day.
|
||||||
|
|
||||||
|
.. image:: examples/hours.jpg
|
||||||
|
:alt: Example of hours plot
|
||||||
|
|
||||||
|
days
|
||||||
|
----
|
||||||
|
``/stats days`` returns a plot of message frequency for the days of the week.
|
||||||
|
|
||||||
|
.. image:: examples/days.jpg
|
||||||
|
:alt: Example of days plot
|
||||||
|
|
||||||
|
week
|
||||||
|
----
|
||||||
|
``/stats week`` returns a plot of total messages over the data period by day of week and hour of day.
|
||||||
|
|
||||||
|
.. image:: examples/week.jpg
|
||||||
|
:alt: Example of week plot
|
||||||
|
|
||||||
|
history
|
||||||
|
-------
|
||||||
|
``/stats history`` returns a plot of messages versus date.
|
||||||
|
|
||||||
|
.. image:: examples/history.jpg
|
||||||
|
:alt: Example of history plot
|
||||||
|
|
||||||
|
corr
|
||||||
|
----
|
||||||
|
``/stats corr`` returns a list of users with the highest and lowest message time correlations with the requesting user.
|
||||||
|
|
||||||
|
.. code::
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
delta
|
||||||
|
-----
|
||||||
|
``/stats delta`` returns a list of users with the shortest differences in message times with the requesting user.
|
||||||
|
|
||||||
|
.. code::
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
----------
|
||||||
|
The Future
|
||||||
|
----------
|
||||||
|
Telegram-stats-bot is a work in progress.
|
||||||
|
New stats will be added, but no guarantees that the database structure will stay constant if Telegram's message
|
||||||
|
structure changes or I need to change something to make a new statistic work.
|
||||||
|
|
||||||
|
=======
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
Telegram-stats-bot is free software:
|
||||||
|
You can redistribute it and/or modify it under the terms of the
|
||||||
|
`GNU General Public License v3.0 or later <https://www.gnu.org/licenses/gpl-3.0.html>`_.
|
||||||
|
Derivative works must also be redistributed under the GPL v3 or later.
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 187 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 32 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 34 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 46 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 34 KiB |
Ładowanie…
Reference in New Issue