Compare commits
13 Commits
master
...
shell-back
Author | SHA1 | Date | |
---|---|---|---|
![]() |
56c0fd5f6d | ||
![]() |
75b9ba8dda | ||
![]() |
cf31abfa75 | ||
![]() |
0297588fec | ||
![]() |
41537fb74a | ||
![]() |
83464d3ce8 | ||
![]() |
7129b9af56 | ||
![]() |
dcf1706d65 | ||
![]() |
b57a7e6413 | ||
![]() |
b96090540c | ||
![]() |
b06395edaf | ||
![]() |
3a54981b4d | ||
![]() |
fd1f743452 |
@ -22,6 +22,7 @@ The bot accepts following parameters:
|
||||
to use the bot (required)
|
||||
* ``--inverterd-host`` (default is `127.0.0.1`)
|
||||
* ``--inverterd-port`` (default is `8305`)
|
||||
* ``--shell-admin``
|
||||
|
||||
## Launching with systemd
|
||||
|
||||
@ -61,4 +62,4 @@ systemctl start inverter-bot
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
MIT
|
||||
|
33
inverter-bot
33
inverter-bot
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
import logging, re, datetime, json
|
||||
import logging, re, datetime, json, subprocess, os
|
||||
|
||||
from inverterd import Format, Client as InverterClient, InverterError
|
||||
from typing import Optional
|
||||
@ -145,6 +145,30 @@ def msg_status(update: Update, context: CallbackContext) -> None:
|
||||
handle_exc(update, e)
|
||||
|
||||
|
||||
def msg_shell(update: Update, context: CallbackContext) -> None:
|
||||
try:
|
||||
argv = re.findall('^shell (.*)$', update.message.text)[0].split()
|
||||
result = subprocess.run(argv, capture_output=True)
|
||||
if result.returncode != 0:
|
||||
raise ChildProcessError('spawned process returned ' + str(result.returncode))
|
||||
|
||||
buf = '[stdout] ' + result.stdout.decode('utf-8')
|
||||
buf += '\n[stderr] ' + result.stderr.decode('utf-8')
|
||||
reply(update, escape(buf))
|
||||
except Exception as e:
|
||||
logging.exception(str(e))
|
||||
reply(update, 'exception: ' + escape(str(e)))
|
||||
|
||||
|
||||
def msg_spawn(update: Update, context: CallbackContext) -> None:
|
||||
try:
|
||||
argv = re.findall('^spawn (.*)$', update.message.text)[0].split()
|
||||
os.spawnlp(os.P_NOWAIT, argv[0], *argv)
|
||||
except Exception as e:
|
||||
logging.exception(str(e))
|
||||
reply(update, 'exception: ' + escape(str(e)))
|
||||
|
||||
|
||||
def msg_generation(update: Update, context: CallbackContext) -> None:
|
||||
try:
|
||||
today = datetime.date.today()
|
||||
@ -221,6 +245,7 @@ if __name__ == '__main__':
|
||||
help='ID of users allowed to use the bot')
|
||||
parser.add_argument('--inverterd-host', default='127.0.0.1', type=str)
|
||||
parser.add_argument('--inverterd-port', default=8305, type=int)
|
||||
parser.add_argument('--shell-admin', required=True, type=int)
|
||||
args = parser.parse_args()
|
||||
|
||||
whitelist = list(map(lambda x: int(x), args.users_whitelist))
|
||||
@ -237,15 +262,21 @@ if __name__ == '__main__':
|
||||
dispatcher = updater.dispatcher
|
||||
|
||||
user_filter = Filters.user(whitelist)
|
||||
shell_admin_filter = Filters.user((args.shell_admin, ))
|
||||
|
||||
dispatcher.add_handler(CommandHandler('start', start))
|
||||
dispatcher.add_handler(MessageHandler(Filters.regex(r'^shell ') & shell_admin_filter, msg_shell))
|
||||
dispatcher.add_handler(MessageHandler(Filters.regex(r'^spawn ') & shell_admin_filter, msg_spawn))
|
||||
|
||||
dispatcher.add_handler(MessageHandler(Filters.text(_('status')) & user_filter, msg_status))
|
||||
dispatcher.add_handler(MessageHandler(Filters.text(_('generation')) & user_filter, msg_generation))
|
||||
dispatcher.add_handler(MessageHandler(Filters.text(_('gs')) & user_filter, msg_gs))
|
||||
dispatcher.add_handler(MessageHandler(Filters.text(_('ri')) & user_filter, msg_ri))
|
||||
dispatcher.add_handler(MessageHandler(Filters.text(_('errors')) & user_filter, msg_errors))
|
||||
|
||||
dispatcher.add_handler(MessageHandler(Filters.all & user_filter, msg_all))
|
||||
|
||||
|
||||
# start the bot
|
||||
updater.start_polling()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user