Python library for Odnoklassniki (ok.ru) bots
📦 What is pyokbot?
pyokbot is the only Python library for building bots in Odnoklassniki (ok.ru). You just write handlers and send messages.
import asyncio
from pyokbot import Vanus
async def main():
bot = Vanus("YOUR_AUTHCODE")
await bot.run()
@bot.on_message(commands=["ping"])
async def ping(message):
await bot.send_reply(message, "pong!")
await bot.polling()
asyncio.run(main())
A bot that replies to
/pingwithpong!in ~10 lines of code.
✨ Features
| Feature | Description |
|---|---|
| ⚡ Real-time | Messages arrive as soon as they're sent |
| 🔧 Commands | @bot.on_message(commands=["start"]) handles /start |
| 🎯 Filters | Route by content type, text, or sender (user/bot) |
| 🖼️ Media | Send photos, videos, files, voice messages |
| 📝 HTML | Bold, italic, code, headings, links with parse_mode="html" |
| 👥 Chat admin | Pin, edit, delete, clear, change title/photo, kick |
| ⌨️ Typing | Show "bot is typing..." before responding |
| 🔁 Auto-reconnect | Reconnects when connection drops |
| 💾 Cache | User profiles cached with 1-hour TTL |
| 🧹 Clean shutdown | Ctrl+C handled gracefully |
🚀 Quick start
Install
pip install pyokbot
Python 3.9+. You need an AUTHCODE cookie from ok.ru - see the docs for how to get one.
Echo bot
import asyncio
from pyokbot import Vanus
async def main():
bot = Vanus("YOUR_AUTHCODE")
await bot.run()
@bot.on_message(filters="user")
async def echo(message):
await bot.send_reply(message, f"You said: {message.text}")
await bot.polling()
asyncio.run(main())
python bot.py
🎮 What it can do
📋 Commands - trigger on /start, /help, etc.
@bot.on_message(commands=["start"])
async def start(message):
await bot.send_message(message.chat.id, "Welcome!")
@bot.on_message(commands=["help"])
async def help(message):
await bot.send_message(message.chat.id, "Available: /start, /help, /ping")
🎯 Filters - route by content type or text
@bot.on_message(filters="user", content_types=["photo"])
async def on_photo(message):
await bot.send_reply(message, "Nice pic!")
@bot.on_message(filters="user", text="hello")
async def on_hello(message):
await bot.send_reply(message, "Hi there!")
🖼️ Media - send photos, videos, files, voice
await bot.send_photo(message.chat.id, "https://example.com/cat.jpg", caption="cat")
await bot.send_video(message.chat.id, "video.mp4")
await bot.send_file(message.chat.id, "report.pdf", title="Report")
await bot.send_voice(message.chat.id, "message.ogg")
📝 HTML formatting - bold, italic, code, links
await bot.send_message(
message.chat.id,
"<b>bold</b> <i>italic</i> <code>code</code> <a href='https://ok.ru'>link</a>",
parse_mode="html",
)
👥 Chat management - pin, edit, kick, clear
await bot.pin_chat_message(chat_id, msg_id)
await bot.edit_message_text(chat_id, msg_id, "new text")
await bot.clear_chat_history(chat_id, for_all=True)
await bot.change_chat_title(chat_id, "New Name")
await bot.delete_member(chat_id, member_id="12345")
⌨️ Typing indicator - "bot is typing..."
await bot.writing_emulation(message.chat.id)
await asyncio.sleep(1)
await bot.send_reply(message, "done!")
🧠 How handlers work
Handlers are checked in registration order. The first match wins.
@bot.on_message(commands=["start"]) # checked first
@bot.on_message(commands=["help"]) # checked second
@bot.on_message(filters="user") # catch-all, checked last
The message object has attribute-style access:
| Field | Type | Description |
|---|---|---|
message.text |
str |
Text content |
message.chat.id |
str |
Chat ID |
message.user.id |
str |
Sender ID |
message.id |
str |
Message ID |
message.photo |
list |
Photo attachments |
message.video |
list |
Video attachments |
message.audio |
dict |
Voice attachment |
message.document |
dict |
File attachment |
message.is_reply |
bool |
Is this a reply? |
message.reply |
dict |
Replied-to message |
🔧 Examples
Ready-to-run bots in the examples/ directory:
| Bot | What it does |
|---|---|
echobot.py |
Echo commands, photos, videos, text |
media_bot.py |
Send photos, videos, files, voice |
filter_demo_bot.py |
All filter types (commands, text, content-type) |
html_demo_bot.py |
HTML formatting with all tags |
chat_admin_bot.py |
Pin, edit, clear, kick, change title |
python examples/echobot.py YOUR_AUTHCODE
📚 Documentation
Full docs: SangoAlgo.github.io/pyokbot
📄 License
MIT - see LICENSE.
Metadata
Release files for pyokbot 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyokbot-1.0.3.tar.gz | 37.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyokbot-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.2 kB
Release files / pyokbot-1.0.3.tar.gz
| Download URL | pyokbot-1.0.3.tar.gz |
|---|---|
| Size | 37.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ffad14ae1221d55c782cd33441eff96075315ff481be7a2fc92b0ae11788825e
|
|
BLAKE2b-256 checksum How to use checksums |
eb98bcacada6b0b22c3d626158f3e6192d6abb949ea64954e656a4d4303579e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / pyokbot-1.0.3-py3-none-any.whl
| Download URL | pyokbot-1.0.3-py3-none-any.whl |
|---|---|
| Size | 19.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e6a157f067ec56e1c81efa9bf67bcc220ca945665ee5b609fb026652c431360b
|
|
BLAKE2b-256 checksum How to use checksums |
6aa367c7515139b67c6637b24bb18815dd9214f302cdea35b84f962adfee66e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|