More elegant way of /stop
ping bots
This commit is contained in:
parent
191a2d2ecb
commit
6e95de61e9
@ -14,7 +14,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.1.24"
|
__version__ = "2.1.25"
|
||||||
__maintainer__ = "Davide Testa"
|
__maintainer__ = "Davide Testa"
|
||||||
__contact__ = "t.me/davte"
|
__contact__ = "t.me/davte"
|
||||||
|
|
||||||
|
@ -507,6 +507,41 @@ default_admin_messages = {
|
|||||||
'description': {
|
'description': {
|
||||||
'en': "Stop bots",
|
'en': "Stop bots",
|
||||||
'it': "Ferma i bot"
|
'it': "Ferma i bot"
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "Are you sure you want to stop all bots?\n"
|
||||||
|
"To make them start again you will have to ssh-log "
|
||||||
|
"in server.\n\n"
|
||||||
|
"To restart the bots remotely use the /restart command "
|
||||||
|
"instead (before starting over, a <code>git pull</code> "
|
||||||
|
"is performed).",
|
||||||
|
'it': "Sei sicuro di voler fermare i bot?\n"
|
||||||
|
"Per farli ripartire dovrai accedere al server.\n\n"
|
||||||
|
"Per far ripartire i bot da remoto usa invece il comando "
|
||||||
|
"/restart (prima di ripartire farò un "
|
||||||
|
"<code>git pull</code>)."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'stop_button': {
|
||||||
|
'stop_text': {
|
||||||
|
'en': "Stop bots",
|
||||||
|
'it': "Ferma i bot"
|
||||||
|
},
|
||||||
|
'cancel': {
|
||||||
|
'en': "Cancel",
|
||||||
|
'it': "Annulla"
|
||||||
|
},
|
||||||
|
'confirm': {
|
||||||
|
'en': "Do you really want to stop all bots?",
|
||||||
|
'it': "Vuoi davvero fermare tutti i bot?"
|
||||||
|
},
|
||||||
|
'stopping': {
|
||||||
|
'en': "Stopping bots...",
|
||||||
|
'it': "Arresto in corso..."
|
||||||
|
},
|
||||||
|
'cancelled': {
|
||||||
|
'en': "Operation was cancelled",
|
||||||
|
'it': "Operazione annullata"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -538,10 +573,82 @@ async def _restart_command(bot, update, user_record):
|
|||||||
|
|
||||||
|
|
||||||
async def _stop_command(bot, update, user_record):
|
async def _stop_command(bot, update, user_record):
|
||||||
|
text = bot.get_message(
|
||||||
|
'admin', 'stop_command', 'text',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
)
|
||||||
|
reply_markup = make_inline_keyboard(
|
||||||
|
[
|
||||||
|
make_button(
|
||||||
|
text=bot.get_message(
|
||||||
|
'admin', 'stop_button', 'stop_text',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
),
|
||||||
|
prefix='stop:///',
|
||||||
|
data=['stop']
|
||||||
|
),
|
||||||
|
make_button(
|
||||||
|
text=bot.get_message(
|
||||||
|
'admin', 'stop_button', 'cancel',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
),
|
||||||
|
prefix='stop:///',
|
||||||
|
data=['cancel']
|
||||||
|
)
|
||||||
|
],
|
||||||
|
1
|
||||||
|
)
|
||||||
|
return dict(
|
||||||
|
text=text,
|
||||||
|
parse_mode='HTML',
|
||||||
|
reply_markup=reply_markup
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def stop_bots(bot):
|
||||||
|
"""Stop bots in `bot` class."""
|
||||||
|
await asyncio.sleep(2)
|
||||||
bot.__class__.stop(message='=== STOP ===', final_state=0)
|
bot.__class__.stop(message='=== STOP ===', final_state=0)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
async def _stop_button(bot, update, user_record, data):
|
||||||
|
result, text, reply_markup = '', '', None
|
||||||
|
telegram_id = user_record['telegram_id']
|
||||||
|
command = data[0] if len(data) > 0 else 'None'
|
||||||
|
if command == 'stop':
|
||||||
|
if not Confirmator.get('stop_bots').confirm(telegram_id):
|
||||||
|
return bot.get_message(
|
||||||
|
'admin', 'stop_button', 'confirm',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
)
|
||||||
|
text = bot.get_message(
|
||||||
|
'admin', 'stop_button', 'stopping',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
)
|
||||||
|
result = text
|
||||||
|
# Do not stop bots immediately, otherwise callback query
|
||||||
|
# will never be answered
|
||||||
|
asyncio.ensure_future(stop_bots(bot))
|
||||||
|
elif command == 'cancel':
|
||||||
|
text = bot.get_message(
|
||||||
|
'admin', 'stop_button', 'cancelled',
|
||||||
|
update=update, user_record=user_record
|
||||||
|
)
|
||||||
|
result = text
|
||||||
|
if text:
|
||||||
|
return dict(
|
||||||
|
text=result,
|
||||||
|
edit=dict(
|
||||||
|
text=text,
|
||||||
|
parse_mode='HTML',
|
||||||
|
reply_markup=reply_markup,
|
||||||
|
disable_web_page_preview=True
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def init(bot, talk_messages=None, admin_messages=None, language='en'):
|
def init(bot, talk_messages=None, admin_messages=None, language='en'):
|
||||||
"""Assign parsers, commands, buttons and queries to given `bot`."""
|
"""Assign parsers, commands, buttons and queries to given `bot`."""
|
||||||
if talk_messages is None:
|
if talk_messages is None:
|
||||||
@ -648,3 +755,9 @@ def init(bot, talk_messages=None, admin_messages=None, language='en'):
|
|||||||
authorization_level='admin')
|
authorization_level='admin')
|
||||||
async def stop_command(bot, update, user_record):
|
async def stop_command(bot, update, user_record):
|
||||||
return await _stop_command(bot, update, user_record)
|
return await _stop_command(bot, update, user_record)
|
||||||
|
|
||||||
|
@bot.button(prefix='stop:///', separator='|',
|
||||||
|
description=stop_command_description,
|
||||||
|
authorization_level='admin')
|
||||||
|
async def stop_button(bot, update, user_record, data):
|
||||||
|
return await _stop_button(bot, update, user_record, data)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user