Telegramによるコンピューター制御

エントリー



こんにちは、Habr!



最近、コンピューターのマウスを制御するためのアプリケーションをインストールしたかったのですが、電話の接続に問題があり、自分と似たようなことをしようと思いましたが、どうですか? いくつかのオプションを試した後、テキストバージョンで似たようなことを行うのに非常に適したテレグラムボットを思い出しました。たとえば、 「/ open chrome」ボットを書いて、コンピューターでChromeを開きます。



何が必要ですか?



ボットをPythonで記述し、次のライブラリを使用します。フラスコ、pyngrok、requests、win32com.client、os、subprocess。 記事の後半で、どのライブラリが必要なのかを説明します。 電話、タブレット、さらには別のコンピューターにTelegramも必要です。 また、Habréにはそのような記事がすでに十分にあるため、自分で作成する方法を記述する電報ボットも必要です。



これはどのように機能しますか?



ボットに書き込むと、メッセージとURLに送信したユーザーに関するデータを含むポストリクエストが送信され、その後、テキストに応じてPythonスクリプトがアプリケーションの起動、テキストの入力、さらには特定のアクションを実行しますコンピューターのシャットダウン。



実装



まず、main.pyというpythonファイルを作成し、必要なすべてのライブラリをインポートします(ただし、最初にpipを介してインストールする必要があります)。



from flask import Flask, request from pyngrok import ngrok import requests import subprocess import os import win32com.client
      
      





ここで、ボットからリクエストを受信するには、Flaskを実行してからPyngrokを実行し、ローカルネットワークだけでなくサイトにアクセスする必要があります。



 app = Flask(__name__) # flask ngrok_url = ngrok.connect(port=5000).replace('http','https') # ngrok
      
      





ボットを設定しましょう-リクエストをサーバーに送ってください:



 token = 'token       BotFather' #token  URL = 'https://api.telegram.org/bot'+token+'/' requests.get(URL+'setWebhook?url='+ngrok_url) # url  webhook   shell = win32com.client.Dispatch("WScript.Shell") #        
      
      





ボットがメッセージに応答できるように関数を作成しましょう:



 def sendMessage(chat_id,text): url = URL+"sendMessage?chat_id="+str(chat_id)+"&text="+str(text) requests.get(url)
      
      





次に、ボットからのメッセージを処理してコマンドを実行する関数に進みます。



 @app.route('/', methods=['POST','GET']) #          index def index(): if request.method=='POST': #   post  r = request.get_json() # json chat_id = r["message"]["chat"]["id"] #   id      username = r["message"]["from"]["username"] # username     text = r["message"]["text"] #   msg = text.split() #       cmd = msg[0] #    l = len(msg) #  if username==' username': #     if cmd=='/cmd' and l>1: #  /cmd proc = subprocess.Popen(text[5:], shell=True, stdout=subprocess.PIPE).communicate() #      /cmd sendMessage(chat_id, proc[0].decode('cp866')) #     Telegram elif cmd=='/ntp': #  /ntp os.system('notepad.exe') #  elif cmd=='/off': #  /off os.system('shutdown -p') #  elif cmd=='/p': #  /p shell.SendKeys(text[3:]) #      return 'Hello World!' # -   ngrok_url    
      
      





それでも、Flaskが機能し始めた行を追加する必要があります。



 if __name__=='__main__': app.run()
      
      





著者からのもう少しの言葉



このスクリプトではコンピューターの制御を完全に置き換えることはできないかもしれませんが、音楽をオンにして開発環境を開始することから多くのコマンドを思い付くことができます。 これを読んでくれてありがとう! 問題がある場合や質問がある場合は、コメントに書いてください。



All Articles