いくつかの間違いを犯したかもしれませんので、何か間違っていたら教えてください!
先自荐一个 tg 转发机器人,避免存入 tg 收藏夹然后吃灰。
プロジェクトのアドレス: AhFeil/extract_forward_tgbot: 存储转发给它的消息到文件中,并能推送到网页,方便查看编辑信息 (github.com)
それの最も基本的な使用法: (詳細は GitHub プロジェクトのホームページを参照)
- メッセージをそれに転送する(純粋なテキストメッセージと画像付きメッセージのみサポート)、または直接メッセージを送信
- それはその中のテキストと内部リンクのウェブサイトを抽出し、それをファイルに保存します。内部リンクのウェブサイトは順番にテキストの後ろに配置されます。
- コマンド
/push
を送信すると、それは上記のファイルのすべての内容を別の便利にアクセスできるファイルにコピーします。現在使用しているのは 网页记事本 で、対応するウェブページにアクセスすると見ることができます。 - コンピュータでウェブページにアクセスし、確認して効率的に処理します。
在 Telegram 注册机器人和配置等#
注册一个机器人 (Bot)#
登録プロセスは非常に簡単で、telegram の「ボットの父」にメッセージを送信します。つまり、https://t.me/BotFather というボット:
- @BotFather との対話ボックスを開く
/start
(開始)を送信/newbot
を送信- ボットの名前(名称、ニックネーム)を送信
- ボットのユーザー名(ユーザー名、ID)を指定します。このユーザー名は
bot
で終わる必要があり、変更できません。 - 名前が重複しなければ、登録が完了し、送信されたメッセージにボットのトークンが含まれています。形式は次のようになります:
6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU
- トークンを保存し、漏洩しないようにします。
获取 chat_id#
まずボットを登録し、スタートをクリックした後、新しく登録したボットに任意のメッセージを送信し、その後次の URL を開きます:
# トークン部分を変更し、前の bot を削除しないでください
https://api.telegram.org/bot6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU/getupdates
その中の "chat" の "id" がメッセージを送信したアカウントの chat_id です。保存してください。
向 Bot 添加指令#
指令の本質は
/
で始まるテキストであるため、直接/指令
を送信してトリガーできます。
BotFather を通じてボットにコマンドを設定します。プロセスは、/setcommands
を送信し、変更したいボットを選択し、次にフォーマットに従ってコマンドリストを送信するだけです。フォーマットは次のとおりです:
start - 何ができるか見てみる
forward - ウェブページにプッシュ
emsg - 保存されている最初のメッセージ
dmsg - 最新のメッセージを削除し、テキストを返す
shutdown - 実行を停止
clear - 転送情報をクリア
その後、ボットの入力ボックスの左側にある M をクリックすると、設定したコマンドリストが表示されます。
配置 Bot 的个性化介绍#
/mybots
を送信し、ボットを選択し、次に【Edit Bot】をクリックします。ここでは名前、アイコン、紹介、コマンドを編集できます。
その中の About は、下の画面に表示されるものを編集します。
Description は、ボットに初めて入ったときのこの画面です:
実際には、ボットの対話ボックスで紹介情報を編集するオプションを見つけることもできます。コンピュータでも携帯電話でも、より便利です。
Telegram-Bot 官方#
公式ドキュメント: Bots: An introduction for developers (telegram.org)
tg 公式が挙げたライブラリのいくつか: Bot API Library Examples (telegram.org)
一些限制#
不完整,仅是记录
注意: ボットはチャンネルの管理者として設定する必要があります。そうしないとメッセージを送信できません。
チャンネルは公開に設定する必要があります。
チャンネルでは @name を通じてメッセージを送信できますが、個人にはできず、chat_id を通じてのみ可能です。
また、ボットはユーザーがボットにメッセージを送信したり、ボットをグループに追加したりした後でなければ、ユーザーにメッセージを送信することができません。ボットは見知らぬユーザーに対して自発的にメッセージを送信することはできません。
custom keyboard & inline keyboard#
カスタムキーボードとインラインキーボードには以下の違いがあります:
- インラインキーボードは入力エリアの上に表示され、カスタムキーボードはキーボード入力エリアの下に表示されます。
- インラインキーボードを押すとボットにコールバッククエリが返されますが、カスタムキーボードを押すとボットにテキストメッセージが送信されます。本質的には、テキストのコマンドと同じです。
用浏览器直接查看(webhook)#
コードを書く前に、手動で webhook を使用してボットが受信した情報を確認し、直感的に理解することができます。
Telegram の API インターフェース形式は URL で、通常使用するウェブサイトと似ています。
次の URL をブラウザのアドレスバーにコピーし、Your Token を実際のトークンに置き換えてアクセスします:
https://api.telegram.org/botYour Token/getupdates
# 例えば、次のように
https://api.telegram.org/bot6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU/getupdates
ボットにメッセージを送信した後、ブラウザを更新すると、次のようなメッセージが得られます:
{'chat': {'first_name': 'Jean',
'id': 24601,
'last_name': 'Valjean',
'type': 'private',
'username': 'MonsierMadeleine'},
'date': 17691833,
'from': {'first_name': 'Jean',
'id': 24601,
'is_bot': False,
'last_name': 'Valjean',
'username': 'MonsierMadeleine'},
'message_id': 7417,
'text': 'I am warning you Javert'}
メッセージは json 形式で包装されて送信され、本質的にはネストされた辞書です。つまり、辞書がもう一つの辞書を包んでいます。
もしアドレスバーに次の URL を入力した場合:
https://api.telegram.org/botYour Token/sendMessage?chat_id="Some Chat id"&text="Hello"
https://api.telegram.org/bot6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU/sendMessage?chat_id=2066666604&text="Hello"
実際のトークンと chat ID に置き換え、テキストを編集し、エンターを押すと、あなたのボットは「Hello」を指定したユーザーに送信します。
形式は似ており、Telegram は sendMessage、sendPhoto などの多くの機能を規定しています。
message のキーには chat(ユーザーの名前、ID、チャットの種類)、date(メッセージ送信の日付)、from(送信者の情報)、message_id(特定のメッセージを指す)、text(ユーザーが送信したメッセージのテキスト)が含まれます。
Telegram では、チャットの種類はプライベート、グループ、チャンネルの三種類に分かれます。
python-telegram-bot#
プログラミング言語と API をラップするライブラリを選択し、開発を便利にします。
ここでは Python を使用し、ライブラリは python-telegram-bot を使用して公式 API を迅速に操作します。関連するウェブサイトは次のとおりです:
-
GitHub アドレス: https://github.com/python-telegram-bot/python-telegram-bot
-
ドキュメント: http://python-telegram-bot.org/
-
公式の例を学ぶことができます: Examples - v20.4
3 つのファイルを作成することをお勧めします。例えば extract_forward_tgbot.py
と tgbotBehavior.py
、前者はルーティングを設定し、ルーティングを起動するために登録し、後者は具体的な関数(ボットの動作を定義)を置きます。
さらに config.py
を作成し、トークンなどの設定情報を構成します。
フローチャートが来ました!
実際の作成#
私はこのライブラリの wiki を見て入門しました: Extensions Your first Bot (github.com)。
以下に AhFei が書いた小さな例を見てください。少なくとも中国語なので、理解しやすいです。公式の wiki を見ると、実際にはそれ以上書く必要はありません。公式のドキュメントが最良の参考です。
この例では、bot_token を入力するだけで、残りは完全にコピー&ペーストして実行できます(国内ネットワークの場合は、プロキシアドレスを設定する必要があります)。
興味のある方は、まず一度実行してみて、成功したら修正してください。
まずライブラリをインストールします(Python 3.7+)
pip3 install python-telegram-bot~=20.3
まず config.py
を見て、bot_token とプロキシアドレスを設定します。
# config.py
import platform
from enum import Enum
import os
import sys
# パラメータ値を変数に割り当てる
bot_token = "6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU"
# 以下はボットとは関係なく、主に開発を便利にするためのもので、Windows の場合は開発環境を示し、プロキシを設定し、いくつかの変数の値を変更し、Linux の場合は生産環境です。
system = platform.system() # オペレーティングシステムの名前を取得
if system == 'Windows':
# 開発環境にいる
os.environ["http_proxy"] = "http://127.0.0.1:10809"
os.environ["https_proxy"] = "http://127.0.0.1:10809"
elif system == 'Linux':
# 生産環境にいる
pass
else:
# 直接終了
sys.exit('Unknown system.')
次に extract_forward_tgbot.py
を見て、ここでは 3 つの動作をインポートし、start、myid、transfer を設定し、ルーティングを構成します。つまり、
- ボットが '/start' を受信した後、start 関数を実行します。
- ボットが '/myid' を受信した後、myid 関数を実行します。
- ボットがコマンド以外の内容を受信した場合、transfer 関数を実行します。
一時的に私のプロジェクトから転送ボットのコードを抽出しました。後で時間があれば、シンプルで実用的な具体例に変更します。
これは私たちのメインプログラムで、python3 extract_forward_tgbot.py
でプログラムを起動する必要があります。
# extract_forward_tgbot.py
from telegram import Update # メッセージキューを取得する
from telegram.ext import filters, MessageHandler, ApplicationBuilder, CommandHandler, ContextTypes
import config
# tgbotBehavior.py からボットの動作を定義する関数をインポート
from tgbotBehavior import start, transfer, myid
if __name__ == '__main__':
# インスタンスを作成し、ここにトークンを入れます
application = ApplicationBuilder().token(config.bot_token).build()
# ルーティングのように、/start を受信したときにどの関数を実行するか、左側はコマンド、右側は動作を定義する関数
start_handler = CommandHandler('start', start)
# (~filters.COMMAND) はコマンド以外のメッセージです
transfer_handler = MessageHandler((~filters.COMMAND), transfer)
#
myid_handler = CommandHandler('myid', myid)
# start_handler を登録し、スケジュールします
application.add_handler(start_handler)
application.add_handler(transfer_handler)
application.add_handler(myid_handler)
# 起動し、Ctrl-C を押すまで
application.run_polling(allowed_updates=Update.ALL_TYPES)
最後に tgbotBehavior.py
を見て、ボットのさまざまな動作を定義します。
# tgbotBehavior.py
from telegram import Update
from telegram.ext import ContextTypes
import config
# 固定内容に返信
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
# いくつかの動作を定義
# /start を送信したユーザーにメッセージを送信
await context.bot.send_message(chat_id=update.effective_chat.id,
text=f"これは転送ボットです")
# ID を返す
async def myid(update: Update, context: ContextTypes.DEFAULT_TYPE):
# update.effective_chat.id はボットと交流しているユーザーの chat id です
your_chat_id = update.effective_chat.id
await context.bot.send_message(chat_id=update.effective_chat.id, text=f'あなたの chat id は {your_chat_id} です')
async def transfer(update: Update, context: ContextTypes.DEFAULT_TYPE):
# いくつかの動作を定義
# 省略
pass
メインプログラムを実行した後、
/start
を送信すると、「これは転送ボットです」と返答され、/myid
を送信すると、「あなたの chat id は 123456789 です」と返答されます。- その他の情報には何の応答もありません。
実際には構造は非常に明確で、まず動作を定義する関数を作成し、次にルーティングを構成して有効にします。
参考文献を見れば、機能豊富なボットを作成できます!
使用 systemd 守护进程#
実際に Linux 上でボットを実行する際には、systemd 守护进程を使用することが持続的に実行する良い方法です。具体的な設定については、当サイトのこの記事を参照してください: Telegram 转发机器人 的部署流程
CheatSheet#
-
ユーザー ID : update.effective_chat.id
-
転送元: update.message.forward_from_chat.title と update.message.forward_from_chat.username 、前者はチャンネル名、後者は @ユーザー名
-
転送されたメッセージのソース ID: update.message.forward_from_message_id
-
テキストメッセージの内容: update.message.text
-
画像メッセージの内容: update.message.caption
もし「用浏览器直接查看(webhook)」のセクションを見て実践したことがあれば、上記の構造がウェブページ上のものと一対一で対応していることがわかります。ウェブページを確認して情報を取得する方法を探ることができます。
原文リンク: https://blog.vfly2.com/2023/08/register-telegram-bot-and-build-a-bot-using-python/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 承飞之咎 (blog.vfly2.com) 。
保持更新 ٩(・̤̀ᵕ・̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰可重复的实用技能,欢迎使用 RSS 订阅,也欢迎留言指正。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。