PCToolsBot.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. import telebot
  2. import os
  3. import webbrowser
  4. import requests
  5. import platform
  6. import ctypes
  7. import mouse
  8. import PIL.ImageGrab
  9. import cv2
  10. from PIL import Image, ImageGrab, ImageDraw
  11. from pySmartDL import SmartDL
  12. from telebot import types
  13. from telebot import apihelper
  14. ######Примеры прокси
  15. #apihelper.proxy = {'https':'socks5://userproxy:password@proxy_address:port'}
  16. #apihelper.proxy = {'http':'mtproto://password@proxy:port'}
  17. #apihelper.proxy = {'https': 'socks5://proxy:port'}
  18. #apihelper.proxy = {'https': 'http://proxy:port'}
  19. my_id = 123456789
  20. bot_token = '1234567:ASDFGHJKLQWERTY'
  21. bot = telebot.TeleBot(bot_token)
  22. class User:
  23. def __init__(self):
  24. keys = ['urldown', 'fin', 'curs']
  25. for key in keys:
  26. self.key = None
  27. User.curs = 50
  28. ##Клавиатура меню
  29. menu_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True,one_time_keyboard=False)
  30. btnscreen = types.KeyboardButton('📷Быстрый скриншот')
  31. btnscreendoc = types.KeyboardButton('🖼Полный скриншот')
  32. btnwebcam = types.KeyboardButton('📹Фото вебкамеры')
  33. btnmouse = types.KeyboardButton('🖱Управление мышкой')
  34. btnfiles = types.KeyboardButton('📂Файлы и процессы')
  35. btnaddit = types.KeyboardButton('❇️Дополнительно')
  36. btnmsgbox = types.KeyboardButton('📩Отправка уведомления')
  37. btninfo = types.KeyboardButton('❗️Информация')
  38. menu_keyboard.row(btnscreen, btnscreendoc)
  39. menu_keyboard.row(btnwebcam, btnmouse)
  40. menu_keyboard.row(btnfiles, btnaddit)
  41. menu_keyboard.row(btninfo, btnmsgbox)
  42. #Клавиатура Файлы и Процессы
  43. files_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True,one_time_keyboard=False)
  44. btnstart = types.KeyboardButton('✔️Запустить')
  45. btnkill = types.KeyboardButton('❌Замочить процесс')
  46. btndown = types.KeyboardButton('⬇️Скачать файл')
  47. btnupl = types.KeyboardButton('⬆️Загрузить файл')
  48. btnurldown = types.KeyboardButton('🔗Загрузить по ссылке')
  49. btnback = types.KeyboardButton('⏪Назад⏪')
  50. files_keyboard.row(btnstart, btnkill)
  51. files_keyboard.row(btndown, btnupl)
  52. files_keyboard.row(btnurldown, btnback)
  53. #Клавиатура Дополнительно
  54. additionals_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True,one_time_keyboard=False)
  55. btnweb = types.KeyboardButton('🔗Перейти по ссылке')
  56. btncmd = types.KeyboardButton('✅Выполнить команду')
  57. btnoff = types.KeyboardButton('⛔️Выключить компьютер')
  58. btnreb = types.KeyboardButton('♻️Перезагрузить компьютер')
  59. btninfo = types.KeyboardButton('🖥О компьютере')
  60. btnback = types.KeyboardButton('⏪Назад⏪')
  61. additionals_keyboard.row(btnoff, btnreb)
  62. additionals_keyboard.row(btncmd, btnweb)
  63. additionals_keyboard.row(btninfo, btnback)
  64. #Клавиатура мышь
  65. mouse_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=False)
  66. btnup = types.KeyboardButton('⬆️')
  67. btndown = types.KeyboardButton('⬇️')
  68. btnleft = types.KeyboardButton('⬅️')
  69. btnright = types.KeyboardButton('➡️')
  70. btnclick = types.KeyboardButton('🆗')
  71. btnback = types.KeyboardButton('⏪Назад⏪')
  72. btncurs = types.KeyboardButton('Указать размах курсора')
  73. mouse_keyboard.row(btnup)
  74. mouse_keyboard.row(btnleft, btnclick, btnright)
  75. mouse_keyboard.row(btndown)
  76. mouse_keyboard.row(btnback, btncurs)
  77. info_msg = '''
  78. *О командах*
  79. _📷Быстрый скриншот_ - отправляет скриншот экрана
  80. _🖼Полный скриншот_ - отправляет скриншот экрана без сжатия
  81. _📹Фото вебкамеры_ - отправляет фотографию с вебкамеры
  82. _🖱Управление мышкой_ - переходит меню управления мышкой
  83. _📂Файлы и процессы_ - переходит в меню с управлением файлов и процессов
  84. _❇️Дополнительно_ - переходит в меню с доп. функциями
  85. _📩Отправка уведомления_ - пришлет на ПК окно с сообщением(msgbox)
  86. _⏪Назад⏪_ - возвращает в главное меню
  87. _🔗Перейти по ссылке_ - переходит по указанной ссылке(важно указать "http://" или "https://" для открытия ссылки в стандартном браузере, а не IE)
  88. _✅Выполнить команду_ - выполняет в cmd любую указанную команду
  89. _⛔️Выключить компьютер_ - моментально выключает компьютер
  90. _♻️Перезагрузить компьютер_ - моментально перезагружает компьютер
  91. _🖥О компьютере_ - показыввает имя пользователя, ip, операционную систему и процессор
  92. _❌Замочить процесс_ - завершает любой процесс
  93. _✔️Запустить_ - открывает любые файлы(в том числе и exe)
  94. _⬇️Скачать файл_ - скачивает указанный файл с вашего компьютера
  95. _⬆️Загрузить файл_ - загружает файл на ваш компьютер
  96. _🔗Загрузить по ссылке_ - загружает файл на ваш компьютер по прямой ссылке
  97. *Сайт разработчика:* [okronix.ru](https://okronix.ru)
  98. *Телеграм канал разработчика:* [@devFRAME](https://t.me/+fsTXjnEspow3YmUy)
  99. *Репозиторий GitHub:* [КЛИК](https://github.com/Okronix/PCToolsBot)
  100. *Поддержать разработчика:* [КЛИК](https://pay.cloudtips.ru/p/105e5b0a)
  101. '''
  102. MessageBox = ctypes.windll.user32.MessageBoxW
  103. if os.path.exists("msg.pt"):
  104. pass
  105. else:
  106. bot.send_message(my_id, "Спасибо, что выбрали данного Бота!\nСоветую сначала прочитать все в меню \"❗️Информация\"\n\n*Телеграм канал разработчика:* [@devFRAME](https://t.me/+5SHcAW68EoZjN2Vi)\n*Репозиторий GitHub:* [КЛИК](https://github.com/Okronix/PCToolsBot)\n*Поддержать разработчика:* [КЛИК](https://pay.cloudtips.ru/p/105e5b0a)", parse_mode = "markdown")
  107. MessageBox(None, f'На вашем ПК запущена программа PC Tools Bot для управления компьютером\nДанное сообщения является разовым', '!ВНИМАНИЕ!', 0)
  108. f = open('msg.pt', 'tw', encoding='utf-8')
  109. f.close
  110. bot.send_message(my_id, "ПК запущен", reply_markup = menu_keyboard)
  111. @bot.message_handler(content_types=["text"])
  112. def get_text_messages(message):
  113. if message.from_user.id == my_id:
  114. if message.text == "📷Быстрый скриншот":
  115. bot.send_chat_action(my_id, 'upload_photo')
  116. try:
  117. get_screenshot()
  118. bot.send_photo(my_id, open("screen_with_mouse.png", "rb"))
  119. os.remove("screen.png")
  120. os.remove("screen_with_mouse.png")
  121. except:
  122. bot.send_message(my_id, "Компьютер заблокирован")
  123. elif message.text == "🖼Полный скриншот":
  124. bot.send_chat_action(my_id, 'upload_document')
  125. try:
  126. get_screenshot()
  127. bot.send_document(my_id, open("screen_with_mouse.png", "rb"))
  128. os.remove("screen.png")
  129. os.remove("screen_with_mouse.png")
  130. except:
  131. bot.send_message(my_id, "Компьютер заблокирован")
  132. elif message.text == "📹Фото вебкамеры":
  133. bot.send_chat_action(my_id, 'upload_photo')
  134. try:
  135. cap = cv2.VideoCapture(0)
  136. ret, frame = cap.read()
  137. cv2.imwrite('webcam.png', frame)
  138. cap.release()
  139. bot.send_photo(my_id, open("webcam.png", "rb"))
  140. os.remove("webcam.png")
  141. except:
  142. bot.send_message(my_id, "Компьютер заблокирован")
  143. elif message.text == "🖱Управление мышкой":
  144. bot.send_message(my_id, "🖱Управление мышкой", reply_markup = mouse_keyboard)
  145. bot.register_next_step_handler(message, mouse_process)
  146. elif message.text == "⏪Назад⏪":
  147. back(message)
  148. elif message.text == "📂Файлы и процессы":
  149. bot.send_message(my_id, "📂Файлы и процессы", reply_markup = files_keyboard)
  150. bot.register_next_step_handler(message, files_process)
  151. elif message.text == "❇️Дополнительно":
  152. bot.send_message(my_id, "❇️Дополнительно", reply_markup = additionals_keyboard)
  153. bot.register_next_step_handler(message, addons_process)
  154. elif message.text == "📩Отправка уведомления":
  155. bot.send_message(my_id, "Укажите текст уведомления:")
  156. bot.register_next_step_handler(message, messaga_process)
  157. elif message.text == "❗️Информация":
  158. bot.send_message(my_id, info_msg, parse_mode = "markdown")
  159. else:
  160. pass
  161. else:
  162. info_user(message)
  163. def addons_process(message):
  164. if message.from_user.id == my_id:
  165. bot.send_chat_action(my_id, 'typing')
  166. if message.text == "🔗Перейти по ссылке":
  167. bot.send_message(my_id, "Укажите ссылку: ")
  168. bot.register_next_step_handler(message, web_process)
  169. elif message.text == "✅Выполнить команду":
  170. bot.send_message(my_id, "Укажите консольную команду: ")
  171. bot.register_next_step_handler(message, cmd_process)
  172. elif message.text == "⛔️Выключить компьютер":
  173. bot.send_message(my_id, "Выключение компьютера...")
  174. os.system('shutdown -s /t 0 /f')
  175. bot.register_next_step_handler(message, addons_process)
  176. elif message.text == "♻️Перезагрузить компьютер":
  177. bot.send_message(my_id, "Перезагрузка компьютера...")
  178. os.system('shutdown -r /t 0 /f')
  179. bot.register_next_step_handler(message, addons_process)
  180. elif message.text == "🖥О компьютере":
  181. req = requests.get('https://api.ipify.org')
  182. ip = req.text
  183. uname = os.getlogin()
  184. windows = platform.platform()
  185. processor = platform.processor()
  186. bot.send_message(my_id, f"*Пользователь:* {uname}\n*IP:* {ip}\n*ОС:* {windows}\n*Процессор:* {processor}", parse_mode = "markdown")
  187. bot.register_next_step_handler(message, addons_process)
  188. elif message.text == "⏪Назад⏪":
  189. back(message)
  190. else:
  191. pass
  192. else:
  193. info_user(message)
  194. def files_process(message):
  195. if message.from_user.id == my_id:
  196. bot.send_chat_action(my_id, 'typing')
  197. if message.text == "❌Замочить процесс":
  198. bot.send_message(my_id, "Укажите название процесса: ")
  199. bot.register_next_step_handler(message, kill_process)
  200. elif message.text == "✔️Запустить":
  201. bot.send_message(my_id, "Укажите путь до файла: ")
  202. bot.register_next_step_handler(message, start_process)
  203. elif message.text == "⬇️Скачать файл":
  204. bot.send_message(my_id, "Укажите путь до файла: ")
  205. bot.register_next_step_handler(message, downfile_process)
  206. elif message.text == "⬆️Загрузить файл":
  207. bot.send_message(my_id, "Отправьте необходимый файл")
  208. bot.register_next_step_handler(message, uploadfile_process)
  209. elif message.text == "🔗Загрузить по ссылке":
  210. bot.send_message(my_id, "Укажите прямую ссылку скачивания:")
  211. bot.register_next_step_handler(message, uploadurl_process)
  212. elif message.text == "⏪Назад⏪":
  213. back(message)
  214. else:
  215. pass
  216. else:
  217. info_user(message)
  218. def mouse_process(message):
  219. if message.from_user.id == my_id:
  220. if message.text == "⬆️":
  221. currentMouseX, currentMouseY = mouse.get_position()
  222. mouse.move(currentMouseX, currentMouseY - User.curs)
  223. screen_process(message)
  224. elif message.text == "⬇️":
  225. currentMouseX, currentMouseY = mouse.get_position()
  226. mouse.move(currentMouseX, currentMouseY + User.curs)
  227. screen_process(message)
  228. elif message.text == "⬅️":
  229. currentMouseX, currentMouseY = mouse.get_position()
  230. mouse.move(currentMouseX - User.curs, currentMouseY)
  231. screen_process(message)
  232. elif message.text == "➡️":
  233. currentMouseX, currentMouseY = mouse.get_position()
  234. mouse.move(currentMouseX + User.curs, currentMouseY)
  235. screen_process(message)
  236. elif message.text == "🆗":
  237. mouse.click()
  238. screen_process(message)
  239. elif message.text == "Указать размах курсора":
  240. bot.send_chat_action(my_id, 'typing')
  241. bot.send_message(my_id, f"Укажите размах, в данный момент размах {str(User.curs)}px", reply_markup = mouse_keyboard)
  242. bot.register_next_step_handler(message, mousecurs_settings)
  243. elif message.text == "⏪Назад⏪":
  244. back(message)
  245. else:
  246. pass
  247. else:
  248. info_user(message)
  249. def back(message):
  250. bot.register_next_step_handler(message, get_text_messages)
  251. bot.send_message(my_id, "Вы в главном меню", reply_markup = menu_keyboard)
  252. def info_user(message):
  253. bot.send_chat_action(my_id, 'typing')
  254. alert = f"Кто-то пытался отправить команду: \"{message.text}\"\n\n"
  255. alert += f"user id: {str(message.from_user.id)}\n"
  256. alert += f"first name: {str(message.from_user.first_name)}\n"
  257. alert += f"last name: {str(message.from_user.last_name)}\n"
  258. alert += f"username: @{str(message.from_user.username)}"
  259. bot.send_message(my_id, alert, reply_markup = menu_keyboard)
  260. def kill_process (message):
  261. bot.send_chat_action(my_id, 'typing')
  262. try:
  263. os.system("taskkill /IM " + message.text + " -F")
  264. bot.send_message(my_id, f"Процесс \"{message.text}\" убит", reply_markup = files_keyboard)
  265. bot.register_next_step_handler(message, files_process)
  266. except:
  267. bot.send_message(my_id, "Ошибка! Процесс не найден", reply_markup = files_keyboard)
  268. bot.register_next_step_handler(message, files_process)
  269. def start_process (message):
  270. bot.send_chat_action(my_id, 'typing')
  271. try:
  272. os.startfile(r'' + message.text)
  273. bot.send_message(my_id, f"Файл по пути \"{message.text}\" запустился", reply_markup = files_keyboard)
  274. bot.register_next_step_handler(message, files_process)
  275. except:
  276. bot.send_message(my_id, "Ошибка! Указан неверный файл", reply_markup = files_keyboard)
  277. bot.register_next_step_handler(message, files_process)
  278. def web_process (message):
  279. bot.send_chat_action(my_id, 'typing')
  280. try:
  281. webbrowser.open(message.text, new=0)
  282. bot.send_message(my_id, f"Переход по ссылке \"{message.text}\" осуществлён", reply_markup = additionals_keyboard)
  283. bot.register_next_step_handler(message, addons_process)
  284. except:
  285. bot.send_message(my_id, "Ошибка! ссылка введена неверно")
  286. bot.register_next_step_handler(message, addons_process)
  287. def cmd_process (message):
  288. bot.send_chat_action(my_id, 'typing')
  289. try:
  290. os.system(message.text)
  291. bot.send_message(my_id, f"Команда \"{message.text}\" выполнена", reply_markup = additionals_keyboard)
  292. bot.register_next_step_handler(message, addons_process)
  293. except:
  294. bot.send_message(my_id, "Ошибка! Неизвестная команда")
  295. bot.register_next_step_handler(message, addons_process)
  296. def say_process(message):
  297. bot.send_chat_action(my_id, 'typing')
  298. bot.send_message(my_id, "В разработке...", reply_markup = menu_keyboard)
  299. def downfile_process(message):
  300. bot.send_chat_action(my_id, 'typing')
  301. try:
  302. file_path = message.text
  303. if os.path.exists(file_path):
  304. bot.send_message(my_id, "Файл загружается, подождите...")
  305. bot.send_chat_action(my_id, 'upload_document')
  306. file_doc = open(file_path, 'rb')
  307. bot.send_document(my_id, file_doc)
  308. bot.register_next_step_handler(message, files_process)
  309. else:
  310. bot.send_message(my_id, "Файл не найден или указан неверный путь (ПР.: C:\\Documents\\File.doc)")
  311. bot.register_next_step_handler(message, files_process)
  312. except:
  313. bot.send_message(my_id, "Ошибка! Файл не найден или указан неверный путь (ПР.: C:\\Documents\\File.doc)")
  314. bot.register_next_step_handler(message, files_process)
  315. def uploadfile_process(message):
  316. bot.send_chat_action(my_id, 'typing')
  317. try:
  318. file_info = bot.get_file(message.document.file_id)
  319. downloaded_file = bot.download_file(file_info.file_path)
  320. src = message.document.file_name
  321. with open(src, 'wb') as new_file:
  322. new_file.write(downloaded_file)
  323. bot.send_message(my_id, "Файл успешно загружен")
  324. bot.register_next_step_handler(message, files_process)
  325. except:
  326. bot.send_message(my_id, "Ошибка! Отправьте файл как документ")
  327. bot.register_next_step_handler(message, files_process)
  328. def uploadurl_process(message):
  329. bot.send_chat_action(my_id, 'typing')
  330. User.urldown = message.text
  331. bot.send_message(my_id, "Укажите путь сохранения файла:")
  332. bot.register_next_step_handler(message, uploadurl_2process)
  333. def uploadurl_2process(message):
  334. bot.send_chat_action(my_id, 'typing')
  335. try:
  336. User.fin = message.text
  337. obj = SmartDL(User.urldown, User.fin, progress_bar=False)
  338. obj.start()
  339. bot.send_message(my_id, f"Файл успешно сохранён по пути \"{User.fin}\"")
  340. bot.register_next_step_handler(message, files_process)
  341. except:
  342. bot.send_message(my_id, "Указаны неверная ссылка или путь")
  343. bot.register_next_step_handler(message, addons_process)
  344. def messaga_process(message):
  345. bot.send_chat_action(my_id, 'typing')
  346. try:
  347. MessageBox(None, message.text, 'PC TOOL', 0)
  348. bot.send_message(my_id, f"Уведомление с текстом \"{message.text}\" было закрыто")
  349. except:
  350. bot.send_message(my_id, "Ошибка")
  351. def mousecurs_settings(message):
  352. bot.send_chat_action(my_id, 'typing')
  353. if is_digit(message.text) == True:
  354. User.curs = int(message.text)
  355. bot.send_message(my_id, f"Размах курсора изменен на {str(User.curs)}px", reply_markup = mouse_keyboard)
  356. bot.register_next_step_handler(message, mouse_process)
  357. else:
  358. bot.send_message(my_id, "Введите целое число: ", reply_markup = mouse_keyboard)
  359. bot.register_next_step_handler(message, mousecurs_settings)
  360. def screen_process(message):
  361. try:
  362. get_screenshot()
  363. bot.send_photo(my_id, open("screen_with_mouse.png", "rb"))
  364. bot.register_next_step_handler(message, mouse_process)
  365. os.remove("screen.png")
  366. os.remove("screen_with_mouse.png")
  367. except:
  368. bot.send_chat_action(my_id, 'typing')
  369. bot.send_message(my_id, "Компьютер заблокирован")
  370. bot.register_next_step_handler(message, mouse_process)
  371. def get_screenshot():
  372. currentMouseX, currentMouseY = mouse.get_position()
  373. img = PIL.ImageGrab.grab()
  374. img.save("screen.png", "png")
  375. img = Image.open("screen.png")
  376. draw = ImageDraw.Draw(img)
  377. draw.polygon((currentMouseX, currentMouseY, currentMouseX, currentMouseY + 20, currentMouseX + 13, currentMouseY + 13), fill="white", outline="black")
  378. img.save("screen_with_mouse.png", "PNG")
  379. def is_digit(string):
  380. if string.isdigit():
  381. return True
  382. else:
  383. try:
  384. float(string)
  385. return True
  386. except ValueError:
  387. return False
  388. #while True:
  389. # try:
  390. bot.polling(none_stop=True, interval=0, timeout=20)
  391. # except Exception as E:
  392. # print(E.args)
  393. # time.sleep(2)