Python library for Odnoklassniki (ok.ru) bots
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.
| 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 |
pip install pyokbotPython 3.9+. You need an AUTHCODE cookie from ok.ru - see the docs for how to get one.
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📋 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!")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 lastThe 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 |
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_AUTHCODEFull docs: SangoAlgo.github.io/pyokbot
MIT - see LICENSE.