- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| tests | ||
| yandex_bot | ||
| .gitignore | ||
| LICENSE | ||
| main.py | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
Yandex messenger bot python
It is still under development and it has regular updates, do not forget to update it regularly
Getting started
pip install yandex-bot-py
Depends requests >= 2.32.3
Example
from yandex_bot import Client, Button, Message, User
bot = Client(os.getenv("YANDEX_BOT_KEY"))
@bot.on_message(phrase="/start")
def command_start(message):
btn = Button(text="What is your name", phrase="/name")
bot.send_message("Select an action", login=message.user.login, inline_keyboard=[btn])
@bot.on_message(phrase="/name")
def command_start(message):
bot.send_message("Type your name", login=message.user.login)
bot.register_next_step_handler(message.user.login, type_your_name)
def type_your_name(message):
bot.send_message(f"Your name is {message.text}", login=message.user.login)
bot.run()
Message processing
To process all messages starting with a specific phrase, use decorator @bot.on_message.
Specify in the parameters phrase to handle messages that begin with the specified phrase.
phrasechecks the first word of the text from the user
@bot.on_message(phrase="/start")
def command_start(message):
bot.send_message(f"Hello, {message.user.login}", login=message.user.login)
To send a message use bot.send_message. You can provide chat_id or login there.
bot.send_message("Hello, I'm bot", login=message.user.login)
bot.send_message("Hello, I'm bot", chat_id="12512571242")
inline_keyboard is used to add buttons to a chat with a user. Just create a Button class and provide text (The text on the button).
You can provide phrase for fast binding to the processing function, or you can provide any callback_data to a Button and it will be returned on Message class in callback_data.
btn = Button(text="My button", phrase="/data", callback_data={"foo": "bar", "bar": "foo"})
bot.send_message("Select an action", login=message.user.login, inline_keyboard=[btn])
You can also delete_message() in chats and channels where the bot is located.
Pass the message_id and the login or chat_id to the method. Return message_id deleted message
data = bot.delete_message(12356532, login="test@login.com")
Handling next step
For example, to wait for a response from a user to a question, you can use bot.register_next_step_handler(). This method will store the session with the current user. The method includes:
user_login- the username of the user from whom to wait for the message;callback- the handler function
@bot.on_message(phrase="/name")
def get_user_name(message):
bot.send_message("Type your name", login=message.user.login)
bot.register_next_step_handler(message.user.login, type_your_name)
def type_your_name(message):
bot.send_message(f"Your name is {message.text}", login=message.user.login)
Unhandled messages
To process messages for which no handler is specified, use the decorator @bot.unhandled_message(). By default, messages without a handler are not processed in any way
@bot.unhandled_message()
def unhandled(message: Message):
print(message)
Send file or image
The method allows you to send files to private or group chats.
send_file() example. Returns a dictionary containing the message id and file id
data = bot.send_file("files/test.txt", login="login@login.ru")
send_image() example. Returns the message id with the sent image.
data = bot.send_image("files/test.jpg", login="login@login.ru")
Chats
create_chat()
The method allows you to create a chat or channel, add its description and icon, assign administrators, add members (for the chat) or subscribers (for the channel).
@bot.on_message(phrase="/create_chat")
def command_create_chat(message: Message):
chat = Chat(name="Test chat 1", description="Description")
users = [User(login="login1@login.ru"), User(login="login2@login.ru")]
chat.set_admins(users)
chat_id = bot.create_chat(chat=chat)
change_chat_users()
The method allows you to add and remove participants to the chat, add and remove subscribers to the channel, as well as appoint chat or channel administrators.
data = bot.change_chat_users("3424234", admins=[User(login="login2")],
remove=[User(login="login")])