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


Речь идет о боте, которого я сам написал используя 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.

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

Удачи!