Добавлены примеры и обновлена модель Update
This commit is contained in:
24
examples/echo/main.py
Normal file
24
examples/echo/main.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from maxapi import Bot, Dispatcher
|
||||
from maxapi.filters import F
|
||||
from maxapi.types import MessageCreated
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
bot = Bot('тут_ваш_токен')
|
||||
dp = Dispatcher()
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text)
|
||||
async def echo(event: MessageCreated):
|
||||
await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
|
||||
|
||||
|
||||
async def main():
|
||||
await dp.start_polling(bot)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
122
examples/events/main.py
Normal file
122
examples/events/main.py
Normal file
@@ -0,0 +1,122 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from maxapi import Bot, Dispatcher
|
||||
from maxapi.types import (
|
||||
BotStarted,
|
||||
Command,
|
||||
MessageCreated,
|
||||
CallbackButton,
|
||||
MessageCallback,
|
||||
BotAdded,
|
||||
ChatTitleChanged,
|
||||
MessageEdited,
|
||||
MessageRemoved,
|
||||
UserAdded,
|
||||
UserRemoved
|
||||
)
|
||||
from maxapi.utils.inline_keyboard import InlineKeyboardBuilder
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
bot = Bot('тут_ваш_токен')
|
||||
dp = Dispatcher()
|
||||
|
||||
|
||||
@dp.message_created(Command('start'))
|
||||
async def hello(event: MessageCreated):
|
||||
builder = InlineKeyboardBuilder()
|
||||
|
||||
builder.row(
|
||||
CallbackButton(
|
||||
text='Кнопка 1',
|
||||
payload='btn_1'
|
||||
),
|
||||
CallbackButton(
|
||||
text='Кнопка 2',
|
||||
payload='btn_2',
|
||||
)
|
||||
)
|
||||
builder.add(
|
||||
CallbackButton(
|
||||
text='Кнопка 3',
|
||||
payload='btn_3',
|
||||
)
|
||||
)
|
||||
|
||||
await event.message.answer(
|
||||
text='Привет!',
|
||||
attachments=[
|
||||
builder.as_markup(),
|
||||
] # Для MAX клавиатура это вложение,
|
||||
) # поэтому она в списке вложений
|
||||
|
||||
|
||||
@dp.bot_added()
|
||||
async def bot_added(event: BotAdded):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat.id,
|
||||
text=f'Привет чат {event.chat.title}!'
|
||||
)
|
||||
|
||||
|
||||
@dp.message_removed()
|
||||
async def message_removed(event: MessageRemoved):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text='Я всё видел!'
|
||||
)
|
||||
|
||||
|
||||
@dp.bot_started()
|
||||
async def bot_started(event: BotStarted):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text='Привет! Отправь мне /start'
|
||||
)
|
||||
|
||||
|
||||
@dp.chat_title_changed()
|
||||
async def chat_title_changed(event: ChatTitleChanged):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text=f'Крутое новое название "{event.chat.title}!"'
|
||||
)
|
||||
|
||||
|
||||
@dp.message_callback()
|
||||
async def message_callback(event: MessageCallback):
|
||||
await event.answer(
|
||||
new_text=f'Вы нажали на кнопку {event.callback.payload}!'
|
||||
)
|
||||
|
||||
|
||||
@dp.message_edited()
|
||||
async def message_edited(event: MessageEdited):
|
||||
await event.message.answer(
|
||||
text='Вы отредактировали сообщение!'
|
||||
)
|
||||
|
||||
|
||||
@dp.user_removed()
|
||||
async def user_removed(event: UserRemoved):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text=f'{event.from_user.first_name} кикнул {event.user.first_name} 😢'
|
||||
)
|
||||
|
||||
|
||||
@dp.user_added()
|
||||
async def user_added(event: UserAdded):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text=f'Чат "{event.chat.title}" приветствует вас, {event.user.first_name}!'
|
||||
)
|
||||
|
||||
|
||||
async def main():
|
||||
await dp.start_polling(bot)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
48
examples/magic_filters/magic_filters.py
Normal file
48
examples/magic_filters/magic_filters.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from maxapi import Bot, Dispatcher, F
|
||||
from maxapi.types import MessageCreated
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
bot = Bot('тут_ваш_токен')
|
||||
dp = Dispatcher()
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text == 'привет')
|
||||
async def on_hello(event: MessageCreated):
|
||||
await event.message.answer('Привет!')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text.lower().contains('помощь'))
|
||||
async def on_help(event: MessageCreated):
|
||||
await event.message.answer('Чем могу помочь?')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text.regexp(r'^\d{4}$'))
|
||||
async def on_code(event: MessageCreated):
|
||||
await event.message.answer('Принят 4-значный код')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.attachments)
|
||||
async def on_attachment(event: MessageCreated):
|
||||
await event.message.answer('Получено вложение')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text.len() > 20)
|
||||
async def on_long_text(event: MessageCreated):
|
||||
await event.message.answer('Слишком длинное сообщение')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text.len() > 0)
|
||||
async def on_non_empty(event: MessageCreated):
|
||||
await event.message.answer('Вы что-то написали.')
|
||||
|
||||
|
||||
async def main():
|
||||
await dp.start_polling(bot)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
BIN
examples/router_with_input_media/audio.mp3
Normal file
BIN
examples/router_with_input_media/audio.mp3
Normal file
Binary file not shown.
162
examples/router_with_input_media/main.py
Normal file
162
examples/router_with_input_media/main.py
Normal file
@@ -0,0 +1,162 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from maxapi import Bot, Dispatcher, F
|
||||
from maxapi.context import MemoryContext, State, StatesGroup
|
||||
from maxapi.types import BotStarted, Command, MessageCreated, CallbackButton, MessageCallback, BotCommand
|
||||
from maxapi.utils.inline_keyboard import InlineKeyboardBuilder
|
||||
|
||||
from router import router
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
bot = Bot('тут_ваш_токен')
|
||||
dp = Dispatcher()
|
||||
dp.include_routers(router)
|
||||
|
||||
|
||||
start_text = '''Пример чат-бота для MAX 💙
|
||||
|
||||
Мои команды:
|
||||
|
||||
/clear очищает ваш контекст
|
||||
/state или /context показывают ваше контекстное состояние
|
||||
/data показывает вашу контекстную память
|
||||
'''
|
||||
|
||||
|
||||
class Form(StatesGroup):
|
||||
name = State()
|
||||
age = State()
|
||||
|
||||
|
||||
@dp.on_started()
|
||||
async def _():
|
||||
logging.info('Бот стартовал!')
|
||||
|
||||
|
||||
@dp.bot_started()
|
||||
async def bot_started(event: BotStarted):
|
||||
await event.bot.send_message(
|
||||
chat_id=event.chat_id,
|
||||
text='Привет! Отправь мне /start'
|
||||
)
|
||||
|
||||
|
||||
@dp.message_created(Command('clear'))
|
||||
async def hello(event: MessageCreated, context: MemoryContext):
|
||||
await context.clear()
|
||||
await event.message.answer(f"Ваш контекст был очищен!")
|
||||
|
||||
|
||||
@dp.message_created(Command('data'))
|
||||
async def hello(event: MessageCreated, context: MemoryContext):
|
||||
data = await context.get_data()
|
||||
await event.message.answer(f"Ваша контекстная память: {str(data)}")
|
||||
|
||||
|
||||
@dp.message_created(Command('context'))
|
||||
@dp.message_created(Command('state'))
|
||||
async def hello(event: MessageCreated, context: MemoryContext):
|
||||
data = await context.get_state()
|
||||
await event.message.answer(f"Ваше контекстное состояние: {str(data)}")
|
||||
|
||||
|
||||
@dp.message_created(Command('start'))
|
||||
async def hello(event: MessageCreated):
|
||||
builder = InlineKeyboardBuilder()
|
||||
|
||||
builder.row(
|
||||
CallbackButton(
|
||||
text='Ввести свое имя',
|
||||
payload='btn_1'
|
||||
),
|
||||
CallbackButton(
|
||||
text='Ввести свой возраст',
|
||||
payload='btn_2'
|
||||
)
|
||||
)
|
||||
builder.row(
|
||||
CallbackButton(
|
||||
text='Не хочу',
|
||||
payload='btn_3'
|
||||
)
|
||||
)
|
||||
|
||||
await event.message.answer(
|
||||
text=start_text,
|
||||
attachments=[
|
||||
builder.as_markup(),
|
||||
] # Для MAX клавиатура это вложение,
|
||||
) # поэтому она в списке вложений
|
||||
|
||||
|
||||
@dp.message_callback(F.callback.payload == 'btn_1')
|
||||
async def hello(event: MessageCallback, context: MemoryContext):
|
||||
await context.set_state(Form.name)
|
||||
await event.message.delete()
|
||||
await event.message.answer(f'Отправьте свое имя:')
|
||||
|
||||
|
||||
@dp.message_callback(F.callback.payload == 'btn_2')
|
||||
async def hello(event: MessageCallback, context: MemoryContext):
|
||||
await context.set_state(Form.age)
|
||||
await event.message.delete()
|
||||
await event.message.answer(f'Отправьте ваш возраст:')
|
||||
|
||||
|
||||
@dp.message_callback(F.callback.payload == 'btn_3')
|
||||
async def hello(event: MessageCallback, context: MemoryContext):
|
||||
await event.message.delete()
|
||||
await event.message.answer(f'Ну ладно 🥲')
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text, Form.name)
|
||||
async def hello(event: MessageCreated, context: MemoryContext):
|
||||
await context.update_data(name=event.message.body.text)
|
||||
|
||||
data = await context.get_data()
|
||||
|
||||
await event.message.answer(f"Приятно познакомиться, {data['name'].title()}!")
|
||||
|
||||
|
||||
@dp.message_created(F.message.body.text, Form.age)
|
||||
async def hello(event: MessageCreated, context: MemoryContext):
|
||||
await context.update_data(age=event.message.body.text)
|
||||
|
||||
await event.message.answer(f"Ого! А мне всего пару недель 😁")
|
||||
|
||||
|
||||
async def main():
|
||||
await bot.set_my_commands(
|
||||
BotCommand(
|
||||
name='/start',
|
||||
description='Перезапустить бота'
|
||||
),
|
||||
BotCommand(
|
||||
name='/clear',
|
||||
description='Очищает ваш контекст'
|
||||
),
|
||||
BotCommand(
|
||||
name='/state',
|
||||
description='Показывают ваше контекстное состояние'
|
||||
),
|
||||
BotCommand(
|
||||
name='/data',
|
||||
description='Показывает вашу контекстную память'
|
||||
),
|
||||
BotCommand(
|
||||
name='/context',
|
||||
description='Показывают ваше контекстное состояние'
|
||||
)
|
||||
)
|
||||
await dp.start_polling(bot)
|
||||
# await dp.handle_webhook(
|
||||
# bot=bot,
|
||||
# host='localhost',
|
||||
# port=8080
|
||||
# )
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
24
examples/router_with_input_media/router.py
Normal file
24
examples/router_with_input_media/router.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from maxapi import F, Router
|
||||
from maxapi.types import Command, MessageCreated
|
||||
from maxapi.types import InputMedia
|
||||
|
||||
router = Router()
|
||||
file = __file__.split('\\')[-1]
|
||||
|
||||
|
||||
@router.message_created(Command('router'))
|
||||
async def hello(obj: MessageCreated):
|
||||
await obj.message.answer(f"Пишу тебе из роута {file}")
|
||||
|
||||
|
||||
# новая команда для примера, /media,
|
||||
# пример использования: /media image.png (медиафайл берется указанному пути)
|
||||
@router.message_created(Command('media'))
|
||||
async def hello(event: MessageCreated):
|
||||
await event.message.answer(
|
||||
attachments=[
|
||||
InputMedia(
|
||||
path=event.message.body.text.replace('/media ', '')
|
||||
)
|
||||
]
|
||||
)
|
Reference in New Issue
Block a user