Telegram 机器人未返回 API 个请求
Telegram bot not returning API requests
我是创建聊天机器人的新手。
import telebot
bot = telebot.TeleBot('123345677789')
def sendMessage(message, text):
bot.send_message(message.chat.id, text)
@bot.message_handler(func=lambda msg: msg.text is not None)
def reply_to_message(message):
if 'hello' in message.text.lower():
sendMessage(message, 'Hello! How are you doing today?')
else:
bot.reply_to(message,'try hi or hello')
@bot.message_handler(func=lambda msg: msg.text is not None)
def getresponse(user_input):
if 'virus' in user_input.text.lower():
url = "https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats"
querystring = {"country":"USA"}
headers = {
'x-rapidapi-host': "covid-19-coronavirus-statistics.p.rapidapi.com",
'x-rapidapi-key': "ea33a4fd9cmshd4ead0c7290"}
response = requests.request("GET", url, headers=headers, params=querystring)
bot.reply_to(user_input,response.text)
else:
bot.reply_to(user_input,'type virus')
我一直在尝试获取 api 到 return 的数据。但是每当我尝试发送请求时,机器人都不会提醒我任何事情。感谢任何帮助。
谢谢!
问题是您对这两个函数使用了相同的过滤器,因此第一个函数将始终优先回复您的消息。您的选择是:融合两个功能,删除第一个功能,从消息更改为命令您的一个功能,或者您可以尝试使用 register_next_step_handler() 这样您在询问信息之前总是必须向机器人致敬(听起来像对我来说太过分了)。
好的,让我们开始融合:
import telebot
import requests
bot = telebot.TeleBot(tgtoken)
def sendMessage(message, text):
bot.send_message(message.chat.id, text)
@bot.message_handler(func=lambda msg: msg.text is not None)
def getresponse(user_input):
if user_input.text.lower() in ["hello", "hi"]:
sendMessage(user_input, 'Hello! How are you doing today?')
elif 'virus' in user_input.text.lower():
url = "https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats"
querystring = {"country":"Denmark"}
headers = {
'x-rapidapi-host': "covid-19-coronavirus-statistics.p.rapidapi.com",
'x-rapidapi-key': rapidapitoken}
response = requests.request("GET", url, headers=headers, params=querystring)
if not response.json()["error"]:
bot.reply_to(user_input,str(response.json()["data"]))
else:
bot.reply_to(user_input,"Error: {!s} , StatusCode: {!s}, Message: {!s}".format(response.json()["error"], response.json()["statusCode"], response.json()["message"]))
else:
bot.reply_to(user_input,'type hi, hello, or virus')
bot.polling()
就是这样。好吧,我作弊了,我用的是丹麦而不是美国,因为与美国相比,丹麦的信息很少。但这不是问题,对吧?那么,解决它的最佳方法是发送所需的最少信息,否则您将遇到两个限制:消息中的最大字符数和拆分消息时请求过多。
PS:也许当您显示从 API 检索信息时出现错误的代码并不完美,我无法对其进行测试。
我是创建聊天机器人的新手。
import telebot
bot = telebot.TeleBot('123345677789')
def sendMessage(message, text):
bot.send_message(message.chat.id, text)
@bot.message_handler(func=lambda msg: msg.text is not None)
def reply_to_message(message):
if 'hello' in message.text.lower():
sendMessage(message, 'Hello! How are you doing today?')
else:
bot.reply_to(message,'try hi or hello')
@bot.message_handler(func=lambda msg: msg.text is not None)
def getresponse(user_input):
if 'virus' in user_input.text.lower():
url = "https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats"
querystring = {"country":"USA"}
headers = {
'x-rapidapi-host': "covid-19-coronavirus-statistics.p.rapidapi.com",
'x-rapidapi-key': "ea33a4fd9cmshd4ead0c7290"}
response = requests.request("GET", url, headers=headers, params=querystring)
bot.reply_to(user_input,response.text)
else:
bot.reply_to(user_input,'type virus')
我一直在尝试获取 api 到 return 的数据。但是每当我尝试发送请求时,机器人都不会提醒我任何事情。感谢任何帮助。
谢谢!
问题是您对这两个函数使用了相同的过滤器,因此第一个函数将始终优先回复您的消息。您的选择是:融合两个功能,删除第一个功能,从消息更改为命令您的一个功能,或者您可以尝试使用 register_next_step_handler() 这样您在询问信息之前总是必须向机器人致敬(听起来像对我来说太过分了)。
好的,让我们开始融合:
import telebot
import requests
bot = telebot.TeleBot(tgtoken)
def sendMessage(message, text):
bot.send_message(message.chat.id, text)
@bot.message_handler(func=lambda msg: msg.text is not None)
def getresponse(user_input):
if user_input.text.lower() in ["hello", "hi"]:
sendMessage(user_input, 'Hello! How are you doing today?')
elif 'virus' in user_input.text.lower():
url = "https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats"
querystring = {"country":"Denmark"}
headers = {
'x-rapidapi-host': "covid-19-coronavirus-statistics.p.rapidapi.com",
'x-rapidapi-key': rapidapitoken}
response = requests.request("GET", url, headers=headers, params=querystring)
if not response.json()["error"]:
bot.reply_to(user_input,str(response.json()["data"]))
else:
bot.reply_to(user_input,"Error: {!s} , StatusCode: {!s}, Message: {!s}".format(response.json()["error"], response.json()["statusCode"], response.json()["message"]))
else:
bot.reply_to(user_input,'type hi, hello, or virus')
bot.polling()
就是这样。好吧,我作弊了,我用的是丹麦而不是美国,因为与美国相比,丹麦的信息很少。但这不是问题,对吧?那么,解决它的最佳方法是发送所需的最少信息,否则您将遇到两个限制:消息中的最大字符数和拆分消息时请求过多。
PS:也许当您显示从 API 检索信息时出现错误的代码并不完美,我无法对其进行测试。