Compliance with bot API 7.9
Implemented a system to get administration privileges if running the bot in absence of administrators (the token is provided through the command line).
This commit is contained in:
parent
02386d69da
commit
db240ce199
@ -11,7 +11,7 @@ __author__ = "Davide Testa"
|
|||||||
__email__ = "davide@davte.it"
|
__email__ = "davide@davte.it"
|
||||||
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
||||||
__license__ = "GNU General Public License v3.0"
|
__license__ = "GNU General Public License v3.0"
|
||||||
__version__ = "2.10.5"
|
__version__ = "2.10.6"
|
||||||
__maintainer__ = "Davide Testa"
|
__maintainer__ = "Davide Testa"
|
||||||
__contact__ = "t.me/davte"
|
__contact__ = "t.me/davte"
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ from davtelepot.messages import default_admin_messages, default_talk_messages
|
|||||||
from davtelepot.bot import Bot
|
from davtelepot.bot import Bot
|
||||||
from davtelepot.utilities import (
|
from davtelepot.utilities import (
|
||||||
async_wrapper, CachedPage, Confirmator, extract, get_cleaned_text,
|
async_wrapper, CachedPage, Confirmator, extract, get_cleaned_text,
|
||||||
get_user, clean_html_string, line_drawing_unordered_list, make_button,
|
get_secure_key, get_user, clean_html_string, line_drawing_unordered_list,
|
||||||
make_inline_keyboard, remove_html_tags, send_part_of_text_file,
|
make_button, make_inline_keyboard, remove_html_tags, send_part_of_text_file,
|
||||||
send_csv_file, make_lines_of_buttons, join_path
|
send_csv_file, make_lines_of_buttons, join_path
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1859,6 +1859,50 @@ async def config_command(bot: Bot, update: dict,
|
|||||||
language=language)
|
language=language)
|
||||||
|
|
||||||
|
|
||||||
|
async def become_administrator(bot: Bot, update: dict,
|
||||||
|
user_record: dict, language: str):
|
||||||
|
"""When the bot has no administrator, become one providing a token.
|
||||||
|
|
||||||
|
The token will be printed to the stdout on the machine running the bot.
|
||||||
|
"""
|
||||||
|
if len(bot.administrators) > 0:
|
||||||
|
return
|
||||||
|
def _get_message(*args):
|
||||||
|
return bot.get_message('admin', 'become_admin', *args,
|
||||||
|
update=update, user_record=user_record,
|
||||||
|
language=language)
|
||||||
|
token = get_cleaned_text(update=update, bot=bot,
|
||||||
|
replace=['become_administrator',
|
||||||
|
'00become_administrator'],
|
||||||
|
strip='/ @_')
|
||||||
|
if token != bot.administration_token:
|
||||||
|
return _get_message('wrong_token')
|
||||||
|
with bot.db as db:
|
||||||
|
db['users'].update({**user_record, 'privileges': 1},
|
||||||
|
['id'])
|
||||||
|
return _get_message('success')
|
||||||
|
|
||||||
|
|
||||||
|
async def create_promotion_command(bot: Bot):
|
||||||
|
"""If bot has no administrators, users can elevate themselves.
|
||||||
|
|
||||||
|
To do so, they need to provide a token, that will be printed to the stdout
|
||||||
|
of the machine running the bot.
|
||||||
|
"""
|
||||||
|
await bot.get_me()
|
||||||
|
bot.administration_token = get_secure_key(length=10)
|
||||||
|
print(f"To become administrator click "
|
||||||
|
f"https://t.me/{bot.name}?start="
|
||||||
|
f"00become_administrator_{bot.administration_token}")
|
||||||
|
@bot.command(command='become_administrator',
|
||||||
|
authorization_level='everybody',
|
||||||
|
aliases=['00become_administrator'])
|
||||||
|
async def _become_administrator(bot, update, user_record, language):
|
||||||
|
return await become_administrator(bot=bot, update=update,
|
||||||
|
user_record=user_record,
|
||||||
|
language=language)
|
||||||
|
|
||||||
|
|
||||||
def init(telegram_bot: Bot,
|
def init(telegram_bot: Bot,
|
||||||
talk_messages: dict = None,
|
talk_messages: dict = None,
|
||||||
admin_messages: dict = None,
|
admin_messages: dict = None,
|
||||||
@ -2088,3 +2132,6 @@ def init(telegram_bot: Bot,
|
|||||||
update=update,
|
update=update,
|
||||||
user_record=user_record,
|
user_record=user_record,
|
||||||
language=language)
|
language=language)
|
||||||
|
|
||||||
|
if len(telegram_bot.administrators) == 0:
|
||||||
|
asyncio.ensure_future(create_promotion_command(bot=telegram_bot))
|
||||||
|
@ -3109,7 +3109,8 @@ class TelegramBot:
|
|||||||
|
|
||||||
async def sendPaidMedia(self, chat_id: Union[int, str], star_count: int,
|
async def sendPaidMedia(self, chat_id: Union[int, str], star_count: int,
|
||||||
media: List[InputPaidMedia],
|
media: List[InputPaidMedia],
|
||||||
caption: str, parse_mode: str,
|
business_connection_id: str = None,
|
||||||
|
caption: str = None, parse_mode: str = None,
|
||||||
caption_entities: List[dict] = None,
|
caption_entities: List[dict] = None,
|
||||||
show_caption_above_media: bool = None,
|
show_caption_above_media: bool = None,
|
||||||
disable_notification: bool = None,
|
disable_notification: bool = None,
|
||||||
@ -3155,3 +3156,35 @@ class TelegramBot:
|
|||||||
'refundStarPayment',
|
'refundStarPayment',
|
||||||
parameters=locals()
|
parameters=locals()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def createChatSubscriptionInviteLink(self, chat_id: Union[int, str],
|
||||||
|
name: str,
|
||||||
|
subscription_period: int,
|
||||||
|
subscription_price: int):
|
||||||
|
"""Create a subscription invite link for a channel chat.
|
||||||
|
|
||||||
|
The bot must have the can_invite_users administrator rights.
|
||||||
|
The link can be edited using the method editChatSubscriptionInviteLink
|
||||||
|
or revoked using the method revokeChatInviteLink.
|
||||||
|
Returns the new invite link as a ChatInviteLink object.
|
||||||
|
See https://core.telegram.org/bots/api#createchatsubscriptioninvitelink
|
||||||
|
for details.
|
||||||
|
"""
|
||||||
|
return await self.api_request(
|
||||||
|
'createChatSubscriptionInviteLink',
|
||||||
|
parameters=locals()
|
||||||
|
)
|
||||||
|
|
||||||
|
async def editChatSubscriptionInviteLink(self, chat_id: Union[int, str],
|
||||||
|
invite_link: str, name: str):
|
||||||
|
"""Edit a subscription invite link created by the bot.
|
||||||
|
|
||||||
|
The bot must have the can_invite_users administrator rights.
|
||||||
|
Returns the edited invite link as a ChatInviteLink object.
|
||||||
|
See https://core.telegram.org/bots/api#editchatsubscriptioninvitelink
|
||||||
|
for details.
|
||||||
|
"""
|
||||||
|
return await self.api_request(
|
||||||
|
'editChatSubscriptionInviteLink',
|
||||||
|
parameters=locals()
|
||||||
|
)
|
||||||
|
@ -22,6 +22,16 @@ davtelepot_messages = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default_admin_messages = {
|
default_admin_messages = {
|
||||||
|
'become_admin': {
|
||||||
|
'success': {
|
||||||
|
'en': "🎉 You are now administrator! 👑",
|
||||||
|
'it': "🎉 Ora hai diritti di amministrazione! 👑",
|
||||||
|
},
|
||||||
|
'wrong_token': {
|
||||||
|
'en': "❌ Wrong token 🚷",
|
||||||
|
'it': "❌ Password errata 🚷",
|
||||||
|
},
|
||||||
|
},
|
||||||
'cancel': {
|
'cancel': {
|
||||||
'button': {
|
'button': {
|
||||||
'en': "↩️ Cancel",
|
'en': "↩️ Cancel",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user