2018-06-23 17:39:24 +03:00
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
2019-10-29 21:19:55 +02:00
|
|
|
|
import datetime
|
2017-10-20 18:48:08 +03:00
|
|
|
|
import typing
|
2019-08-04 19:43:07 +03:00
|
|
|
|
import warnings
|
2017-10-22 13:59:45 +03:00
|
|
|
|
|
|
|
|
|
|
from .base import BaseBot, api
|
|
|
|
|
|
from .. import types
|
|
|
|
|
|
from ..types import base
|
2018-10-20 15:55:57 +03:00
|
|
|
|
from ..utils.mixins import DataMixin, ContextInstanceMixin
|
2018-08-13 22:42:10 +03:00
|
|
|
|
from ..utils.payload import generate_payload, prepare_arg, prepare_attachment, prepare_file
|
2017-05-19 21:20:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
2018-10-20 15:55:57 +03:00
|
|
|
|
class Bot(BaseBot, DataMixin, ContextInstanceMixin):
|
2017-10-22 13:59:45 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Base bot class
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2017-10-22 14:09:11 +03:00
|
|
|
|
@property
|
|
|
|
|
|
async def me(self) -> types.User:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Alias for self.get_me() but lazy and with caching.
|
|
|
|
|
|
|
|
|
|
|
|
:return: :class:`aiogram.types.User`
|
|
|
|
|
|
"""
|
|
|
|
|
|
if not hasattr(self, '_me'):
|
|
|
|
|
|
setattr(self, '_me', await self.get_me())
|
|
|
|
|
|
return getattr(self, '_me')
|
|
|
|
|
|
|
|
|
|
|
|
@me.deleter
|
|
|
|
|
|
def me(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
Reset `me`
|
2018-09-07 21:24:13 +03:00
|
|
|
|
|
|
|
|
|
|
.. code-block:: python3
|
|
|
|
|
|
|
|
|
|
|
|
await bot.me
|
|
|
|
|
|
|
|
|
|
|
|
:return: :obj:`aiogram.types.User`
|
2017-10-22 14:09:11 +03:00
|
|
|
|
"""
|
|
|
|
|
|
if hasattr(self, '_me'):
|
|
|
|
|
|
delattr(self, '_me')
|
|
|
|
|
|
|
|
|
|
|
|
async def download_file_by_id(self, file_id: base.String, destination=None,
|
2017-12-10 02:40:59 +02:00
|
|
|
|
timeout: base.Integer = 30, chunk_size: base.Integer = 65536,
|
|
|
|
|
|
seek: base.Boolean = True):
|
2017-10-22 14:09:11 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Download file by file_id to destination
|
|
|
|
|
|
|
|
|
|
|
|
if You want to automatically create destination (:class:`io.BytesIO`) use default
|
|
|
|
|
|
value of destination and handle result of this method.
|
|
|
|
|
|
|
|
|
|
|
|
:param file_id: str
|
|
|
|
|
|
:param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO`
|
|
|
|
|
|
:param timeout: int
|
|
|
|
|
|
:param chunk_size: int
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param seek: bool - go to start of file when downloading is finished
|
2017-10-22 14:09:11 +03:00
|
|
|
|
:return: destination
|
|
|
|
|
|
"""
|
|
|
|
|
|
file = await self.get_file(file_id)
|
2018-03-18 17:51:39 +03:00
|
|
|
|
return await self.download_file(file_path=file.file_path, destination=destination,
|
|
|
|
|
|
timeout=timeout, chunk_size=chunk_size, seek=seek)
|
2017-10-22 14:09:11 +03:00
|
|
|
|
|
|
|
|
|
|
# === Getting updates ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#getting-updates
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def get_updates(self, offset: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
limit: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
timeout: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
allowed_updates:
|
|
|
|
|
|
typing.Union[typing.List[base.String], None] = None) -> typing.List[types.Update]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to receive incoming updates using long polling (wiki).
|
2018-02-11 12:50:28 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
Notes
|
|
|
|
|
|
1. This method will not work if an outgoing webhook is set up.
|
|
|
|
|
|
2. In order to avoid getting duplicate updates, recalculate offset after each server response.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getupdates
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param offset: Identifier of the first update to be returned
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type offset: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param limit: Limits the number of updates to be retrieved
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type limit: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param timeout: Timeout in seconds for long polling
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type timeout: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param allowed_updates: List the types of updates you want your bot to receive
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type allowed_updates: :obj:`typing.Union[typing.List[base.String], None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: An Array of Update objects is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.List[types.Update]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
allowed_updates = prepare_arg(allowed_updates)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2018-10-20 15:55:57 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_UPDATES, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return [types.Update(**update) for update in result]
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_webhook(self, url: base.String,
|
|
|
|
|
|
certificate: typing.Union[base.InputFile, None] = None,
|
|
|
|
|
|
max_connections: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
allowed_updates: typing.Union[typing.List[base.String], None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to specify a url and receive incoming updates via an outgoing webhook.
|
|
|
|
|
|
Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url,
|
|
|
|
|
|
containing a JSON-serialized Update. In case of an unsuccessful request,
|
|
|
|
|
|
we will give up after a reasonable amount of attempts.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setwebhook
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param url: HTTPS url to send updates to. Use an empty string to remove webhook integration
|
|
|
|
|
|
:type url: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param certificate: Upload your public key certificate so that the root certificate in use can be checked
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type certificate: :obj:`typing.Union[base.InputFile, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param max_connections: Maximum allowed number of simultaneous HTTPS connections to the webhook
|
2017-10-22 13:59:45 +03:00
|
|
|
|
for update delivery, 1-100.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type max_connections: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param allowed_updates: List the types of updates you want your bot to receive
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type allowed_updates: :obj:`typing.Union[typing.List[base.String], None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns true
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
allowed_updates = prepare_arg(allowed_updates)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['certificate'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'certificate', certificate)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.SET_WEBHOOK, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def delete_webhook(self) -> base.Boolean:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to remove webhook integration if you decide to switch back to getUpdates.
|
|
|
|
|
|
Returns True on success. Requires no parameters.
|
2017-06-02 22:06:59 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#deletewebhook
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
2017-07-24 23:39:41 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.DELETE_WEBHOOK, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
2017-07-24 23:39:41 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def get_webhook_info(self) -> types.WebhookInfo:
|
2017-07-24 23:39:41 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get current webhook status. Requires no parameters.
|
2018-02-11 12:50:28 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
If the bot is using getUpdates, will return an object with the url field empty.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getwebhookinfo
|
2017-07-24 23:39:41 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, returns a WebhookInfo object
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.WebhookInfo`
|
2017-07-25 00:58:57 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
2017-07-25 00:58:57 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_WEBHOOK_INFO, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.WebhookInfo(**result)
|
|
|
|
|
|
|
2017-10-22 14:09:11 +03:00
|
|
|
|
# === Base methods ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#available-methods
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def get_me(self) -> types.User:
|
2017-07-25 00:58:57 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
A simple method for testing your bot's auth token. Requires no parameters.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getme
|
2017-07-25 00:58:57 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns basic information about the bot in form of a User object
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.User`
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_ME, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.User(**result)
|
2017-06-04 11:35:07 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_message(self, chat_id: typing.Union[base.Integer, base.String], text: base.String,
|
|
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
|
|
|
|
|
disable_web_page_preview: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send text messages.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendmessage
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param text: Text of the message to be sent
|
|
|
|
|
|
:type text: :obj:`base.String`
|
2018-02-11 12:50:28 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param disable_web_page_preview: Disables link previews for links in this message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_web_page_preview: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-11 12:50:28 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2018-01-18 17:36:24 +02:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_MESSAGE, payload)
|
|
|
|
|
|
return types.Message(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def forward_message(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
from_chat_id: typing.Union[base.Integer, base.String], message_id: base.Integer,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to forward messages of any kind.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#forwardmessage
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param from_chat_id: Unique identifier for the chat where the original message was sent
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type from_chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Message identifier in the chat specified in from_chat_id
|
|
|
|
|
|
:type message_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.FORWARD_MESSAGE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_photo(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
photo: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to send photos.
|
2017-07-22 19:23:20 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendphoto
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param photo: Photo to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type photo: :obj:`typing.Union[base.InputFile, base.String]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Photo caption (may also be used when resending photos by file_id), 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['photo'])
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'photo', photo)
|
2017-07-22 19:23:20 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_PHOTO, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_audio(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
audio: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
duration: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
performer: typing.Union[base.String, None] = None,
|
|
|
|
|
|
title: typing.Union[base.String, None] = None,
|
2018-07-29 02:55:24 +03:00
|
|
|
|
thumb: typing.Union[base.InputFile, base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to send audio files, if you want Telegram clients to display them in the music player.
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Your audio must be in the .mp3 format.
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
For sending voice messages, use the sendVoice method instead.
|
2017-07-22 19:23:20 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendaudio
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param audio: Audio file to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type audio: :obj:`typing.Union[base.InputFile, base.String]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Audio caption, 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param duration: Duration of the audio in seconds
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type duration: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param performer: Performer
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type performer: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param title: Track name
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type title: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param thumb: Thumbnail of the file sent
|
|
|
|
|
|
:type thumb: :obj:`typing.Union[base.InputFile, base.String, None]`
|
|
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove, types.ForceReply, None]`
|
|
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
2019-07-18 15:38:00 +03:00
|
|
|
|
payload = generate_payload(**locals(), exclude=['audio', 'thumb'])
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'audio', audio)
|
2019-07-18 15:38:00 +03:00
|
|
|
|
prepare_attachment(payload, files, 'thumb', thumb)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_AUDIO, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_document(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
document: typing.Union[base.InputFile, base.String],
|
2018-07-29 02:55:24 +03:00
|
|
|
|
thumb: typing.Union[base.InputFile, base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to send general files.
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Bots can currently send files of any type of up to 50 MB in size, this limit may be changed in the future.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#senddocument
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param document: File to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type document: :obj:`typing.Union[base.InputFile, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param thumb: Thumbnail of the file sent
|
|
|
|
|
|
:type thumb: :obj:`typing.Union[base.InputFile, base.String, None]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Document caption (may also be used when resending documents by file_id), 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove, types.ForceReply], None]`
|
|
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['document'])
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'document', document)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2018-09-22 21:51:01 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_DOCUMENT, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_video(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
video: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
duration: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
width: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
height: typing.Union[base.Integer, None] = None,
|
2018-07-29 02:55:24 +03:00
|
|
|
|
thumb: typing.Union[base.InputFile, base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2018-02-14 14:48:13 +02:00
|
|
|
|
supports_streaming: typing.Union[base.Boolean, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
|
|
|
|
|
"""
|
2018-02-14 14:48:13 +02:00
|
|
|
|
Use this method to send video files, Telegram clients support mp4 videos
|
|
|
|
|
|
(other formats may be sent as Document).
|
2017-10-22 13:59:45 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendvideo
|
2017-10-22 13:59:45 +03:00
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param video: Video to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type video: :obj:`typing.Union[base.InputFile, base.String]`
|
|
|
|
|
|
:param duration: Duration of sent video in seconds
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type duration: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param width: Video width
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type width: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param height: Video height
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type height: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param thumb: Thumbnail of the file sent
|
|
|
|
|
|
:type thumb: :obj:`typing.Union[base.InputFile, base.String, None]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Video caption (may also be used when resending videos by file_id), 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2018-02-14 14:48:13 +02:00
|
|
|
|
:param supports_streaming: Pass True, if the uploaded video is suitable for streaming
|
|
|
|
|
|
:type supports_streaming: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-14 14:48:13 +02:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
2018-08-13 22:42:10 +03:00
|
|
|
|
payload = generate_payload(**locals(), exclude=['video', 'thumb'])
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'video', video)
|
|
|
|
|
|
prepare_attachment(payload, files, 'thumb', thumb)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_VIDEO, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2018-07-29 02:58:17 +03:00
|
|
|
|
async def send_animation(self,
|
2018-08-13 22:42:10 +03:00
|
|
|
|
chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
animation: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
duration: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
width: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
height: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None,
|
|
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
|
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply], None] = None
|
|
|
|
|
|
) -> types.Message:
|
2018-07-29 02:58:17 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound).
|
|
|
|
|
|
|
|
|
|
|
|
On success, the sent Message is returned.
|
|
|
|
|
|
Bots can currently send animation files of up to 50 MB in size, this limit may be changed in the future.
|
|
|
|
|
|
|
|
|
|
|
|
Source https://core.telegram.org/bots/api#sendanimation
|
|
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
|
|
|
|
|
(in the format @channelusername)
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param animation: Animation to send. Pass a file_id as String to send an animation that exists
|
|
|
|
|
|
on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation
|
|
|
|
|
|
from the Internet, or upload a new animation using multipart/form-data
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type animation: :obj:`typing.Union[base.InputFile, base.String]`
|
|
|
|
|
|
:param duration: Duration of sent animation in seconds
|
|
|
|
|
|
:type duration: :obj:`typing.Union[base.Integer, None]`
|
|
|
|
|
|
:param width: Animation width
|
|
|
|
|
|
:type width: :obj:`typing.Union[base.Integer, None]`
|
|
|
|
|
|
:param height: Animation height
|
|
|
|
|
|
:type height: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size.
|
|
|
|
|
|
A thumbnail‘s width and height should not exceed 90.
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Animation caption (may also be used when resending animation by file_id), 0-1024 characters
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in the media caption
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
|
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
|
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
|
|
|
|
|
:type reply_markup: :obj:`typing.Union[typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove, types.ForceReply], None]`
|
|
|
|
|
|
:return: On success, the sent Message is returned
|
2018-07-29 02:58:17 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
2018-08-13 22:42:10 +03:00
|
|
|
|
payload = generate_payload(**locals(), exclude=["animation", "thumb"])
|
2018-10-20 15:55:57 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'animation', animation)
|
|
|
|
|
|
prepare_attachment(payload, files, 'thumb', thumb)
|
2018-07-29 02:58:17 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_ANIMATION, payload, files)
|
2018-07-29 02:58:17 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_voice(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
voice: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
duration: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to send audio files, if you want Telegram clients to display the file
|
|
|
|
|
|
as a playable voice message.
|
|
|
|
|
|
|
|
|
|
|
|
For this to work, your audio must be in an .ogg file encoded with OPUS
|
2017-10-22 13:59:45 +03:00
|
|
|
|
(other formats may be sent as Audio or Document).
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendvoice
|
2017-10-22 13:59:45 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param voice: Audio file to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type voice: :obj:`typing.Union[base.InputFile, base.String]`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param caption: Voice message caption, 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param duration: Duration of the voice message in seconds
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type duration: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['voice'])
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'voice', voice)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_VOICE, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_video_note(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
video_note: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
duration: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
length: typing.Union[base.Integer, None] = None,
|
2018-07-29 02:55:24 +03:00
|
|
|
|
thumb: typing.Union[base.InputFile, base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send video messages.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendvideonote
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param video_note: Video note to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type video_note: :obj:`typing.Union[base.InputFile, base.String]`
|
|
|
|
|
|
:param duration: Duration of sent video in seconds
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type duration: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param length: Video width and height
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type length: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param thumb: Thumbnail of the file sent
|
|
|
|
|
|
:type thumb: :obj:`typing.Union[base.InputFile, base.String, None]`
|
|
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove, types.ForceReply, None]`
|
|
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['video_note'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'video_note', video_note)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.SEND_VIDEO_NOTE, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-17 23:01:17 +02:00
|
|
|
|
async def send_media_group(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
media: typing.Union[types.MediaGroup, typing.List],
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer,
|
|
|
|
|
|
None] = None) -> typing.List[types.Message]:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to send a group of photos or videos as an album.
|
|
|
|
|
|
|
|
|
|
|
|
Source: https://core.telegram.org/bots/api#sendmediagroup
|
|
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-11-17 23:01:17 +02:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param media: A JSON-serialized array describing photos and videos to be sent
|
|
|
|
|
|
:type media: :obj:`typing.Union[types.MediaGroup, typing.List]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-11-17 23:01:17 +02:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
|
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
|
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, an array of the sent Messages is returned
|
2017-11-17 23:01:17 +02:00
|
|
|
|
:rtype: typing.List[types.Message]
|
|
|
|
|
|
"""
|
|
|
|
|
|
# Convert list to MediaGroup
|
|
|
|
|
|
if isinstance(media, list):
|
|
|
|
|
|
media = types.MediaGroup(media)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = dict(media.get_files())
|
2017-11-17 23:01:17 +02:00
|
|
|
|
|
|
|
|
|
|
media = prepare_arg(media)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['files'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_MEDIA_GROUP, payload, files)
|
2017-11-17 23:01:17 +02:00
|
|
|
|
return [types.Message(**message) for message in result]
|
|
|
|
|
|
|
2018-03-18 17:51:39 +03:00
|
|
|
|
async def send_location(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
latitude: base.Float, longitude: base.Float,
|
|
|
|
|
|
live_period: typing.Union[base.Integer, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send point on the map.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendlocation
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param latitude: Latitude of the location
|
|
|
|
|
|
:type latitude: :obj:`base.Float`
|
|
|
|
|
|
:param longitude: Longitude of the location
|
|
|
|
|
|
:type longitude: :obj:`base.Float`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param live_period: Period in seconds for which the location will be updated
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type live_period: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_LOCATION, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def edit_message_live_location(self, latitude: base.Float, longitude: base.Float,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, base.String, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to edit live location messages sent by the bot or via the bot (for inline bots).
|
|
|
|
|
|
A location can be edited until its live_period expires or editing is explicitly disabled by a call
|
2017-10-22 13:59:45 +03:00
|
|
|
|
to stopMessageLiveLocation.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#editmessagelivelocation
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param latitude: Latitude of new location
|
|
|
|
|
|
:type latitude: :obj:`base.Float`
|
|
|
|
|
|
:param longitude: Longitude of new location
|
|
|
|
|
|
:type longitude: :obj:`base.Float`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for a new inline keyboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, if the edited message was sent by the bot, the edited Message is returned,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
otherwise True is returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.EDIT_MESSAGE_LIVE_LOCATION, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def stop_message_live_location(self,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, base.String, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to stop updating a live location message sent by the bot or via the bot
|
|
|
|
|
|
(for inline bots) before live_period expires.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#stopmessagelivelocation
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for a new inline keyboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, if the message was sent by the bot, the sent Message is returned,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
otherwise True is returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.STOP_MESSAGE_LIVE_LOCATION, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_venue(self, chat_id: typing.Union[base.Integer, base.String],
|
2018-03-18 17:51:39 +03:00
|
|
|
|
latitude: base.Float, longitude: base.Float,
|
|
|
|
|
|
title: base.String, address: base.String,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
foursquare_id: typing.Union[base.String, None] = None,
|
2018-07-29 03:08:33 +03:00
|
|
|
|
foursquare_type: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send information about a venue.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendvenue
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param latitude: Latitude of the venue
|
|
|
|
|
|
:type latitude: :obj:`base.Float`
|
|
|
|
|
|
:param longitude: Longitude of the venue
|
|
|
|
|
|
:type longitude: :obj:`base.Float`
|
|
|
|
|
|
:param title: Name of the venue
|
|
|
|
|
|
:type title: :obj:`base.String`
|
|
|
|
|
|
:param address: Address of the venue
|
|
|
|
|
|
:type address: :obj:`base.String`
|
|
|
|
|
|
:param foursquare_id: Foursquare identifier of the venue
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type foursquare_id: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param foursquare_type: Foursquare type of the venue, if known
|
2018-07-29 03:08:33 +03:00
|
|
|
|
:type foursquare_type: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_VENUE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_contact(self, chat_id: typing.Union[base.Integer, base.String],
|
2018-03-18 17:51:39 +03:00
|
|
|
|
phone_number: base.String, first_name: base.String,
|
|
|
|
|
|
last_name: typing.Union[base.String, None] = None,
|
2018-07-29 02:17:17 +03:00
|
|
|
|
vcard: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send phone contacts.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendcontact
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param phone_number: Contact's phone number
|
|
|
|
|
|
:type phone_number: :obj:`base.String`
|
|
|
|
|
|
:param first_name: Contact's first name
|
|
|
|
|
|
:type first_name: :obj:`base.String`
|
|
|
|
|
|
:param last_name: Contact's last name
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type last_name: :obj:`typing.Union[base.String, None]`
|
2018-07-29 02:17:17 +03:00
|
|
|
|
:param vcard: vcard
|
|
|
|
|
|
:type vcard: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_CONTACT, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2019-04-15 23:38:17 +03:00
|
|
|
|
async def send_poll(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
question: base.String,
|
|
|
|
|
|
options: typing.List[base.String],
|
2019-10-05 20:23:54 +04:00
|
|
|
|
disable_notification: typing.Optional[base.Boolean] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Optional[base.Integer] = None,
|
2019-04-15 23:38:17 +03:00
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to send a native poll. A native poll can't be sent to a private chat.
|
|
|
|
|
|
On success, the sent Message is returned.
|
|
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target chat
|
|
|
|
|
|
or username of the target channel (in the format @channelusername).
|
|
|
|
|
|
A native poll can't be sent to a private chat.
|
|
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param question: Poll question, 1-255 characters
|
|
|
|
|
|
:type question: :obj:`base.String`
|
|
|
|
|
|
:param options: List of answer options, 2-10 strings 1-100 characters each
|
|
|
|
|
|
:param options: :obj:`typing.List[base.String]`
|
|
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound.
|
|
|
|
|
|
:type disable_notification: :obj:`typing.Optional[Boolean]`
|
|
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
|
|
|
|
|
:type reply_to_message_id: :obj:`typing.Optional[Integer]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2019-04-15 23:38:17 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
|
|
|
|
|
:return: On success, the sent Message is returned
|
|
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
options = prepare_arg(options)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.SEND_POLL, payload)
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_chat_action(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
action: base.String) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method when you need to tell the user that something is happening on the bot's side.
|
|
|
|
|
|
The status is set for 5 seconds or less
|
2017-10-22 13:59:45 +03:00
|
|
|
|
(when a message arrives from your bot, Telegram clients clear its typing status).
|
2018-02-17 20:08:38 +03:00
|
|
|
|
|
|
|
|
|
|
We only recommend using this method when a response from the bot will take
|
2017-10-22 13:59:45 +03:00
|
|
|
|
a noticeable amount of time to arrive.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendchataction
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param action: Type of action to broadcast
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type action: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_CHAT_ACTION, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def get_user_profile_photos(self, user_id: base.Integer, offset: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
limit: typing.Union[base.Integer, None] = None) -> types.UserProfilePhotos:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Use this method to get a list of profile pictures for a user. Returns a UserProfilePhotos object.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getuserprofilephotos
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param offset: Sequential number of the first photo to be returned. By default, all photos are returned
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type offset: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param limit: Limits the number of photos to be retrieved. Values between 1—100 are accepted. Defaults to 100
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type limit: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns a UserProfilePhotos object
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.UserProfilePhotos`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_USER_PROFILE_PHOTOS, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.UserProfilePhotos(**result)
|
|
|
|
|
|
|
|
|
|
|
|
async def get_file(self, file_id: base.String) -> types.File:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to get basic info about a file and prepare it for downloading.
|
|
|
|
|
|
For the moment, bots can download files of up to 20MB in size.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Note: This function may not preserve the original file name and MIME type.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
You should save the file's MIME type and name (if available) when the File object is received.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getfile
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param file_id: File identifier to get info about
|
|
|
|
|
|
:type file_id: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, a File object is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.File`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_FILE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.File(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def kick_chat_member(self, chat_id: typing.Union[base.Integer, base.String], user_id: base.Integer,
|
2019-10-29 21:19:55 +02:00
|
|
|
|
until_date: typing.Union[
|
|
|
|
|
|
base.Integer, datetime.datetime, datetime.timedelta, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to kick a user from a group, a supergroup or a channel.
|
|
|
|
|
|
In the case of supergroups and channels, the user will not be able to return to the group
|
2017-10-22 13:59:45 +03:00
|
|
|
|
on their own using invite links, etc., unless unbanned first.
|
|
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
|
|
|
|
|
|
|
|
|
|
|
Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ setting
|
|
|
|
|
|
is off in the target group.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Otherwise members may only be removed by the group's creator or by the member that added them.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#kickchatmember
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target group or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param until_date: Date when the user will be unbanned, unix time
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type until_date: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
until_date = prepare_arg(until_date)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.KICK_CHAT_MEMBER, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def unban_chat_member(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
user_id: base.Integer) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to unban a previously kicked user in a supergroup or channel. `
|
2018-02-17 20:08:38 +03:00
|
|
|
|
The user will not return to the group or channel automatically, but will be able to join via link, etc.
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator for this to work.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#unbanchatmember
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target group or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.UNBAN_CHAT_MEMBER, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def restrict_chat_member(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
user_id: base.Integer,
|
2019-08-04 19:43:07 +03:00
|
|
|
|
permissions: typing.Optional[types.ChatPermissions] = None,
|
|
|
|
|
|
# permissions argument need to be required after removing other `can_*` arguments
|
2019-10-29 21:19:55 +02:00
|
|
|
|
until_date: typing.Union[
|
|
|
|
|
|
base.Integer, datetime.datetime, datetime.timedelta, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
can_send_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_send_media_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_send_other_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_add_web_page_previews: typing.Union[base.Boolean, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to restrict a user in a supergroup.
|
|
|
|
|
|
The bot must be an administrator in the supergroup for this to work and must have the appropriate admin rights.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Pass True for all boolean parameters to lift restrictions from a user.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#restrictchatmember
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2019-08-04 19:43:07 +03:00
|
|
|
|
:param permissions: New user permissions
|
|
|
|
|
|
:type permissions: :obj:`ChatPermissions`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param until_date: Date when restrictions will be lifted for the user, unix time
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type until_date: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_send_messages: Pass True, if the user can send text messages, contacts, locations and venues
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_send_messages: :obj:`typing.Union[base.Boolean, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param can_send_media_messages: Pass True, if the user can send audios, documents, photos, videos,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
video notes and voice notes, implies can_send_messages
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_send_media_messages: :obj:`typing.Union[base.Boolean, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param can_send_other_messages: Pass True, if the user can send animations, games, stickers and
|
2017-10-22 13:59:45 +03:00
|
|
|
|
use inline bots, implies can_send_media_messages
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_send_other_messages: :obj:`typing.Union[base.Boolean, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param can_add_web_page_previews: Pass True, if the user may add web page previews to their messages,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
implies can_send_media_messages
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_add_web_page_previews: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
until_date = prepare_arg(until_date)
|
2019-08-04 19:43:07 +03:00
|
|
|
|
permissions = prepare_arg(permissions)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2019-08-04 19:43:07 +03:00
|
|
|
|
for permission in ['can_send_messages',
|
|
|
|
|
|
'can_send_media_messages',
|
|
|
|
|
|
'can_send_other_messages',
|
|
|
|
|
|
'can_add_web_page_previews']:
|
|
|
|
|
|
if permission in payload:
|
|
|
|
|
|
warnings.warn(f"The method `restrict_chat_member` now takes the new user permissions "
|
|
|
|
|
|
f"in a single argument of the type ChatPermissions instead of "
|
|
|
|
|
|
f"passing regular argument {payload[permission]}",
|
|
|
|
|
|
DeprecationWarning, stacklevel=2)
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.RESTRICT_CHAT_MEMBER, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def promote_chat_member(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
user_id: base.Integer,
|
|
|
|
|
|
can_change_info: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_post_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_edit_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_delete_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_invite_users: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_restrict_members: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_pin_messages: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
can_promote_members: typing.Union[base.Boolean, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to promote or demote a user in a supergroup or a channel.
|
|
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Pass False for all boolean parameters to demote a user.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#promotechatmember
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
|
|
|
|
|
:param can_change_info: Pass True, if the administrator can change chat title, photo and other settings
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_change_info: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_post_messages: Pass True, if the administrator can create channel posts, channels only
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_post_messages: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_edit_messages: Pass True, if the administrator can edit messages of other users, channels only
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_edit_messages: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_delete_messages: Pass True, if the administrator can delete messages of other users
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_delete_messages: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_invite_users: Pass True, if the administrator can invite new users to the chat
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_invite_users: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_restrict_members: Pass True, if the administrator can restrict, ban or unban chat members
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_restrict_members: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param can_pin_messages: Pass True, if the administrator can pin messages, supergroups only
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_pin_messages: :obj:`typing.Union[base.Boolean, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param can_promote_members: Pass True, if the administrator can add new administrators
|
|
|
|
|
|
with a subset of his own privileges or demote administrators that he has promoted,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
directly or indirectly (promoted by administrators that were appointed by him)
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type can_promote_members: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.PROMOTE_CHAT_MEMBER, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2019-08-04 19:43:07 +03:00
|
|
|
|
async def set_chat_permissions(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
permissions: types.ChatPermissions) -> base.Boolean:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to set default chat permissions for all members.
|
|
|
|
|
|
The bot must be an administrator in the group or a supergroup for this to work and must have the
|
|
|
|
|
|
can_restrict_members admin rights.
|
|
|
|
|
|
|
|
|
|
|
|
Returns True on success.
|
|
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
|
|
|
|
|
:param permissions: New default chat permissions
|
|
|
|
|
|
:return: True on success.
|
|
|
|
|
|
"""
|
|
|
|
|
|
permissions = prepare_arg(permissions)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2019-08-27 13:28:11 +05:00
|
|
|
|
result = await self.request(api.Methods.SET_CHAT_PERMISSIONS, payload)
|
2019-08-04 19:43:07 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def export_chat_invite_link(self, chat_id: typing.Union[base.Integer, base.String]) -> base.String:
|
|
|
|
|
|
"""
|
2018-02-08 21:19:06 +02:00
|
|
|
|
Use this method to generate a new invite link for a chat; any previously generated link is revoked.
|
|
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#exportchatinvitelink
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns exported invite link as String on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.String`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.EXPORT_CHAT_INVITE_LINK, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_chat_photo(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
photo: base.InputFile) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to set a new profile photo for the chat. Photos can't be changed for private chats.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2018-02-17 20:08:38 +03:00
|
|
|
|
|
|
|
|
|
|
Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’
|
2017-10-22 13:59:45 +03:00
|
|
|
|
setting is off in the target group.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setchatphoto
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param photo: New chat photo, uploaded using multipart/form-data
|
|
|
|
|
|
:type photo: :obj:`base.InputFile`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['photo'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'photo', photo)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.SET_CHAT_PHOTO, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
async def delete_chat_photo(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to delete a chat photo. Photos can't be changed for private chats.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
|
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’
|
2017-10-22 13:59:45 +03:00
|
|
|
|
setting is off in the target group.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#deletechatphoto
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.DELETE_CHAT_PHOTO, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_chat_title(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
title: base.String) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to change the title of a chat. Titles can't be changed for private chats.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2018-02-17 20:08:38 +03:00
|
|
|
|
|
|
|
|
|
|
Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’
|
2017-10-22 13:59:45 +03:00
|
|
|
|
setting is off in the target group.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setchattitle
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param title: New chat title, 1-255 characters
|
|
|
|
|
|
:type title: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SET_CHAT_TITLE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_chat_description(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
description: typing.Union[base.String, None] = None) -> base.Boolean:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to change the description of a supergroup or a channel.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setchatdescription
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param description: New chat description, 0-255 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type description: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SET_CHAT_DESCRIPTION, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def pin_chat_message(self, chat_id: typing.Union[base.Integer, base.String], message_id: base.Integer,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None) -> base.Boolean:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to pin a message in a supergroup.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#pinchatmessage
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param message_id: Identifier of a message to pin
|
|
|
|
|
|
:type message_id: :obj:`base.Integer`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param disable_notification: Pass True, if it is not necessary to send a notification to
|
2017-10-22 13:59:45 +03:00
|
|
|
|
all group members about the new pinned message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.PIN_CHAT_MESSAGE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def unpin_chat_message(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to unpin a message in a supergroup chat.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
2017-07-11 23:08:20 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#unpinchatmessage
|
2017-07-11 23:08:20 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
2017-07-11 23:08:20 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.UNPIN_CHAT_MESSAGE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
2017-06-02 01:28:00 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def leave_chat(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method for your bot to leave a group, supergroup or channel.
|
2017-06-02 01:30:44 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#leavechat
|
2017-06-02 01:32:12 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.LEAVE_CHAT, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
async def get_chat(self, chat_id: typing.Union[base.Integer, base.String]) -> types.Chat:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to get up to date information about the chat
|
2017-10-22 13:59:45 +03:00
|
|
|
|
(current name of the user for one-on-one conversations, current username of a user, group or channel, etc.).
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getchat
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns a Chat object on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Chat`
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_CHAT, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Chat(**result)
|
2017-06-02 01:34:27 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def get_chat_administrators(self, chat_id: typing.Union[base.Integer, base.String]
|
|
|
|
|
|
) -> typing.List[types.ChatMember]:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get a list of administrators in a chat.
|
2017-06-02 01:38:12 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getchatadministrators
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, returns an Array of ChatMember objects that contains information about all
|
|
|
|
|
|
chat administrators except other bots.
|
|
|
|
|
|
If the chat is a group or a supergroup and no administrators were appointed,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
only the creator will be returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.List[types.ChatMember]`
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
2017-06-02 01:38:12 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_CHAT_ADMINISTRATORS, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return [types.ChatMember(**chatmember) for chatmember in result]
|
|
|
|
|
|
|
|
|
|
|
|
async def get_chat_members_count(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Integer:
|
|
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get the number of members in a chat.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getchatmemberscount
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns Int on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Integer`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_CHAT_MEMBERS_COUNT, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def get_chat_member(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
user_id: base.Integer) -> types.ChatMember:
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get information about a member of a chat.
|
2017-06-04 11:10:22 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getchatmember
|
2017-06-02 01:40:42 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup or channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param user_id: Unique identifier of the target user
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns a ChatMember object on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.ChatMember`
|
2017-06-04 11:10:22 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
2017-06-02 02:23:07 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_CHAT_MEMBER, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.ChatMember(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_chat_sticker_set(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
sticker_set_name: base.String) -> base.Boolean:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to set a new group sticker set for a supergroup.
|
|
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
|
|
|
|
|
|
|
|
|
|
|
Use the field can_set_sticker_set optionally returned in getChat requests to check
|
2017-10-22 13:59:45 +03:00
|
|
|
|
if the bot can use this method.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setchatstickerset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param sticker_set_name: Name of the sticker set to be set as the group sticker set
|
|
|
|
|
|
:type sticker_set_name: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SET_CHAT_STICKER_SET, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
async def delete_chat_sticker_set(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean:
|
|
|
|
|
|
"""
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Use this method to delete a group sticker set from a supergroup.
|
|
|
|
|
|
The bot must be an administrator in the chat for this to work and must have the appropriate admin rights.
|
|
|
|
|
|
|
|
|
|
|
|
Use the field can_set_sticker_set optionally returned in getChat requests
|
2017-10-22 13:59:45 +03:00
|
|
|
|
to check if the bot can use this method.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#deletechatstickerset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target supergroup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.DELETE_CHAT_STICKER_SET, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2018-03-18 17:51:39 +03:00
|
|
|
|
async def answer_callback_query(self, callback_query_id: base.String,
|
|
|
|
|
|
text: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
show_alert: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
url: typing.Union[base.String, None] = None,
|
|
|
|
|
|
cache_time: typing.Union[base.Integer, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send answers to callback queries sent from inline keyboards.
|
|
|
|
|
|
The answer will be displayed to the user as a notification at the top of the chat screen or as an alert.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Alternatively, the user can be redirected to the specified Game URL.
|
|
|
|
|
|
For this option to work, you must first create a game for your bot via @Botfather and accept the terms.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Otherwise, you may use links like t.me/your_bot?start=XXXX that open your bot with a parameter.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#answercallbackquery
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param callback_query_id: Unique identifier for the query to be answered
|
|
|
|
|
|
:type callback_query_id: :obj:`base.String`
|
2018-10-28 19:39:36 +02:00
|
|
|
|
:param text: Text of the notification. If not specified, nothing will be shown to the user, 0-1024 characters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type text: :obj:`typing.Union[base.String, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param show_alert: If true, an alert will be shown by the client instead of a notification
|
2017-10-22 13:59:45 +03:00
|
|
|
|
at the top of the chat screen. Defaults to false.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type show_alert: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param url: URL that will be opened by the user's client
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type url: :obj:`typing.Union[base.String, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param cache_time: The maximum amount of time in seconds that the
|
2017-10-22 13:59:45 +03:00
|
|
|
|
result of the callback query may be cached client-side.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type cache_time: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, True is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.ANSWER_CALLBACK_QUERY, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def edit_message_text(self, text: base.String,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, base.String, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
|
|
|
|
|
disable_web_page_preview: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to edit text and game messages sent by the bot or via the bot (for inline bots).
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#editmessagetext
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Unique identifier for the target chat or username of the target channel
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param text: New text of the message
|
|
|
|
|
|
:type text: :obj:`base.String`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param disable_web_page_preview: Disables link previews for links in this message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_web_page_preview: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for an inline keyboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, if edited message is sent by the bot,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
the edited Message is returned, otherwise True is returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2018-01-18 17:36:24 +02:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
result = await self.request(api.Methods.EDIT_MESSAGE_TEXT, payload)
|
|
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def edit_message_caption(self, chat_id: typing.Union[base.Integer, base.String, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
caption: typing.Union[base.String, None] = None,
|
2018-03-18 14:55:58 +03:00
|
|
|
|
parse_mode: typing.Union[base.String, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to edit captions of messages sent by the bot or via the bot (for inline bots).
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#editmessagecaption
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Unique identifier for the target chat or username of the target channel
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param caption: New caption of the message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type caption: :obj:`typing.Union[base.String, None]`
|
2018-04-04 11:26:43 +03:00
|
|
|
|
:param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic,
|
|
|
|
|
|
fixed-width text or inline URLs in your bot's message.
|
|
|
|
|
|
:type parse_mode: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for an inline keyboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, if edited message is sent by the bot, the edited Message is returned,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
otherwise True is returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2018-03-18 14:55:58 +03:00
|
|
|
|
if self.parse_mode:
|
|
|
|
|
|
payload.setdefault('parse_mode', self.parse_mode)
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
result = await self.request(api.Methods.EDIT_MESSAGE_CAPTION, payload)
|
|
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2018-07-29 02:36:27 +03:00
|
|
|
|
async def edit_message_media(self,
|
2018-08-13 22:42:10 +03:00
|
|
|
|
media: types.InputMedia,
|
|
|
|
|
|
chat_id: typing.Union[typing.Union[base.Integer, base.String], None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup, None] = None,
|
|
|
|
|
|
) -> typing.Union[types.Message, base.Boolean]:
|
2018-07-29 02:36:27 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Use this method to edit audio, document, photo, or video messages.
|
|
|
|
|
|
If a message is a part of a message album, then it can be edited only to a photo or a video.
|
|
|
|
|
|
Otherwise, message type can be changed arbitrarily.
|
|
|
|
|
|
When inline message is edited, new file can't be uploaded.
|
|
|
|
|
|
Use previously uploaded file via its file_id or specify a URL.
|
|
|
|
|
|
|
|
|
|
|
|
On success, if the edited message was sent by the bot,
|
|
|
|
|
|
the edited Message is returned, otherwise True is returned.
|
|
|
|
|
|
|
|
|
|
|
|
Source https://core.telegram.org/bots/api#editmessagemedia
|
|
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2018-07-29 02:36:27 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[typing.Union[base.Integer, base.String], None]`
|
|
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
|
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
|
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
|
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
|
|
|
|
|
:param media: A JSON-serialized object for a new media content of the message
|
|
|
|
|
|
:type media: :obj:`types.InputMedia`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for a new inline keyboard
|
2018-07-29 02:36:27 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, if the edited message was sent by the bot, the edited Message is returned,
|
|
|
|
|
|
otherwise True is returned
|
2018-07-29 02:36:27 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
2018-08-13 22:42:10 +03:00
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
2018-07-29 02:36:27 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
if isinstance(media, types.InputMedia):
|
|
|
|
|
|
files = dict(media.get_files())
|
2018-07-29 02:36:27 +03:00
|
|
|
|
else:
|
|
|
|
|
|
files = None
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.EDIT_MESSAGE_MEDIA, payload, files)
|
|
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def edit_message_reply_markup(self,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, base.String, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to edit only the reply markup of messages sent by the bot or via the bot (for inline bots).
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#editmessagereplymarkup
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified
|
2018-02-17 20:08:38 +03:00
|
|
|
|
Unique identifier for the target chat or username of the target channel
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for an inline keyboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:return: On success, if edited message is sent by the bot, the edited Message is returned,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
otherwise True is returned.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.EDIT_MESSAGE_REPLY_MARKUP, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2019-04-15 23:38:17 +03:00
|
|
|
|
async def stop_poll(self, chat_id: typing.Union[base.String, base.Integer],
|
|
|
|
|
|
message_id: base.Integer,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup, None] = None) -> types.Poll:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to stop a poll which was sent by the bot.
|
|
|
|
|
|
On success, the stopped Poll with the final results is returned.
|
|
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
|
|
|
|
|
:type chat_id: :obj:`typing.Union[base.String, base.Integer]`
|
|
|
|
|
|
:param message_id: Identifier of the original message with the poll
|
|
|
|
|
|
:type message_id: :obj:`base.Integer`
|
|
|
|
|
|
:param reply_markup: A JSON-serialized object for a new message inline keyboard.
|
|
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
|
|
|
|
|
:return: On success, the stopped Poll with the final results is returned.
|
|
|
|
|
|
:rtype: :obj:`types.Poll`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.STOP_POLL, payload)
|
|
|
|
|
|
return types.Poll(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def delete_message(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
message_id: base.Integer) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2019-04-16 00:22:22 +03:00
|
|
|
|
Use this method to delete a message, including service messages, with the following limitations:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
- A message can only be deleted if it was sent less than 48 hours ago.
|
2019-04-16 00:22:22 +03:00
|
|
|
|
- Bots can delete outgoing messages in private chats, groups, and supergroups.
|
|
|
|
|
|
- Bots can delete incoming messages in private chats.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
- Bots granted can_post_messages permissions can delete outgoing messages in channels.
|
|
|
|
|
|
- If the bot is an administrator of a group, it can delete any message there.
|
|
|
|
|
|
- If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there.
|
2017-10-22 13:59:45 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#deletemessage
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
|
|
|
|
|
:param message_id: Identifier of the message to delete
|
|
|
|
|
|
:type message_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.DELETE_MESSAGE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 14:09:11 +03:00
|
|
|
|
# === Stickers ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#stickers
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_sticker(self, chat_id: typing.Union[base.Integer, base.String],
|
|
|
|
|
|
sticker: typing.Union[base.InputFile, base.String],
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardRemove,
|
|
|
|
|
|
types.ForceReply, None] = None) -> types.Message:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send .webp stickers.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendsticker
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-02-17 20:08:38 +03:00
|
|
|
|
:param chat_id: Unique identifier for the target chat or username of the target channel
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param sticker: Sticker to send
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type sticker: :obj:`typing.Union[base.InputFile, base.String]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2019-04-28 23:33:34 +05:00
|
|
|
|
:param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard,
|
|
|
|
|
|
custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup,
|
|
|
|
|
|
types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-20 18:48:08 +03:00
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['sticker'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'sticker', sticker)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.SEND_STICKER, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
async def get_sticker_set(self, name: base.String) -> types.StickerSet:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get a sticker set.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getstickerset
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param name: Name of the sticker set
|
|
|
|
|
|
:type name: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, a StickerSet object is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.StickerSet`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.GET_STICKER_SET, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.StickerSet(**result)
|
|
|
|
|
|
|
|
|
|
|
|
async def upload_sticker_file(self, user_id: base.Integer, png_sticker: base.InputFile) -> types.File:
|
|
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to upload a .png file with a sticker for later use in createNewStickerSet
|
|
|
|
|
|
and addStickerToSet methods (can be used multiple times).
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#uploadstickerfile
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: User identifier of sticker file owner
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param png_sticker: Png image with the sticker, must be up to 512 kilobytes in size,
|
|
|
|
|
|
dimensions must not exceed 512px, and either width or height must be exactly 512px.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type png_sticker: :obj:`base.InputFile`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns the uploaded File on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.File`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['png_sticker'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'png_sticker', png_sticker)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.UPLOAD_STICKER_FILE, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.File(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def create_new_sticker_set(self, user_id: base.Integer, name: base.String, title: base.String,
|
|
|
|
|
|
png_sticker: typing.Union[base.InputFile, base.String], emojis: base.String,
|
|
|
|
|
|
contains_masks: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
mask_position: typing.Union[types.MaskPosition, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to create new sticker set owned by a user. The bot will be able to edit the created sticker set.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#createnewstickerset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: User identifier of created sticker set owner
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param name: Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type name: :obj:`base.String`
|
|
|
|
|
|
:param title: Sticker set title, 1-64 characters
|
|
|
|
|
|
:type title: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param png_sticker: Png image with the sticker, must be up to 512 kilobytes in size,
|
|
|
|
|
|
dimensions must not exceed 512px, and either width or height must be exactly 512px.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type png_sticker: :obj:`typing.Union[base.InputFile, base.String]`
|
|
|
|
|
|
:param emojis: One or more emoji corresponding to the sticker
|
|
|
|
|
|
:type emojis: :obj:`base.String`
|
|
|
|
|
|
:param contains_masks: Pass True, if a set of mask stickers should be created
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type contains_masks: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param mask_position: A JSON-serialized object for position where the mask should be placed on faces
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type mask_position: :obj:`typing.Union[types.MaskPosition, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
mask_position = prepare_arg(mask_position)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['png_sticker'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'png_sticker', png_sticker)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.CREATE_NEW_STICKER_SET, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def add_sticker_to_set(self, user_id: base.Integer, name: base.String,
|
|
|
|
|
|
png_sticker: typing.Union[base.InputFile, base.String], emojis: base.String,
|
|
|
|
|
|
mask_position: typing.Union[types.MaskPosition, None] = None) -> base.Boolean:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to add a new sticker to a set created by the bot.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#addstickertoset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: User identifier of sticker set owner
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
|
|
|
|
|
:param name: Sticker set name
|
|
|
|
|
|
:type name: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param png_sticker: Png image with the sticker, must be up to 512 kilobytes in size,
|
|
|
|
|
|
dimensions must not exceed 512px, and either width or height must be exactly 512px.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type png_sticker: :obj:`typing.Union[base.InputFile, base.String]`
|
|
|
|
|
|
:param emojis: One or more emoji corresponding to the sticker
|
|
|
|
|
|
:type emojis: :obj:`base.String`
|
|
|
|
|
|
:param mask_position: A JSON-serialized object for position where the mask should be placed on faces
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type mask_position: :obj:`typing.Union[types.MaskPosition, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
mask_position = prepare_arg(mask_position)
|
|
|
|
|
|
payload = generate_payload(**locals(), exclude=['png_sticker'])
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
files = {}
|
|
|
|
|
|
prepare_file(payload, files, 'png_sticker', png_sticker)
|
|
|
|
|
|
|
|
|
|
|
|
result = await self.request(api.Methods.ADD_STICKER_TO_SET, payload, files)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
async def set_sticker_position_in_set(self, sticker: base.String, position: base.Integer) -> base.Boolean:
|
|
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to move a sticker in a set created by the bot to a specific position.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setstickerpositioninset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param sticker: File identifier of the sticker
|
|
|
|
|
|
:type sticker: :obj:`base.String`
|
|
|
|
|
|
:param position: New sticker position in the set, zero-based
|
|
|
|
|
|
:type position: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
result = await self.request(api.Methods.SET_STICKER_POSITION_IN_SET, payload)
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
async def delete_sticker_from_set(self, sticker: base.String) -> base.Boolean:
|
|
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to delete a sticker from a set created by the bot.
|
|
|
|
|
|
|
2017-10-20 18:48:08 +03:00
|
|
|
|
The following methods and objects allow your bot to work in inline mode.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#deletestickerfromset
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param sticker: File identifier of the sticker
|
|
|
|
|
|
:type sticker: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.DELETE_STICKER_FROM_SET, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2018-03-18 17:51:39 +03:00
|
|
|
|
async def answer_inline_query(self, inline_query_id: base.String,
|
|
|
|
|
|
results: typing.List[types.InlineQueryResult],
|
2017-10-22 13:59:45 +03:00
|
|
|
|
cache_time: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
is_personal: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
next_offset: typing.Union[base.String, None] = None,
|
|
|
|
|
|
switch_pm_text: typing.Union[base.String, None] = None,
|
|
|
|
|
|
switch_pm_parameter: typing.Union[base.String, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send answers to an inline query.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
No more than 50 results per query are allowed.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#answerinlinequery
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param inline_query_id: Unique identifier for the answered query
|
|
|
|
|
|
:type inline_query_id: :obj:`base.String`
|
|
|
|
|
|
:param results: A JSON-serialized array of results for the inline query
|
|
|
|
|
|
:type results: :obj:`typing.List[types.InlineQueryResult]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param cache_time: The maximum amount of time in seconds that the result of the
|
|
|
|
|
|
inline query may be cached on the server. Defaults to 300.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type cache_time: :obj:`typing.Union[base.Integer, None]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param is_personal: Pass True, if results may be cached on the server side only
|
|
|
|
|
|
for the user that sent the query. By default, results may be returned to any user who sends the same query
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type is_personal: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param next_offset: Pass the offset that a client should send in the
|
|
|
|
|
|
next query with the same text to receive more results.
|
|
|
|
|
|
Pass an empty string if there are no more results or if you don‘t support pagination.
|
|
|
|
|
|
Offset length can’t exceed 64 bytes.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type next_offset: :obj:`typing.Union[base.String, None]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param switch_pm_text: If passed, clients will display a button with specified text that
|
|
|
|
|
|
switches the user to a private chat with the bot and sends the bot a start message
|
|
|
|
|
|
with the parameter switch_pm_parameter
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type switch_pm_text: :obj:`typing.Union[base.String, None]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param switch_pm_parameter: Deep-linking parameter for the /start message sent to the bot when
|
|
|
|
|
|
user presses the switch button. 1-64 characters, only A-Z, a-z, 0-9, _ and - are allowed.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type switch_pm_parameter: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, True is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
results = prepare_arg(results)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.ANSWER_INLINE_QUERY, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 14:09:11 +03:00
|
|
|
|
# === Payments ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#payments
|
|
|
|
|
|
|
2018-03-18 17:51:39 +03:00
|
|
|
|
async def send_invoice(self, chat_id: base.Integer, title: base.String,
|
|
|
|
|
|
description: base.String, payload: base.String,
|
|
|
|
|
|
provider_token: base.String, start_parameter: base.String,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
currency: base.String, prices: typing.List[types.LabeledPrice],
|
2017-11-17 23:01:17 +02:00
|
|
|
|
provider_data: typing.Union[typing.Dict, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
photo_url: typing.Union[base.String, None] = None,
|
|
|
|
|
|
photo_size: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
photo_width: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
photo_height: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
need_name: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
need_phone_number: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
need_email: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
need_shipping_address: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
is_flexible: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup, None] = None) -> types.Message:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Use this method to send invoices.
|
|
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendinvoice
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target private chat
|
|
|
|
|
|
:type chat_id: :obj:`base.Integer`
|
|
|
|
|
|
:param title: Product name, 1-32 characters
|
|
|
|
|
|
:type title: :obj:`base.String`
|
|
|
|
|
|
:param description: Product description, 1-255 characters
|
|
|
|
|
|
:type description: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param payload: Bot-defined invoice payload, 1-128 bytes
|
2017-10-22 13:59:45 +03:00
|
|
|
|
This will not be displayed to the user, use for your internal processes.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type payload: :obj:`base.String`
|
|
|
|
|
|
:param provider_token: Payments provider token, obtained via Botfather
|
|
|
|
|
|
:type provider_token: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param start_parameter: Unique deep-linking parameter that can be used to generate this
|
|
|
|
|
|
invoice when used as a start parameter
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type start_parameter: :obj:`base.String`
|
|
|
|
|
|
:param currency: Three-letter ISO 4217 currency code, see more on currencies
|
|
|
|
|
|
:type currency: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param prices: Price breakdown, a list of components
|
|
|
|
|
|
(e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type prices: :obj:`typing.List[types.LabeledPrice]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param provider_data: JSON-encoded data about the invoice, which will be shared with the payment provider
|
2017-11-17 23:01:17 +02:00
|
|
|
|
:type provider_data: :obj:`typing.Union[typing.Dict, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param photo_url: URL of the product photo for the invoice
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type photo_url: :obj:`typing.Union[base.String, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param photo_size: Photo size
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type photo_size: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param photo_width: Photo width
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type photo_width: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param photo_height: Photo height
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type photo_height: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param need_name: Pass True, if you require the user's full name to complete the order
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type need_name: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param need_phone_number: Pass True, if you require the user's phone number to complete the order
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type need_phone_number: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param need_email: Pass True, if you require the user's email to complete the order
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type need_email: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param need_shipping_address: Pass True, if you require the user's shipping address to complete the order
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type need_shipping_address: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param is_flexible: Pass True, if the final price depends on the shipping method
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type is_flexible: :obj:`typing.Union[base.Boolean, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for an inline keyboard
|
2017-10-22 13:59:45 +03:00
|
|
|
|
If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
2017-10-23 16:23:24 +03:00
|
|
|
|
prices = prepare_arg([price.to_python() if hasattr(price, 'to_python') else price for price in prices])
|
2017-10-20 18:48:08 +03:00
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
2017-10-23 16:23:24 +03:00
|
|
|
|
payload_ = generate_payload(**locals())
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_INVOICE, payload_)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def answer_shipping_query(self, shipping_query_id: base.String, ok: base.Boolean,
|
|
|
|
|
|
shipping_options: typing.Union[typing.List[types.ShippingOption], None] = None,
|
|
|
|
|
|
error_message: typing.Union[base.String, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
If you sent an invoice requesting a shipping address and the parameter is_flexible was specified,
|
|
|
|
|
|
the Bot API will send an Update with a shipping_query field to the bot.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#answershippingquery
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param shipping_query_id: Unique identifier for the query to be answered
|
|
|
|
|
|
:type shipping_query_id: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param ok: Specify True if delivery to the specified address is possible and False if there are any problems
|
|
|
|
|
|
(for example, if delivery to the specified address is not possible)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type ok: :obj:`base.Boolean`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param shipping_options: Required if ok is True. A JSON-serialized array of available shipping options
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type shipping_options: :obj:`typing.Union[typing.List[types.ShippingOption], None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param error_message: Required if ok is False
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Error message in human readable form that explains why it is impossible to complete the order
|
|
|
|
|
|
(e.g. "Sorry, delivery to your desired address is unavailable').
|
|
|
|
|
|
Telegram will display this message to the user.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type error_message: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, True is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
2017-10-23 16:23:24 +03:00
|
|
|
|
if shipping_options:
|
|
|
|
|
|
shipping_options = prepare_arg([shipping_option.to_python()
|
|
|
|
|
|
if hasattr(shipping_option, 'to_python')
|
|
|
|
|
|
else shipping_option
|
|
|
|
|
|
for shipping_option in shipping_options])
|
2017-10-20 18:48:08 +03:00
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.ANSWER_SHIPPING_QUERY, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def answer_pre_checkout_query(self, pre_checkout_query_id: base.String, ok: base.Boolean,
|
|
|
|
|
|
error_message: typing.Union[base.String, None] = None) -> base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Once the user has confirmed their payment and shipping details,
|
|
|
|
|
|
the Bot API sends the final confirmation in the form of an Update with the field pre_checkout_query.
|
|
|
|
|
|
Use this method to respond to such pre-checkout queries.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#answerprecheckoutquery
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param pre_checkout_query_id: Unique identifier for the query to be answered
|
|
|
|
|
|
:type pre_checkout_query_id: :obj:`base.String`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param ok: Specify True if everything is alright (goods are available, etc.) and the
|
|
|
|
|
|
bot is ready to proceed with the order. Use False if there are any problems.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type ok: :obj:`base.Boolean`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param error_message: Required if ok is False
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Error message in human readable form that explains the reason for failure to proceed with the checkout
|
|
|
|
|
|
(e.g. "Sorry, somebody just bought the last of our amazing black T-shirts while you were busy filling
|
|
|
|
|
|
out your payment details. Please choose a different color or garment!").
|
|
|
|
|
|
Telegram will display this message to the user.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type error_message: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, True is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.ANSWER_PRE_CHECKOUT_QUERY, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
2017-10-22 14:09:11 +03:00
|
|
|
|
# === Games ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#games
|
|
|
|
|
|
|
2018-07-28 19:16:54 +03:00
|
|
|
|
async def set_passport_data_errors(self,
|
|
|
|
|
|
user_id: base.Integer,
|
|
|
|
|
|
errors: typing.List[types.PassportElementError]) -> base.Boolean:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Informs a user that some of the Telegram Passport elements they provided contains errors.
|
|
|
|
|
|
The user will not be able to re-submit their Passport to you until the errors are fixed
|
|
|
|
|
|
(the contents of the field for which you returned the error must change).
|
|
|
|
|
|
Returns True on success.
|
|
|
|
|
|
|
|
|
|
|
|
Use this if the data submitted by the user doesn't satisfy the standards your service
|
|
|
|
|
|
requires for any reason. For example, if a birthday date seems invalid, a submitted document
|
|
|
|
|
|
is blurry, a scan shows evidence of tampering, etc. Supply some details in the error message
|
|
|
|
|
|
to make sure the user knows how to correct the issues.
|
|
|
|
|
|
|
|
|
|
|
|
Source https://core.telegram.org/bots/api#setpassportdataerrors
|
|
|
|
|
|
|
|
|
|
|
|
:param user_id: User identifier
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
|
|
|
|
|
:param errors: A JSON-serialized array describing the errors
|
|
|
|
|
|
:type errors: :obj:`typing.List[types.PassportElementError]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Returns True on success
|
2018-07-28 19:16:54 +03:00
|
|
|
|
:rtype: :obj:`base.Boolean`
|
|
|
|
|
|
"""
|
|
|
|
|
|
errors = prepare_arg(errors)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SET_PASSPORT_DATA_ERRORS, payload)
|
2018-07-28 19:16:54 +03:00
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
# === Games ===
|
|
|
|
|
|
# https://core.telegram.org/bots/api#games
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def send_game(self, chat_id: base.Integer, game_short_name: base.String,
|
|
|
|
|
|
disable_notification: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
reply_to_message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
reply_markup: typing.Union[types.InlineKeyboardMarkup, None] = None) -> types.Message:
|
2017-07-24 21:46:43 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to send a game.
|
2017-07-24 21:46:43 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#sendgame
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param chat_id: Unique identifier for the target chat
|
|
|
|
|
|
:type chat_id: :obj:`base.Integer`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param game_short_name: Short name of the game, serves as the unique identifier for the game. \
|
|
|
|
|
|
Set up your games via Botfather.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:type game_short_name: :obj:`base.String`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param disable_notification: Sends the message silently. Users will receive a notification with no sound
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param reply_to_message_id: If the message is a reply, ID of the original message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param reply_markup: A JSON-serialized object for an inline keyboard
|
2017-10-22 13:59:45 +03:00
|
|
|
|
If empty, one ‘Play game_title’ button will be shown. If not empty, the first button must launch the game.
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, the sent Message is returned
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`types.Message`
|
|
|
|
|
|
"""
|
|
|
|
|
|
reply_markup = prepare_arg(reply_markup)
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SEND_GAME, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2017-10-22 13:59:45 +03:00
|
|
|
|
async def set_game_score(self, user_id: base.Integer, score: base.Integer,
|
|
|
|
|
|
force: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
disable_edit_message: typing.Union[base.Boolean, None] = None,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String,
|
|
|
|
|
|
None] = None) -> types.Message or base.Boolean:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to set the score of the specified user in a game.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#setgamescore
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: User identifier
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
|
|
|
|
|
:param score: New score, must be non-negative
|
|
|
|
|
|
:type score: :obj:`base.Integer`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:param force: Pass True, if the high score is allowed to decrease
|
2017-10-22 13:59:45 +03:00
|
|
|
|
This can be useful when fixing mistakes or banning cheaters
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type force: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-22 13:59:45 +03:00
|
|
|
|
:param disable_edit_message: Pass True, if the game message should not be automatically
|
|
|
|
|
|
edited to include the current scoreboard
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type disable_edit_message: :obj:`typing.Union[base.Boolean, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: On success, if the message was sent by the bot, returns the edited Message, otherwise returns True
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Returns an error, if the new score is not greater than the user's
|
|
|
|
|
|
current score in the chat and force is False.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.Union[types.Message, base.Boolean]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
|
2018-08-13 22:42:10 +03:00
|
|
|
|
result = await self.request(api.Methods.SET_GAME_SCORE, payload)
|
2017-10-20 18:48:08 +03:00
|
|
|
|
if isinstance(result, bool):
|
|
|
|
|
|
return result
|
|
|
|
|
|
return types.Message(**result)
|
|
|
|
|
|
|
2018-03-18 17:51:39 +03:00
|
|
|
|
async def get_game_high_scores(self, user_id: base.Integer,
|
|
|
|
|
|
chat_id: typing.Union[base.Integer, None] = None,
|
2017-10-22 13:59:45 +03:00
|
|
|
|
message_id: typing.Union[base.Integer, None] = None,
|
|
|
|
|
|
inline_message_id: typing.Union[base.String,
|
|
|
|
|
|
None] = None) -> typing.List[types.GameHighScore]:
|
2017-10-20 18:48:08 +03:00
|
|
|
|
"""
|
2017-10-22 13:59:45 +03:00
|
|
|
|
Use this method to get data for high score tables.
|
|
|
|
|
|
|
|
|
|
|
|
This method will currently return scores for the target user, plus two of his closest neighbors on each side.
|
|
|
|
|
|
Will also return the top three users if the user and his neighbors are not among them.
|
|
|
|
|
|
Please note that this behavior is subject to change.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
2017-11-11 12:36:35 +02:00
|
|
|
|
Source: https://core.telegram.org/bots/api#getgamehighscores
|
2017-10-20 18:48:08 +03:00
|
|
|
|
|
|
|
|
|
|
:param user_id: Target user id
|
|
|
|
|
|
:type user_id: :obj:`base.Integer`
|
|
|
|
|
|
:param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type chat_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param message_id: Required if inline_message_id is not specified. Identifier of the sent message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type message_id: :obj:`typing.Union[base.Integer, None]`
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message
|
2017-10-21 19:19:20 +03:00
|
|
|
|
:type inline_message_id: :obj:`typing.Union[base.String, None]`
|
2018-08-05 20:37:49 +03:00
|
|
|
|
:return: Will return the score of the specified user and several of his neighbors in a game
|
2017-10-22 13:59:45 +03:00
|
|
|
|
On success, returns an Array of GameHighScore objects.
|
|
|
|
|
|
This method will currently return scores for the target user,
|
|
|
|
|
|
plus two of his closest neighbors on each side. Will also return the top three users if the
|
|
|
|
|
|
user and his neighbors are not among them.
|
2017-10-20 18:48:08 +03:00
|
|
|
|
:rtype: :obj:`typing.List[types.GameHighScore]`
|
|
|
|
|
|
"""
|
|
|
|
|
|
payload = generate_payload(**locals())
|
|
|
|
|
|
result = await self.request(api.Methods.GET_GAME_HIGH_SCORES, payload)
|
|
|
|
|
|
|
|
|
|
|
|
return [types.GameHighScore(**gamehighscore) for gamehighscore in result]
|