Working on manual mode (cotrol bots from terminal).
This commit is contained in:
parent
e56021ae3a
commit
b308e7f335
@ -2,7 +2,7 @@ __author__ = "Davide Testa"
|
||||
__email__ = "davte@libero.it"
|
||||
__credits__ = "Marco Origlia"
|
||||
__license__ = "GNU General Public License v3.0"
|
||||
__version__ = "1.2.6"
|
||||
__version__ = "1.3.0"
|
||||
__maintainer__ = "Davide Testa"
|
||||
__contact__ = "t.me/davte"
|
||||
|
||||
|
@ -27,9 +27,10 @@ import telepot
|
||||
import telepot.aio
|
||||
|
||||
# Project modules
|
||||
from davteutil import Gettable, MyOD
|
||||
from davteutil import (escape_html_chars, get_cleaned_text,
|
||||
make_lines_of_buttons, markdown_check,
|
||||
from davteutil import (Gettable, escape_html_chars, get_cleaned_text,
|
||||
line_drawing_unordered_list,
|
||||
make_lines_of_buttons, markdown_check, MyOD,
|
||||
pick_most_similar_from_list,
|
||||
remove_html_tags, sleep_until)
|
||||
|
||||
|
||||
@ -1631,12 +1632,10 @@ class Bot(telepot.aio.Bot, Gettable):
|
||||
self.to_be_obscured.remove(inline_message_id)
|
||||
return
|
||||
|
||||
async def continue_running(self):
|
||||
"""Get updates.
|
||||
async def get_me(self):
|
||||
"""Get bot information.
|
||||
|
||||
If bot can be got, sets name and telegram_id,
|
||||
awaits preliminary tasks and starts getting updates from telegram.
|
||||
If bot can't be got, restarts all bots in 5 minutes.
|
||||
Restart bots if bot can't be got.
|
||||
"""
|
||||
try:
|
||||
me = await self.getMe()
|
||||
@ -1651,6 +1650,15 @@ class Bot(telepot.aio.Bot, Gettable):
|
||||
await asyncio.sleep(5*60)
|
||||
self.restart_bots()
|
||||
return
|
||||
|
||||
async def continue_running(self):
|
||||
"""Get updates.
|
||||
|
||||
If bot can be got, sets name and telegram_id,
|
||||
awaits preliminary tasks and starts getting updates from telegram.
|
||||
If bot can't be got, restarts all bots in 5 minutes.
|
||||
"""
|
||||
await get_me()
|
||||
for task in self.run_before_loop:
|
||||
await task
|
||||
self.set_default_keyboard()
|
||||
@ -1730,7 +1738,7 @@ class Bot(telepot.aio.Bot, Gettable):
|
||||
@classmethod
|
||||
def run(cls, loop=None):
|
||||
"""Call this method to run the async bots."""
|
||||
if not loop:
|
||||
if loop is None:
|
||||
loop = asyncio.get_event_loop()
|
||||
logging.info(
|
||||
"{sep}{subjvb} STARTED{sep}".format(
|
||||
@ -1752,8 +1760,9 @@ class Bot(telepot.aio.Bot, Gettable):
|
||||
loop.run_until_complete(cls.end_session())
|
||||
except Exception as e:
|
||||
logging.error(
|
||||
'\nYour bot has been stopped. with error \'{}\''.format(
|
||||
e
|
||||
'\nYour bot{vb} been stopped. with error \'{e}\''.format(
|
||||
e=e,
|
||||
vb='s have' if len(cls.instances) > 1 else ' has'
|
||||
),
|
||||
exc_info=True
|
||||
)
|
||||
@ -1764,3 +1773,115 @@ class Bot(telepot.aio.Bot, Gettable):
|
||||
)
|
||||
)
|
||||
return
|
||||
|
||||
@classmethod
|
||||
async def _run_manual_mode(cls):
|
||||
available_bots = MyOD()
|
||||
for code, bot in enumerate(
|
||||
cls.instances.values()
|
||||
):
|
||||
await bot.get_me()
|
||||
available_bots[code] = dict(
|
||||
bot=bot,
|
||||
code=code,
|
||||
name=bot.name
|
||||
)
|
||||
selected_bot = None
|
||||
while selected_bot is None:
|
||||
user_input = input(
|
||||
"\n=============================================\n"
|
||||
"Which bot would you like to control manually?\n"
|
||||
"Available bots:\n{}\n\n\t\t".format(
|
||||
line_drawing_unordered_list(
|
||||
list(
|
||||
"{b[code]:>3} - {b[bot].name}".format(
|
||||
b=bot,
|
||||
)
|
||||
for bot in available_bots.values()
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
if (
|
||||
user_input.isnumeric()
|
||||
and int(user_input) in available_bots
|
||||
):
|
||||
selected_bot = available_bots[int(user_input)]
|
||||
else:
|
||||
selected_bot = pick_most_similar_from_list(
|
||||
[
|
||||
bot['name']
|
||||
for bot in available_bots.values()
|
||||
],
|
||||
user_input
|
||||
)
|
||||
selected_bot = available_bots.get_by_key_val(
|
||||
key='name',
|
||||
val=selected_bot,
|
||||
case_sensitive=False,
|
||||
return_value=True
|
||||
)
|
||||
if selected_bot is None:
|
||||
logging.error("Invalid selection.")
|
||||
continue
|
||||
logging.info(
|
||||
"Bot `{b[name]}` selected.".format(
|
||||
b=selected_bot
|
||||
)
|
||||
)
|
||||
exit_code = await selected_bot['bot']._run_manually()
|
||||
if exit_code == 0:
|
||||
break
|
||||
return
|
||||
|
||||
@classmethod
|
||||
def run_manual_mode(cls, loop=None):
|
||||
"""Run in manual mode: send messages via bots."""
|
||||
if loop is None:
|
||||
loop = asyncio.get_event_loop()
|
||||
logging.info(
|
||||
"=== MANUAL MODE STARTED ==="
|
||||
)
|
||||
try:
|
||||
loop.run_until_complete(
|
||||
cls._run_manual_mode()
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
logging.info(
|
||||
'\n\t\tYour script received a KeyboardInterrupt signal, "\
|
||||
"your bot{} being stopped.'.format(
|
||||
's are' if len(cls.instances) > 1 else ' is'
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(
|
||||
'\nYour bot{vb} been stopped. with error \'{e}\''.format(
|
||||
e=e,
|
||||
vb='s have' if len(cls.instances) > 1 else ' has'
|
||||
),
|
||||
exc_info=True
|
||||
)
|
||||
logging.info(
|
||||
"=== MANUAL MODE STOPPED ==="
|
||||
)
|
||||
|
||||
async def _run_manually(self):
|
||||
user_input = ' choose_addressee'
|
||||
while user_input:
|
||||
try:
|
||||
user_input = input(
|
||||
"Choose an addressee."
|
||||
"\n\t\t"
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
logging.error("Keyboard interrupt.")
|
||||
break
|
||||
logging.info(user_input)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# from davtelepot.custombot import Bot
|
||||
# davtebot = Bot.get('335545766:AAEVvbdqy7OCG7ufxBwKVdBscdfddFF2lmk')
|
||||
# davtetest = Bot.get('279769259:AAEri-FF8AZeLz0LAi4BpPVjkQcKeOOTimo')
|
||||
# Bot.run_manual_mode()
|
||||
print('Work in progress')
|
||||
|
Loading…
x
Reference in New Issue
Block a user