使用电报 python API 获取一条消息?

Getting one message using the telegram python API?

我想创建一个电报机器人,在看到命令 /define 后,它会询问这个词。 我想在机器人要求后提取用户发送的单词。我该怎么做?

import telegram
from telegram.ext import Updater
from telegram.ext import MessageHandler, Filters
from telegram.ext import CommandHandler

updater = Updater(token='******************')
dispatcher = updater.dispatcher

def define(bot, update):
    bot.send_message(chat_id=update.message.chat_id, text="Enter word")
    word = '''get content of following message'''
    definition = get_definition(word)
    bot.send_message(chat_id=update.message.chat_id, text=definiton)

definition_handler = CommandHandler('define', define)

dispatcher.add_handler(definition_handler)

updater.start_polling()
  • 首先,你需要pyTelegramBotAPI库;
  • 然后,你想在Telegram 中添加@BotFather 并关注instructure #6。您需要获取机器人令牌,它是您的机器人的一组独特的字母和数字,就像代号一样。通过@BotFather 注册机器人后,它会给你令牌。

实际上,令牌是您创建任何想要的机器人所需的唯一东西。像你这样的机器人的代码应该遵循相同的逻辑结构:

# -*- coding: utf-8 -*-
import telebot  # importing pyTelegramBotAPI library
import time
import sys

bot = telebot.Telebot(token='YOUR API TOKEN')  # supply your future bot with the token you have received

@bot.message_handler(commands=['define', 'Define'])
def echo_msg(message):
   echo = bot.send_message(chat_id=message.chat.it,
                           text='What word would you want me to extract, sir?')
   bot.register_next_step_handler(message=echo, callback=extract_msg)

def extract_msg(message):
   msg.append(message.text)
   print(msg)

def main_loop():
   bot.polling(none_stop=True)
   while True:
      time.sleep(1)

if __name__ == '__main__':
   try:
      main_loop()
   except KeyboardInterrupt:
      print(sys.stderr '\nExiting by user request'\n')
      sys.exit(0)

好的,每个机器人都需要 message_handler 来处理传入的信息。

在您的例子中,这是一个触发机器人要求将单词提取到列表中的命令。如果你没有定义 bot.register_next_step_handler(),这个命令根本不会做任何动作(除了它要求一个词的事实)。

函数 extract_msg() 附加用户输入的下一个单词,并将 msg 列表打印到您的控制台。

函数 main_loop() 运行机器人直到暂停,并在每次提取单词后使其空闲一秒钟。要停止机器人,请按 Ctrl + C


我希望这就足够了。下一步将是跟踪键入 /define/Define 并提取 his/her 字词请求的人。此外,最好使 msg 列表更具描述性,或者实施完全不同的提取方法。这个只是提供信息,在实践中几乎不适用。

我修复了调用 stderr 时的一个错误:

# -*- coding: utf-8 -*-
import telebot  # importing pyTelegramBotAPI library
import time
import sys

bot = telebot.Telebot(token='YOUR API TOKEN')  # supply your future bot with the token you have received

@bot.message_handler(commands=['define', 'Define'])
def echo_msg(message):
   echo = bot.send_message(chat_id=message.chat.it,
                           text='What word would you want me to extract, sir?')
   bot.register_next_step_handler(message=echo, callback=extract_msg)

def extract_msg(message):
   msg.append(message.text)
   print(msg)

def main_loop():
   bot.polling(none_stop=True)
   while True:
      time.sleep(1)

if __name__ == '__main__':    try:
      main_loop()    except KeyboardInterrupt:
      print(sys.stderr('\nExiting by user request'\n'))
      sys.exit(0)