Отправка команд удаленным компьютерам python
Идея создания программы отправки команд удаленным компьютерам(100 шт.): Я со своего компьютера пишиу боту в телеге, он отправляет это сообщение куда-либо (файл на DropBox, GoogleDrive и тд), вторая программа опрашивает этот файл и если есть допустим строка в файле "ТВ медуза" компьютер с именем "Медуза" перезагружает программу TeamViewer. Как мне реализовать такую идею, может есть метод проще чем использовать сторонние сервисы, т.к. у них АПИ ограничены
Ответы (1 шт):
Я бы всё попробовал реализовать исключительно через АПИ самого телеграмма.
Идея в чем, мы используем один и тот же ключ БОТА для всех машинах. Так как мы делаем немного случайную задержку для получения ответа с https://api.telegram.org/bot<ваш_токен>/getUpdates то даже сотня машин без труда сможет использовать один токен.
Когда боту отправляем команду, соответственно все машины её получают, но через условие отработает только нужная машина (нужно для каждой машины модифицировать скрипт\условие).
Предусмотрел запоминание уже отработанных команд, что бы по кругу их не обрабатывать.
Добавил команду для очистки очереди в самом телеграмме, и на всякий случай при старте скрипта.
import requests
import time
import random
api_key = 'TOKEN'
# Создаем пустой список для отслеживания уже отвеченных сообщений
answered_messages = []
# Функция для отправки сообщения
def send_message(chat_id, text, reply_to_message_id=None):
url = f'https://api.telegram.org/bot{api_key}/sendMessage'
data = {'chat_id': chat_id, 'text': text, 'reply_to_message_id': reply_to_message_id}
response = requests.post(url, json=data)
return response.json
def delete_message(chat_id, message_id):
url = f'https://api.telegram.org/bot{api_key}/deleteMessage'
data = {'chat_id': chat_id, 'message_id': message_id}
response = requests.post(url, json=data)
return response.json()
def clear_queue(update):
url = f'https://api.telegram.org/bot{api_key}/getUpdates'
params = {'offset': update.get('update_id')+1}
response = requests.get(url, params=params)
# Функция для получения обновлений и обработки непрочитанных сообщений
def process_updates():
url = f'https://api.telegram.org/bot{api_key}/getUpdates'
response = requests.get(url)
updates = response.json().get('result', [])
for update in updates:
message = update.get('message')
if message and message['message_id'] not in answered_messages:
print(message.get('text'))
if message.get('text') == "Медуза": # Для каждого компа свои условия
# Компьютер с именем "Медуза" перезагружает программу TeamViewer
send_message(message['chat']['id'], 'TeamViewer перезагружен!', message['message_id'])
#delete_message(message['chat']['id'], message['message_id'])
# Добавляем идентификатор сообщения в список уже отвеченных сообщений
answered_messages.append(message['message_id'])
# Очистка очереди накопившихся сообщений
if message.get('text') == "Очистить очередь сообщений!":
send_message(message['chat']['id'], 'Очередь сообщений очищена!', message['message_id'])
clear_queue(update)
# Очистка очереди перед стартом
url = f'https://api.telegram.org/bot{api_key}/getUpdates'
response = requests.get(url)
updates = response.json().get('result', [])
if updates:
clear_queue(updates[-1])
# Основной цикл программы
while True:
process_updates()
# Генерация случайного числа в диапазоне от 1 до 3
random_delay = random.uniform(1, 3)
time.sleep(random_delay) # Пауза 1-3 секунда между запросами