The userbot I use with some specific features written in Pyrogram.
Commands work only when sent by the user who runs userbot. Default command prefix is ,
unless
overriden in config.
Click to expand full command list
List of userbot commands available:
About:
• about — Shows information about this userbot.
• help [command] — Sends help for all commands or for a specific one.
• stats ['bot'|'short'|'full'] — Shows some statistics about this userbot.
Chat administration:
• chatban|chatrestrict <'reply'|user_id|username|user_group> ['0'|'forever'|timespec] ['*'|perms] [reason...] — Restricts or bans a user in a chat.
• chatcleardel — Kicks Deleted Accounts from the chat.
• chatinvite <user_id|username|user_group> — Invites users to the current chat.
• chatunban <'reply'|user_id|username|user_group> — Unbans a user in a chat.
• <in reply> no_react2ban|noreact2ban — Stops react2ban on the message.
• <in reply> pin ['silent'] — Pins the message.
• <in reply> promote <admin_title...> — Promotes a user to an admin without any rights but with title.
• react2ban — Bans a user whoever reacted to the message.
• <in reply> s_pin ['silent'] — Pins the message silently (without returning the result).
Chat info:
• rndinfo ['photo'|'title'] — Sets random chat photo and/or title.
• rndmsg — Sends a random message from the chat.
Colors:
• color <color_spec> — Sends a specified color sample.
• usercolor [user_id|username|user_group] — Sends a color sample of user's color as shown in clients.
Content converters:
• toaudio — Extracts audio from video.
• togif — Converts a video to a mpeg4 gif.
• tosticker ['png'|'webp'] — Converts a photo to a sticker-ready png or webp.
Dice:
• roll|dice <dice_spec> — Rolls dice according to `d20.roll` syntax.
Download:
• download|dl ['single'|'all'] [filename]... — Downloads a file or files.
Hooks:
• hooklist|hook_list — Lists all available hooks.
• hookshere|hooks_here — Lists enabled hooks in the chat.
Language:
• lang [language_code] — Gets or changes the language of the bot for the current chat.
Messages:
• <in reply> copyhere|cphere|cph — Copies replied message to current chat.
• <in reply> delete|delet|del — Deletes replied message for everyone.
• dump [jq_query...] — Dumps entire message or its attribute specified with `jq` syntax.
• userfirstmsg — Looks for the user's very first message in the chat.
Notes:
• get|note|n <key...> — Sends saved note.
• note_del|ndel <key...> — Deletes saved note.
• notes|ns — Shows all saved notes.
• <in reply> save|note_add|nadd <key...> — Saves replied message as note for later use.
Reactions:
• <in reply> r [emoji] — Reacts to a message with a specified emoji or removes any reaction.
• <in reply> rr — Reacts to a message with a random available emoji.
• <in reply> rs — Gets message reactions with users who reacted to it.
Reminders:
• remind <time> [message...] — Sets a reminder in the chat.
• remindme <time> [message...] — Sets a reminder for myself.
• sremind <time> [message...] — Sets a silent reminder in the chat (no confirmation about scheduled message).
• sremindme <time> [message...] — Sets a silent reminder for myself (no confirmation about scheduled message).
Stickers:
• longcat — Sends random longcat.
• rnds <pack_shortlink|pack_alias|emoji> — Sends random sticker from specified pack or one matching specified emoji.
Text converters:
• <in reply> caps — Toggles capslock on the message.
• <in reply> s <args...> — sed-like replacement.
• <in reply> tr ['en'|'ru'] — Swaps keyboard layout from en to ru or vice versa.
Tools:
• cal [month] [year] — Sends a calendar for a specified month and year.
• calc|eval <python_expr...> — Evaluates Python expression.
• exec <python_code...> — Executes Python code.
• <in reply> id — Sends replied user's ID as link.
User groups:
• usergroupadd|ugadd <group_name> [user_id|username|user_group]... — Adds a user to the user group for later use with user resolving.
• usergroupdel|ugdel <group_name> [user_id|username|user_group]... — Removes a user from the user group.
• usergrouplist|uglist <group_name> ['resolve'] — Lists the users in the user group.
• usergroups|ugs — Lists all user groups.
Triggers can be enabled by .<hookname>here
and disabled by .no<hookname>here
. They are disabled
everywhere by default. To check if a hook is enabled or disabled, use .hookshere
.
emojis
:- Sends a duck emoji (🦆) when someone writes "дак" (pronounced as "duck") or "кря" (pronounces as "krya", English equivalent is "quack")
- Sends a pancake emoji (🥞) when someone writes "блин" (English equivalent is "pancake", also that's how Russian equivalent to the English "f*ck" may be "censored")
tap
: Sends a sticker with a finger touching a seal when someone writes "тык" or sends that sticker itself (link to the pack)mibib
: Sends a sticker (with 20% chance) with an animated pixelated bear when someone sends that sticker itself (link to the pack)bra
: Sends a picture from this Reddit post when someone sends "бра" or "bra"uwu
: Sends a picture when someone sends "uwu", "owo", "уву" or "ово"
Shortcuts work only when sent by the user who runs userbot.
Click to expand full shortcut list
yt:<id>
— Sends a YouTube video with the specified ID@:<id>
— Mentions a user with the specified ID@:<id>:<name>@
— Mentions a user with the specified ID with a custom name
github:<username>
orgh:<username>
— Sends a GitHub link to the specified user's profilegithub:<username>/<repo>
— ... to the specified repo,<repo>
can be "@
" which means "same as<username>
"github:<username>/<repo>:/<path>
— ... to the specified path on the default branchgithub:<username>/<repo>:/<path>#<line1>
— ... to the specified line in filegithub:<username>/<repo>:/<path>#<line1>-<line2>
— ... to the specified lines in filegithub:<username>/<repo>@<branch-or-commit>
— ... to the specified branch or commit of the repogithub:<username>/<repo>@<branch-or-commit>:/<path>
— ... to the specified path on the branch or commitgithub:<username>/<repo>@<branch-or-commit>:/<path>#<line1>
— ... to the specified line in filegithub:<username>/<repo>@<branch-or-commit>:/<path>#<line1>-<line2>
— ... to the specified lines in filegithub:<username>/<repo>#<issue-or-pr>
— ... to the specified issue or pull request
:uwu:
— Sends a🥺👉👈
emoji:uwu<number>:
— Sends a👉👈
emoji with the specified number of finger pairs
google://<query>/
— Sends a link to a Google search for the specified query:shrug:
— Sends a shrug kaomoji¯\_(ツ)_/¯
n://<key>/
— Sends a saved note with the specified keyxkcd:<number>
— Sends a link to XKCD comic with the specified numberpypi://<package>/
orpip://<package>/
— Sends a link to PyPI page of the specified packagetg:<username>/<message-id>
ortg:<username>#<message-id>
— Sends a link to the specified message in the specified chat
- Copy
.env.example
file to.env
and modify for yourself. - Make sure docker is installed, then run
docker-compose build
. - Go through interactive authentication (needed only once as
/data
is mounted as docker volume) by runningdocker-compose run --rm main python -m userbot
. - Stop the script by pressing Ctrl+C as soon as you see
Bot started
message in console. - Run
docker-compose up -d
to run the userbot in the background. - To run migrations, run
docker-compose run --rm --entrypoint /usr/bin/env main python3.11 -m userbot.migrations
. Userbot must be stopped before running any migrations to prevent conflicts.
TODO