-
Notifications
You must be signed in to change notification settings - Fork 0
/
botssh.py
77 lines (55 loc) · 2.87 KB
/
botssh.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from tokens import * # файл с настройками
from datetime import datetime
from subprocess import Popen, PIPE, STDOUT
import operator
import collections
import time
import telepot
poll = 300 # секунд
shellexecution = []
setpolling = []
stopmarkup = {'keyboard': [['Stop']]}
hide_keyboard = {'hide_keyboard': True}
def clearall(chat_id):
if chat_id in shellexecution:
shellexecution.remove(chat_id)
class RPI3Bot(telepot.Bot):
def __init__(self, *args, **kwargs):
super(RPI3Bot, self).__init__(*args, **kwargs)
self._answerer = telepot.helper.Answerer(self)
self._message_with_inline_keyboard = None
def on_chat_message(self, msg):
content_type, chat_type, chat_id = telepot.glance(msg)
print("Your chat_id:" + str(chat_id))
if chat_id in adminchatid: # подгружает токен и id администратора из файла tokens.py
if content_type == 'text':
if msg['text'] == '/start' and chat_id not in shellexecution:
bot.sendMessage(chat_id, "Здравствуйте! для того чтобы начать работать, отправьте команду /shell" )
now = datetime.now()
bot.sendMessage(chat_id, reply, disable_web_page_preview=True)
elif msg['text'] == "Stop":
clearall(chat_id)
bot.sendMessage(chat_id, "Все операции остановлены.", reply_markup=hide_keyboard)
elif msg['text'] == "/shell" and chat_id not in shellexecution:
bot.sendMessage(chat_id, "Отлично, теперь вы можете выполнить команду в терминале.", reply_markup=stopmarkup)
shellexecution.append(chat_id)
elif chat_id in shellexecution:
bot.sendChatAction(chat_id, 'typing')
p = Popen(msg['text'], shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
output = p.stdout.read()
if output != b'':
bot.sendMessage(chat_id, output, disable_web_page_preview=True)
else:
bot.sendMessage(chat_id, "Возникла внутренняя ошибка.. НО(!!!), возможно команда выполнена. Проверьте!", disable_web_page_preview=True)
TOKEN = telegrambot
bot = RPI3Bot(TOKEN)
bot.message_loop()
tr = 0
xx = 0
# держит программу запущенной. через указанное время в переменной poll - перезапускает программу
while 1:
if tr == poll:
tr = 0
timenow = datetime.now()
time.sleep(10) # 10 секунд
tr += 10