A Python library for creating bots in Odnoklassniki (ok.ru) messenger via WebSocket
Project description
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyokbot-1.0.2.tar.gz.
File metadata
- Download URL: pyokbot-1.0.2.tar.gz
- Upload date:
- Size: 37.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
defee84bdeef5218e308aa954f2ba862dc3d1135b4478af5ec4254996b795486
|
|
| MD5 |
fe9ede9b4defeb1d76f8a1fed48cc221
|
|
| BLAKE2b-256 |
bbcfd4ad7f206f7cab8f8830e1710b7b9fd5f4ce4a72c0bcfc1f8de8fa26f819
|
File details
Details for the file pyokbot-1.0.2-py3-none-any.whl.
File metadata
- Download URL: pyokbot-1.0.2-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3dca9d3d8c1d62cbca7b39755f960806c10a049ba8e4a0d91137eb755291c36
|
|
| MD5 |
dad6e6b1fc8e6ea51177d495e788ee6b
|
|
| BLAKE2b-256 |
9e78bc1df28b76288790b626fecabc6aba138c5a976cf3c5e3fe26dbec6c5202
|