Telegram Bot 响应 Python 列表中的特定命令
Telegram Bot respond to specific command in Python list
我正在制作一个可以访问数据库以回复用户查询的 Telegram 机器人。机器人需要响应数据库中某些数据的特定请求。当用户请求所有数据时,我能够解决,但我被个人数据困住了。我正在使用 python 中 telegram
包中的 telegram.ext
。这是我到目前为止所做的。
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import MySQLdb
currr = [] # global list var ~don't bash me for using global in python please, I'm a newbie
# request for all data in database
def request2(bot, update):
db = MySQLdb.connect(host = "local", user = "root", passwd = "pwd", db = "mydb")
cur = db.cursor()
cur.execute("select ID from table")
ID = cur.fetchall()
cur.execute("SELECT ID, temp FROM table2 order by indexs desc")
each_rows = cur.fetchall()
for IDs in ID:
for each_row in each_rows:
if str(each_row[0])[0:4]==str(ID)[2:6]:
update.message.reply_text('reply all related data here')
break
# request for single data
def individualreq(bot, update):
db = pymysql.connect(host = "localhost", user = "root", passwd = "pwd", db = "mydb")
update.message.reply_text('reply individual data to users here')
def main():
updater = Updater("TOKEN")
dp = updater.dispatcher
global currr
# get all ID form database
db = MySQLdb.connect(host = "localhost", user = "root", passwd = "pwd", db = "mydb")
cur = db.cursor()
cur.execute("select ID from table")
curr_ID = cur.fetchall()
# example ID = 'F01', 'F02', 'F03'
for curr_IDs in curr_ID:
currr.append(curr_IDs[0])
# request all data
dp.add_handler(CommandHandler("all", request2))
# request individual data
dp.add_handler(CommandHandler(currr, individualreq)) # list command in currr[]
if __name__ == '__main__':
main()
我正在寻找一种方法来将当前命令(也是用户在 currr[]
列表中请求的数据库中的 ID)传递给 individualreq(bot, update)
函数,以便只有被调用 ID 的数据正在回复。用户将从电报中的 ID 列表中 select,命令处理程序可以将 selected ID 传递给函数。我还没有找到将 ID 传递给函数的方法。有人可以帮我解决这个问题吗?谢谢
你可以直接individualreq
闭包。
CommandHandler
获取要收听的命令或命令列表以及其他选项的列表。
There is a pass_user_data
option 允许将用户数据传递给回调。
dp.add_handler(CommandHandler(currr, individualreq, pass_user_data=True))
individualreq
回调的签名将更新为采用 user_data
def individualreq(bot, update, user_data=None):
#user_data is a dict
print(user_data)
我从 Oluwafemi Sule 提供的答案中找到了我的问题的解决方案。 CommandHandler
可以通过在 CommandHandler
.
中添加 pass_args=True
将命令的参数传递给函数
dp.add_handler(CommandHandler(currr, individualreq, pass_args=True))
要打印出函数中的参数,函数需要接收参数。
def individualreq(bot, update, args):
# id store the args value
id = update.message.text
print(id[1:]) # [1:] is to get rid of the / in id
我正在制作一个可以访问数据库以回复用户查询的 Telegram 机器人。机器人需要响应数据库中某些数据的特定请求。当用户请求所有数据时,我能够解决,但我被个人数据困住了。我正在使用 python 中 telegram
包中的 telegram.ext
。这是我到目前为止所做的。
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import MySQLdb
currr = [] # global list var ~don't bash me for using global in python please, I'm a newbie
# request for all data in database
def request2(bot, update):
db = MySQLdb.connect(host = "local", user = "root", passwd = "pwd", db = "mydb")
cur = db.cursor()
cur.execute("select ID from table")
ID = cur.fetchall()
cur.execute("SELECT ID, temp FROM table2 order by indexs desc")
each_rows = cur.fetchall()
for IDs in ID:
for each_row in each_rows:
if str(each_row[0])[0:4]==str(ID)[2:6]:
update.message.reply_text('reply all related data here')
break
# request for single data
def individualreq(bot, update):
db = pymysql.connect(host = "localhost", user = "root", passwd = "pwd", db = "mydb")
update.message.reply_text('reply individual data to users here')
def main():
updater = Updater("TOKEN")
dp = updater.dispatcher
global currr
# get all ID form database
db = MySQLdb.connect(host = "localhost", user = "root", passwd = "pwd", db = "mydb")
cur = db.cursor()
cur.execute("select ID from table")
curr_ID = cur.fetchall()
# example ID = 'F01', 'F02', 'F03'
for curr_IDs in curr_ID:
currr.append(curr_IDs[0])
# request all data
dp.add_handler(CommandHandler("all", request2))
# request individual data
dp.add_handler(CommandHandler(currr, individualreq)) # list command in currr[]
if __name__ == '__main__':
main()
我正在寻找一种方法来将当前命令(也是用户在 currr[]
列表中请求的数据库中的 ID)传递给 individualreq(bot, update)
函数,以便只有被调用 ID 的数据正在回复。用户将从电报中的 ID 列表中 select,命令处理程序可以将 selected ID 传递给函数。我还没有找到将 ID 传递给函数的方法。有人可以帮我解决这个问题吗?谢谢
你可以直接individualreq
闭包。
CommandHandler
获取要收听的命令或命令列表以及其他选项的列表。
There is a pass_user_data
option 允许将用户数据传递给回调。
dp.add_handler(CommandHandler(currr, individualreq, pass_user_data=True))
individualreq
回调的签名将更新为采用 user_data
def individualreq(bot, update, user_data=None):
#user_data is a dict
print(user_data)
我从 Oluwafemi Sule 提供的答案中找到了我的问题的解决方案。 CommandHandler
可以通过在 CommandHandler
.
pass_args=True
将命令的参数传递给函数
dp.add_handler(CommandHandler(currr, individualreq, pass_args=True))
要打印出函数中的参数,函数需要接收参数。
def individualreq(bot, update, args):
# id store the args value
id = update.message.text
print(id[1:]) # [1:] is to get rid of the / in id