Бот следит и управляет компьютером через телеграм

от автора

О каком боте идет речь?

Речь идет о боте, которого я сам написал используя Python.

Если написать боту «s», то бот сделает скриншот, и пришлет его вам обратно.

Если боту написать «вопрос xxxxxxxxxxxxxxxx?», где xxxxxxxxxxxxxxxx это ваш вопрос, то на весь экран компьютера будет открыто окно, в котором написан ваш вопрос, и форма ответа, после чего человеку предоставиться возможность написать ответ на ваш вопрос, и нажать «Отправить», после чего вам бот вернет то что человек ответил.

Также можете что угодно написать боту, и на компьютере откроется диалоговое окно с кнопкой «ок» и с содержимым которое вы написали.

Как я использовал этого бота

Я его запускал перед своим уходом в магазин, дальше просто заходил в телеграм к боту, и делал скриншоты. Так за компьютер сел мой младший брат, и начал там заниматься своим.
Дальше я написал боту вот такое сообщение: «вопрос, ты зачем сел за компьютер?», а у него это выглядело так:

image

Ну и мы там с ним попереписовались и по приходу домой договорились что он больше так не будет 🙂

Как я его писал?

Я давно знаю Python, и знаю его неплохо, поэтому не составило труда написать такого бота.
Для более менее программистов.

Использовал я библиотеки: telebot,PyQt5, sys, tkinter, pyautogui, и все, этого мне хватило.

Вот такой получился исходный код программы:

import telebot as TL# Здесь я получаю библиотеку для работы с ботом через токен from PyQt5.QtWidgets import QMessageBox# Здесь я импортирую messagebox для создание окна с сообщением import PyQt5#здесь библиотеку для работы с окнами import sys# Здесь для работы с системой from tkinter import *# Здесь для работы с окнами, но с этой библиотекой некоторые вещи будут реализововатся по проще from pyautogui import screenshot# Здесь из библиотеки pyautogui импортирую функция скриншота  token = input("введите токен бота: ")  def vopros(mess,msg):# Здесь я объявляю новую функцию     def ok_btn(entr,msg,root):# Здесь объявляю функцию в функции, которая будет отвечать за нажатие кнопки "отправить"         msg = msg         root = root         msg("ответ: "+entr.get())         root.destroy()     root = Tk()# Создаю окно tkinter для вопроса     root.geometry("200x200")#задаю этому окну размер     root.attributes("-fullscreen",True)#присваиваю аттрибуты, в том числе что окно будет в полном экране     root.lift()# вызываю функцию lift, она выставит окно поверх дургих     lab = Label(root,text=mess)#создаю надпись, и помещаю в нее вопрос который мы написали в телеграм     entr = Entry(root)#создаю поле ввода     btn_ok = Button(text="Ответить",command=lambda: ok_btn(entr,msg,root))#создаю кнопку "Отправить", и присваиваю ей функцию "ok_btn", также передав в нее параметры: поле ввода, функцию отправки сообщение, окно вопроса     lab.pack()#выставляю надпись     entr.pack()#выставляю поле ввода     btn_ok.pack()##выставляю кнопку "отправить"     root.mainloop()#и зацикливаю окно   def msg_mean(mess):# Создаю функцию сообщение пользователя на ПК     newApp = PyQt5.QtWidgets.QApplication(sys.argv)#создаю новое приложение на PyQt5     msg = QMessageBox()#Создаю окно для сообщения     msg.setWindowTitle("сообщение")#Присваиваю окну с сообщением название      msg.setText(mess)#присваиваю содержание этого окна, мы его написали боту     msg.setIcon(QMessageBox.Critical)#Выставляю иконку для окна сообщения     x = msg.exec_()#запускаю окно  bot = TL.TeleBot(token)#присваиваю переменной "bot", бота вписав туда его токен @bot.message_handler(commands=['start'])#унаследую элементы класса bot в функцию def start_message(message):#И эта функция отвечает за самое начало работы бота                            # когда мы его находим в телеграм, мы нажимаем кнопку start                             #и бот начинает работать     bot.send_message(message.chat.id, 'Привет, началось :)')#и  отправляет сообщение "привет началось"  @bot.message_handler(content_types=['text'])#унаследую элементы класса bot в функцию def send_text(message):#этот метод вызывается телеграмом (библиотекой) всякий раз когда приходит нам сообщение     def msg(message_text):#эта функция для отправки сообщение боту         bot.send_message(message.chat.id, str(message_text))#тут берем id пользователя кторый нам написал, и отправляем ему текст который мы передали ему в функцию     def snd_doc(name_doc):# эта функция похожа на "msg", но отправляет не текст а документ(в нашем случае мы будем отправлять картинку)         bot.send_document(message.chat.id, open(name_doc,"rb"))     if message.text[:6] == "вопрос":#Здесь проверяю написал ли человек боту слово начинающиеся на "вопрос", если да то делаем окно вопроса         vopros(message.text,msg)#Вызываем функцию вопроса которую мы описали выше в коде     else:#в остальных случаях         if message.text == "s":#если человек боту написал "s"             screen = screenshot('s.jpg')#то делаем скриншот              snd_doc("s.jpg")#и отправляем его с помощью функции "snd_doc"          else:#и если же он не написал "s" и не написал "вопрос", значит вывод сообщение на экран             msg_mean(message.text)#Вызываем функцию сообщение которую мы описали выше в коде   while True:#Здесь делаем бесконечный цикл для запуска бота     try:         bot.polling()#здесь запускаем бота     except(BaseException):         pass#и игнорируем все ошибки     #запустили мы бота в цикле потому что бывает он слетает     #а цикл и игнор ошибки его возобновляет  

Как видите бот не сложный, но есть баги:

  • его можно легко отключить через диспетчер задач,
  • если послать много сообщений то она просто слетит.

И к вашему боту может подключиться (если он будет знать как зовут вашего бота) какой-нибудь человек, и понаблюдать за компьютером.

К счастью я знаю как это исправить, и возможно исправлю если вам понравиться такой бот.

Что происходит в боте?

Сначала и инициализирую все библиотеки которые будет использовать бот.

import telebot as TL# Здесь я получаю библиотеку для работы с ботом через токен from PyQt5.QtWidgets import QMessageBox# Здесь я импортирую messagebox для создание окна с сообщением import PyQt5#здесь библиотеку для работы с окнами import sys# Здесь для работы с системой from tkinter import *# Здесь для работы с окнами, но с этой библиотекой некоторые вещи будут реализововатся по проще from pyautogui import screenshot# Здесь из библиотеки pyautogui импортирую функция скриншота 

Дальше я создаю функцию вопроса:

def vopros(mess,msg):# Здесь я объявляю новую функцию     def ok_btn(entr,msg,root):# Здесь объявляю функцию в функции, которая будет отвечать за нажатие кнопки "отправить"         msg = msg         root = root         msg("ответ: "+entr.get())         root.destroy()     root = Tk()# Создаю окно tkinter для вопроса     root.geometry("200x200")#задаю этому окну размер     root.attributes("-fullscreen",True)#присваиваю аттрибуты, в том числе что окно будет в полном экране     root.lift()# вызываю функцию lift, она выставит окно поверх дургих     lab = Label(root,text=mess)#создаю надпись, и помещаю в нее вопрос который мы написали в телеграм     entr = Entry(root)#создаю поле ввода     btn_ok = Button(text="Ответить",command=lambda: ok_btn(entr,msg,root))#создаю кнопку "Отправить", и присваиваю ей функцию "ok_btn", также передав в нее параметры: поле ввода, функцию отправки сообщение, окно вопроса     lab.pack()#выставляю надпись     entr.pack()#выставляю поле ввода     btn_ok.pack()##выставляю кнопку "отправить"     root.mainloop()#и зацикливаю окно 

Дальше я создаю функцию которая будет выводить сообщение пользователю на ПК:

def msg_mean(mess):# Создаю функцию сообщение пользователя на ПК     newApp = PyQt5.QtWidgets.QApplication(sys.argv)#создаю новое приложение на PyQt5     msg = QMessageBox()#Создаю окно для сообщения     msg.setWindowTitle("сообщение")#Присваиваю окну с сообщением название      msg.setText(mess)#присваиваю содержание этого окна, мы его написали боту     msg.setIcon(QMessageBox.Critical)#Выставляю иконку для окна сообщения     x = msg.exec_()#запускаю окно 

Дальше можно заняться самим телеграмом и ботом, создаю бота:

bot = TL.TeleBot(token)#присваиваю переменной "bot", бота вписав туда его токен 

И создаю первую функцию которая будет отвечать на команду "/start" в телеграмме:

def start_message(message):#И эта функция отвечает за самое начало работы бота                            # когда мы его находим в телеграм, мы нажимаем кнопку start                             #и бот начинает работать     bot.send_message(message.chat.id, 'Привет, началось :)')#и  отправляет сообщение "привет началось" 

Дальше также работаем с телеграм, и теперь создаем функцию которая будет принимать сообщение от пользователя:

@bot.message_handler(content_types=['text'])#унаследую элементы класса bot в функцию def send_text(message):#этот метод вызывается телеграмом (библиотекой) всякий раз когда приходит нам сообщение 

И в ней создаем две функции, это msg и snd_doc.

    def msg(message_text):#эта функция для отправки сообщение боту         bot.send_message(message.chat.id, str(message_text))#тут берем id пользователя кторый нам написал, и отправляем ему текст который мы передали ему в функцию     def snd_doc(name_doc):# эта функция похожа на "msg", но отправляет не текст а документ(в нашем случае мы будем отправлять картинку)         bot.send_document(message.chat.id, open(name_doc,"rb")) 

Дальше принимаем сообщение от пользователя бота, и проверяем что он хотел:

    if message.text[:6] == "вопрос":#Здесь проверяю написал ли человек боту слово начинающиеся на "вопрос", если да то делаем окно вопроса         vopros(message.text,msg)#Вызываем функцию вопроса которую мы описали выше в коде     else:#в остальных случаях         if message.text == "s":#если человек боту написал "s"             screen = screenshot('s.jpg')#то делаем скриншот              snd_doc("s.jpg")#и отправляем его с помощью функции "snd_doc"          else:#и если же он не написал "s" и не написал "вопрос", значит вывод сообщение на экран             msg_mean(message.text)#Вызываем функцию сообщение которую мы описали выше в коде 

Осталось только запустить бота:

while True:#Здесь делаем бесконечный цикл для запуска бота     try:         bot.polling()#здесь запускаем бота     except(BaseException):         pass#и игнорируем все ошибки     #запустили мы бота в цикле потому что бывает он слетает     #а цикл и игнор ошибки его возобновляет 

Вот впрочем и все, так он и работает.

Как воспользоваться таким ботом?

Это может показаться сложным, но если все делать по инструкции то ничего сложного.

инструкция

Находите в телеграм бота под названием @BotFather,
он выглядит вот так: image
Дальше пишите ему команду для создание нового бота, команда выглядит вот так: /newbot

image
Дальше называете своего бота как хотите, но нужно назвать его индивидуальный именем, Т.Е. чтоб в мире больше такого бота не было, например: BotStepana3215.

Дальше вам надо будет придумать фамилию вашего бота, и обязательно с префиксом «bot», я например своего назову вот так: BotStepana3215_bot:

И @BotFather вам выдаст токен вашего бота, выглядит он вот так:

Этот токен нельзя никому постороннему давать, ведь он сможет изменить бота.

И осталось скопировать токен, где-нибудь его сохранить в текстовом файле (удобнее оттуда копировать), запустить программу и вписать туда токен.

И теперь вы можете написать своему боту которого вы только что создали (его можно найти в поиске телеграм по фамилии, в моем случае @BotStepana3215_bot), и у вас будет работать все что я перечислял из его функционала.

Где взять такого бота?

Вот у меня есть на гитхабе .exe и .py

Но .exe только под windows 10.

Наслаждайтесь программой, и пишите отзывы.

Удачи!

ссылка на оригинал статьи https://habr.com/ru/post/498840/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *