Quick Start¶
За 5 минут до первого работающего бота.
Установка¶
pip install -U maxapi-python
Выбор клиента¶
PyMax предоставляет два клиента для подключения к Max API:
- MaxClient (WebSocket) — рекомендуется для большинства приложений:
Используется WebSocket протокол
Вход по QR-коду
Более быстрое подключение
Подходит для ботов, помощников и приложений
- SocketMaxClient (TCP Socket) — для специальных случаев:
Используется TCP Socket протокол
Вход по номеру телефона
Поддерживает регистрацию новых пользователей
Требуется, если вы регистрируете новых пользователей или нужен вход по phone number
Для получения полной информации смотрите Clients.
Первый бот: Echo¶
Самый простой бот — повторяет сообщения пользователя (используя MaxClient):
import asyncio
from pymax import MaxClient
from pymax.types import Message
client = MaxClient(phone="+79001234567")
@client.on_message()
async def echo(message: Message) -> None:
if message.text:
await client.send_message(
chat_id=message.chat_id,
text=f"Echo: {message.text}"
)
if __name__ == "__main__":
asyncio.run(client.start())
Запуск:
python bot.py
При первом запуске вам потребуется отсканировать QR-код из приложения Max.
Фильтры сообщений¶
Обрабатывать только определённые сообщения:
from pymax.filters import Filters
from pymax.types import Message
# Только из конкретного чата
@client.on_message(Filters.chat(123456))
async def handle_chat(message: Message) -> None:
await client.send_message(
chat_id=message.chat_id,
text="Это из моего чата!"
)
# Только с определённым текстом
@client.on_message(Filters.text("привет"))
async def greet(message: Message) -> None:
await client.send_message(
chat_id=message.chat_id,
text="И тебе привет!"
)
Обработчики событий¶
Реагировать на события клиента:
from pymax.types import Message, Chat
@client.on_start()
async def startup() -> None:
print(f"Клиент запущен! ID: {client.me.id}")
@client.on_message_delete()
async def message_deleted(message: Message) -> None:
print(f"Сообщение удалено: {message.id}")
@client.on_chat_update()
async def chat_changed(chat: Chat) -> None:
print(f"Чат обновлен: {chat.title}")
Получение информации¶
Информация о пользователе:
from pymax.types import Message, User
@client.on_message()
async def get_user_info(message: Message) -> None:
user: User | None = await client.get_user(message.sender)
if user:
name = user.names[0].first_name if user.names else "Неизвестно"
await client.send_message(
chat_id=message.chat_id,
text=f"Привет, {name}!"
)
Информация о чате:
from pymax.types import Message, Chat
@client.on_message()
async def get_chat_info(message: Message) -> None:
chat: Chat | None = await client.get_chat(message.chat_id)
if chat:
await client.send_message(
chat_id=message.chat_id,
text=f"Название чата: {chat.title}"
)
История сообщений:
from pymax.filters import Filters
from pymax.types import Message
@client.on_message(Filters.text("история"))
async def fetch_history(message: Message) -> None:
history = await client.fetch_history(
chat_id=message.chat_id,
limit=10
)
text = "Последние 10 сообщений:\n"
for msg in history:
text += f"- {msg.text}\n"
await client.send_message(
chat_id=message.chat_id,
text=text
)
Отправка файлов¶
from pymax.filters import Filters
from pymax.files import File
from pymax.types import Message
@client.on_message(Filters.text("файл"))
async def send_file(message: Message) -> None:
file = File(path="document.pdf")
await client.send_message(
chat_id=message.chat_id,
text="Вот документ",
attachment=file
)
Полный пример: простой помощник¶
import asyncio
from pymax import MaxClient
from pymax.filters import Filters
from pymax.types import Message, User
client = MaxClient(
phone="+79001234567",
work_dir="./cache"
)
@client.on_start()
async def on_start() -> None:
print(f"Помощник запущен! ID: {client.me.id}")
await client.send_message(
chat_id=123456,
text="Я запустился!",
notify=False
)
@client.task(minutes=1)
async def status_check() -> None:
"""Проверка статуса каждую минуту"""
print("Помощник все еще работает!")
@client.on_message(Filters.text("привет"))
async def hello(message: Message) -> None:
user: User | None = await client.get_user(message.sender)
name = user.names[0].first_name if user and user.names else "друг"
await client.send_message(
chat_id=message.chat_id,
text=f"Привет, {name}! 👋"
)
@client.on_message(Filters.text("помощь"))
async def help_command(message: Message) -> None:
help_text = """Доступные команды:
- привет — приветствие
- помощь — показать эту справку
- время — текущее время
"""
await client.send_message(
chat_id=message.chat_id,
text=help_text
)
@client.on_message(Filters.text("время"))
async def time_command(message: Message) -> None:
from datetime import datetime
current_time = datetime.now().strftime("%H:%M:%S")
await client.send_message(
chat_id=message.chat_id,
text=f"Текущее время: {current_time} ⏰"
)
if __name__ == "__main__":
asyncio.run(client.start())
Дальше¶
Смотрите Guides для подробных гайдов
Смотрите Examples для больше примеров
Смотрите Clients для полного справочника методов
Note
Обратитесь к Installation если у вас есть проблемы с установкой.