
テレグラムボットを使用すると、多くのプロセスを自動化できます。 実際、
ボットは 1つのチャットに限定されるものではありません。
ボットは、 テキストに加えて、画像、ビデオ、オーディオ、ドキュメントなどの
ファイルを送受信することもできる
単なる入出力
インターフェースです。
- ユーザーの場合、最大ファイルサイズは1.5GBです
- ボットのサイズは50 MBに制限されています
この制限を回避する方法-カットの下で。
Telegram API
ユーザーは最大1.5GBのファイルをアップロードできるので(つまり、可能です)、このためにTelegramボットと連動する
エージェント (ボットと混同しないように名前が付けられています)を作成します。 これには、個別のアカウントとTelegram APIが必要です。
まず、
https: //core.telegram.orgに
アクセスし、指示に従ってアプリケーションを登録します。最後に、
api_idと
api_hashを取得する必要があり
ます
エージェントは何をしますか?
ボットは50 MBを超えるファイルをアップロードできませんが、Telegramサーバーに既にアップロードされて
いるファイルの
file_idがあれば、送信できます。 アルゴリズムは次のとおりです
- Bot APIを介してサーバーで実行されるアプリケーションは、送信用のファイルを生成します
- エージェントを呼び出して、ファイルをTelegramサーバーにアップロードします
- エージェントからfile_idを取得します
- ダウンロードしたファイルを使用する
コード例
@AudioTubeBotの作成時に大きなファイルをダウンロードする必要が生じました。最初はオーディオファイルが複数の部分に分割されて送信されました。 大きなファイルをダウンロードする機能は、
subprocess.check_callを介して呼び出される別のアプリケーションに配置することが決定されました。
コメント:
これがコード全体です
-Telethonライブラリはここで使用されます-起動時に、プログラムは送信するファイルへのパス、ファイル名、chat_id-ファイルの対象者)、エージェントを呼び出したボットの名前を受け取ります(たとえば、ボットとリリースボットがあります)。
client.send_file
アップロード経由でファイルをサーバーに
アップロードし 、file_idを取得してボットに渡すだけでは機能しません。file_idは、作成されたチャット内でのみ機能します。したがって、ボットはfile_idでユーザーにファイルを送信できます-
エージェントはこのファイルを送信する必要があります-その後、ボットはこのファイルのfile_idを受け取り、破棄できるようになります。
caption = str(...)-ワット?!
エージェントはボットにのみファイルを送信し、キャプションにコメントを追加します-私はこれを持っています:
- エンドユーザーchat_id
- トラック期間
- ファイルをリロードしないようにfile_idをバインドする必要があるデータベース内のobject_id(インデックス作成、最適化など)

ボットコードでの呼び出し例
ファイルはロードのために
path_file_mp3に既に保存されてい
ます 。サブルーチンを呼び出して、完了するのを待ちます。
コード status = subprocess.check_call( "python3.6 audiotubeagent36/main.py " + path_file_mp3 + ' ' + audio_title + '.'+ us_audio_codec + ' ' + str(chat_id) + ' ' + str(pool_object['_id']) + ' ' + config.BOT_NAME + ' ' + str(duration),shell=True)
受信トレイで、このようなことをします
コード if message.content_type in ['document','audio']: user_id = message.from_user.id bot_settings = SafeConfigParser() bot_settings.read(config.PATH_SETTINGS_FILE) c_type = message.content_type if functions.check_is_admin(bot_settings, user_id): if c_type == 'audio': file_id = message.audio.file_id audio_title = message.audio.title else: file_id = message.document.file_id audio_title = message.document.file_name[:-4] client_chat_id = message.caption if client_chat_id.find(u':') != -1: client_chat_id, q_pool_obj_id, duration_s = re.split(r':',client_chat_id)
質問/提案は、コメントまたは
チャットに書き込み
ます 。