システム管理者向けの電報ボット

システム管理者向けの電報ボット。 これは決して完成したプロジェクトではなく、取り組むべきものがあります。 これは、半完成製品であり、各管理者がさまざまなタスクを申請できる一連のテクニックです。









この記事には、いくつかのボットの例と、PowershellのAPIテレグラムを使用した例が含まれています。



ボットを登録してトークンを取得する方法に関する情報が含まれています
先に進む前に、ボットを登録してトークンを取得するには、ボットトークンが必要です。 @ BotFatherユーザーを見つけて彼に書き込む必要があります。 / newbotコマンドに興味がありますその後、ボットの名前と名前が必要になります。最後に主なものを書きたい場合は、 _botを入力します。 名前が選択されると、 BotFatherはトークンとボットへのリンクを返し、すぐに追加できるようにします。 このボットでは、ボットの登録が終了します。



ボットをすばやく追加し、それを自分自身にすばやく追加できるようにするには、@記号で始まる特別なリンクを使用するのが最善です。情報でそれを取得できます。









誰かがそのようなリンクを送信した場合、そのリンクをクリックするだけでボットとチャットを開くことができます



既製の管理用テンプレート



シンプルなボット
長所:



  • 小-約300行のみ
  • 論理関数に記述されているコマンドを実行できます
  • メッセージを送受信できます
  • ファイルを受け入れることができます
  • パスワードチェックがあります
  • 送信されたチームのログを保持します
  • 同時作業のために複数のセッションを開くことができます(完全には実装されていません。しかし、複数の人が同時に対話することができます


短所:



  • 承認が単純すぎます。 パスワードはデバイス上のチャットに残ります。 デバイスを区別できません


ここから簡単なボットをダウンロードできます。アーカイブには以下が含まれます。1.テキストマークアップの例のヘルプ。 2.ソース



開始するには、記事の冒頭で説明したようにBotFatherからボットトークンを取得し、変数に$スクリプトトークンを書き込む必要があります。 すぐに動作するはずです。







論理関数への機能追加



複雑なボット
プラス:



  • 小-約450行のみ
  • 論理関数に記述されているコマンドを実行できます
  • メッセージを送受信できます
  • ファイルを受け入れることができます
  • パスワードチェックがあり、さらにchat_idをチェックできます。
  • 送信されたチームのログを保持します
  • 同時作業のために複数のセッションを開くことができます(完全には実装されていません。最後の段階では、コンソールがねじ込まれました。


例として実装された機能:



  • ファイルを受け入れ、パパに入れます
  • パパからのファイルを表示できます
  • ダウンロードフォルダからファイルを削除できます
  • 実行のためにファイルを実行できます( start-process経由)
  • 作業が実行されるサーバーのリストを表示します(テキストファイル内の名前のリストのみ)
  • リストからサーバーをpingし、どのサーバーがオンラインであるかを示します
  • リストからコンピューターを無効にします
  • ターミナルにログインしているユーザーを表示し、外部スクリプト呼び出しを行います(ターミナルにPSTerminalServicesをインストールする必要があります)
  • ターミナルでユーザーをログオフさせます。 コンソールモードに入り、ユーザー名を入力します(ターミナルにPSTerminalServicesをインストールする必要があります)
  • 実行中のコンピューターのスクリーンショットを撮ります(ただし、元に戻りません)
  • ネットワーク上のデバイスとのsshセッションを開き、コマンド入力モードに切り替えます(たとえば、債権者と住所はスクリプトに固定されています。 動作するには、ssh poshSSHを管理するモジュールが管理されるマシンにインストールする必要があります)


実装されていないものからですが、私はしたい:



  • ポストバックファイル(PowerShellでこれを行う方法を知っている人に書き込みます)
  • 不十分なマルチユーザーサポート
  • 欠陥のあるコンソールモード


ボットはここからダウンロードできます。アーカイブには次のものが含まれます。

1.テキストマークアップの例の支援。

2.構成ファイルconfig.csv ;

3.ボット自体-abormot.ps1

4.補助ファイルのセット。

5.テキストファイルping-list.txtで動作するコンピューターのリスト



開始するには、記事の冒頭で説明したようにBotFatherからボットトークンを取得し、 config.csv構成ファイルに書き込む必要があります。 すぐに動作するはずです。







論理関数への機能追加



ドメイン内のアカウントのロックを解除するセルフサービスボット
一部の組織では、ibの要件に従って、パスワードが特定の回数間違って入力された場合、アカウントが特定の時間に設定されます。 ロックを解除するには、ユーザーは管理者に連絡する必要があります。 このボットは、アカウント名を書き込むことができるように作成されており、ロックを解除しますが、1日に3回までです。 制限を超えた場合、ユーザーをシステム管理者にリダイレクトし、チャットでアラートを送信します。



ボットはここからダウンロードできます。



開始するには、 BotFatherからボットトークンを取得し、 $トークン変数にトークンを書き込む必要があります。 $ adminChatIDに管理チャット番号を設定します。 ドメインマシンのアドレスを指定し、それを信用します。







この例では、ロック解除関数をスクリプトに直接埋め込みました。常に使用するには、ログ内のイベントへの反応を作成し、このイベントを自分で生成する方が良いでしょう。 このイベントは、管理者のみがアクセスできる場所からロック解除スクリプトを起動するため、スクリプト内のドメインパスワードを忘れることはありません。 これは重要です。



使い慣れたユーザーからのファイルを受け入れるボット
たとえば、外出中のユーザーからの写真を共有リソースに転送したり、単にファイルを受け入れて、誰から来て誰に送信したかを知る必要があります。 以下は、使い慣れたユーザーから写真を受け取るボットの例です



ボットはここからダウンロードできます。



開始するには、 BotFatherからボットトークンを取得し、 $トークン変数にトークンを登録し、スイッチ235行にチャットを登録する必要があります。 すぐに動作するはずです。 スイッチに必要なチャットを追加することを忘れないでください



ボットAPIの使用方法



1.メッセージを受信する



アドレスでInvoke-WebRequestを実行する必要があります



https://api.telegram.org/bot{}/getUpdates?offset={ ID }&timeout={     }
      
      





{Token} -BotFatherから受け取ったボットトークン

{ordinal message ID} -最初のメッセージ0の場合、最後の+ 1の後続の番号の場合 。 最後の番号を指定すると、呼び出しごとに最後のメッセージが届きます。

{秒単位で戻る前に待機する時間} -空の構造を返す前にテレグラムが応答を待機する時間。 ボットの遅延を作成するのに適しています。 デバッグを待たないように、ブートで1秒の遅延を使用しました。

出力は、 ConvertFrom-Jsonを使用して解析するJSON構造です



コードリスト#1

 $ChatTimeout = 1 $UpdateId = 0 $token = "bot token" $URL = "https://api.telegram.org/bot$token/getUpdates?offset=$UpdateId&timeout=$ChatTimeout" $Request = Invoke-WebRequest -Uri $URL -Method Get $content = ConvertFrom-Json $Request.content #    2       $str = $content.result | select -First 1 $str = ($str).message $props = [ordered]@{ ok = $content.ok UpdateId = ($str).update_id Message_ID = $str.message_id first_name = ($str.from).first_name last_name = ($str.from).last_name chat_id = ($str.chat).id text = $str.text } $obj = New-Object -TypeName PSObject -Property $props $obj
      
      





$ objオブジェクトの出力はメッセージであり、メッセージの送信元です



2.ファイルをダウンロードする



ファイルが転送されると、追加のパラメーターがJSON構造で転送されます 。 ファイルを取得するには、メッセージからfile_idをプルする必要があります。次に、アドレスに移動します。



 https://api.telegram.org/bot{token}/getFile?file_id={file_id  }
      
      





リクエストは、ダウンロードパスを含むJSON構造を返します。 次に、リンクからファイルをダウンロードします



 https://api.telegram.org/file/bot{token}/{file_path}
      
      





ファイルが与えられたと仮定すると、それをダウンロードするためのコードは次のようになります。



 $ChatTimeout = 1 $UpdateId = 0 $token = "bot token" $Path = "c:\" #####     $URL = "https://api.telegram.org/bot$token/getUpdates?offset=$UpdateId&timeout=$ChatTimeout" $Request = Invoke-WebRequest -Uri $URL -Method Get $content = ConvertFrom-Json $Request.content #    2       $str = $content.result | select -First 1 $str = ($str).message #####          #          if ( $($str.document).mime_type -eq "image/jpeg" ) { $isJPG = $true } #####   file_name      #    ? if ( $($str.document).file_name -ne $null ) { ###      $DocFileName = ($str.document).file_name $DocFileID = ($str.document).file_id $DocFileSize = ($str.document).file_size #        /getFile $URL = "https://api.telegram.org/bot$token/getFile?file_id=$DocFileID" $RequestFile = Invoke-WebRequest -Uri $URL ###  $RequestFile        foreach ( $JSON in $((ConvertFrom-Json $RequestFile.Content).result) ) { $FilePath = $json.file_path $URL = "https://api.telegram.org/file/bot$token/$FilePath" $FilePath = Split-Path -Leaf $FilePath $OutputFile = "$Path\$FilePath" #    Invoke-WebRequest -Uri $URL -OutFile $OutputFile } }
      
      





3.何かを書く



テレグラムボットは、2つのマークダウンモードとHTMLテキストマークアップモードをサポートしています。



注: HTMLモードでは、 brタグはサポートされていません



マークダウンマークアップの例
*太字* -太字

_italic text_-斜めのテキスト

[テキスト](http://www.example.com/)-リンク

「インライン固定幅コード」-修正済み



テキストブロック

`` `テキスト

事前にフォーマットされた固定幅コードブロック

`` ``



行シーケンス%0Aを使用して行を折り返す



メッセージ送信の例



 $token = " " $hatid = "ID      " $text = " habr" $payload = @{ "parse_mode" = "Markdown"; "disable_web_page_preview" = "True" } $URL = "https://api.telegram.org/bot$token/sendMessage?chat_id=$hatid&text=$text" $request = Invoke-WebRequest -Uri $URL -Method Post ` -ContentType "application/json; charset=utf-8" ` -Body (ConvertTo-Json -Compress -InputObject $payload)
      
      





たとえば、次のような行を送信するときにこのコードでエラーが発生した場合:



 "$FDownload : file name is ""$($JSON.file_path)""; size $($json.file_size) kb"
      
      





より複雑な送信方法を使用できます。



 $token = " " $chat_id = "ID chata" $text = "" $markdown = $true $preview_mode = "True" if ($markdown) { $markdown_mode = "Markdown" } else {$markdown_mode = ""} $payload = @{ "chat_id" = $chat_id; "text" = $text "parse_mode" = $markdown_mode; "disable_web_page_preview" = $preview_mode; } $URL = "https://api.telegram.org/bot$token/sendMessaget" $request = Invoke-WebRequest -Uri $URL ` -Method Post -ContentType "application/json; charset=utf-8" ` -Body (ConvertTo-Json -Compress -InputObject $payload)
      
      





誰もがファイルをアップロードする方法を知っている場合-破棄、追加します。



All Articles