パート1:ボットを登録する
最も単純で最も説明されている部分。 非常に簡単に: @BotFatherボットを見つけ、彼に/ start 、または/ newbotを書き込み 、彼が要求するフィールド(ボット名と短縮名)を入力し、ボットトークンとドキュメントへのリンクを含むメッセージを取得する必要があります。 トークンは、できれば信頼できるものとして保存する必要があります。これは、これがボットを認証して対話するための唯一のキーだからです。
パート2:コードを記述する準備
タイトルですでに述べたように、ボットをPythonで記述します。 この記事では、PyTelegramBotAPI(Telebot)ライブラリの使用方法について説明します。 Pythonがインストールされていない場合、最初にこれを行う必要があります。Linuxターミナルでは、次のように入力する必要があります。
sudo apt-get install python python-pip
Windowsを使用している場合は、公式サイトからPythonをダウンロードする必要があります。
その後、LinuxターミナルまたはWindowsコマンドプロンプトで、次を入力します。
pip install pytelegrambotapi
これで、コードを作成する準備がすべて整いました。
パート3:メッセージを受信して「こんにちは」と言う
小さな余談。 テレグラムは、ボットにユーザーアクションについて2つの方法で伝えることができます。サーバー要求への応答(ロングポール)、およびテレグラムサーバー自体がボットに書き込んだメッセージを送信するWebhookを介して。 2番目の方法は明らかに良く見えますが、専用IPアドレスが必要で、サーバーにSSLがインストールされています。 この記事では、サーバーをセットアップするのではなく、ボットを作成することについてお話したいので、Long Pollを使用します。
お気に入りのテキストエディターを開き、ボットコードを記述しましょう。
最初に行うことは、ライブラリをインポートし、ボットトークンを接続することです。
import telebot; bot = telebot.TeleBot('% %');
テキストメッセージを受信するメソッドを宣言します。
@bot.message_handler(content_types=['text']) def get_text_messages(message):
コードのこのセクションでは、テキストメッセージのリスナーとそれらを処理するメソッドを宣言しました。 content_typesフィールドは、1つだけでなく、さまざまな値を取ることができます。たとえば、
@bot.message_handler(content_types=['text', 'document', 'audio'])
テキストメッセージ、ドキュメント、音声に応答します。 詳細は公式ドキュメントに記載されています。
メソッドにいくつかの機能を追加します。ユーザーが「Hello」と書いた場合、「Hello、どうすれば手伝うことができますか?」と言い、「/ help」コマンドを書いたら、ユーザーに「Hello」と書くように伝えます。
if message.text == "": bot.send_message(message.from_user.id, ", ?") elif message.text == "/help": bot.send_message(message.from_user.id, " ") else: bot.send_message(message.from_user.id, " . /help.")
このコードは、私には思えるので、コメントを必要としません。 ここで、コードに1行だけ追加する必要があります(すべてのメソッドの外側)。
bot.polling(none_stop=True, interval=0)
ボットは、Telegramサーバーに「誰かが私に書いたのですか?」と絶えず尋ねます。ボットに書き込むと、Telegramはメッセージを送信します。 ファイル全体を保存し、コンソールに書き込みます
python bot.py
bot.pyは、ファイルの名前です。
これで、ボットを作成して結果を確認できます。

パート4:ボタンとメッセージスレッド
メッセージを送信することは間違いなく楽しいですが、ユーザーと対話することはさらに楽しいです。ユーザーに質問し、それらに対する回答を得ることができます。 ボットがユーザーに名前、姓、年齢を順番に尋ねるとします。 これを行うには、ボットのregister_next_step_handlerメソッドを使用します。
name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, " ?"); bot.register_next_step_handler(message, get_name); # – get_name else: bot.send_message(message.from_user.id, ' /reg'); def get_name(message): # global name; name = message.text; bot.send_message(message.from_user.id, ' ?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message(' ?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: # try: age = int(message.text) #, except Exception: bot.send_message(message.from_user.id, ', '); bot.send_message(message.from_user.id, ' '+str(age)+' , '+name+' '+surname+'?')
そして、ユーザーデータを記録しました。 この例は非常に単純化された例を示しています。良い例として、データベースに中間データとユーザー状態を保存する必要がありますが、今日はデータベースではなくボットを使用しています。 最後の仕上げ-すべてが正しく入力されていることを確認するようユーザーに求めますが、そのようにではなく、ボタンで入力してください! これを行うには、get_ageメソッドのコードを少し編集します
def get_age(message): global age; while age == 0: # try: age = int(message.text) #, except Exception: bot.send_message(message.from_user.id, ', '); keyboard = types.InlineKeyboardMarkup(); # key_yes = types.InlineKeyboardButton(text='', callback_data='yes'); # «» keyboard.add(key_yes); # key_no= types.InlineKeyboardButton(text='', callback_data='no'); keyboard.add(key_no); question = ' '+str(age)+' , '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
そして今、ボットはキーボードを送信しますが、クリックしても何も起こりません。 ハンドラーメソッドを作成しなかったからです。 書きましょう:
@bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data callback_data, .... # , bot.send_message(call.message.chat.id, ' : )'); elif call.data == "no": ... #
ファイルの先頭に1行追加するだけです。
from telebot import types
これですべて、ボットを保存して実行できます。
