Je crée un robot Telegram qui peut accéder à la base de données pour répondre à la requête des utilisateurs. Le bot doit répondre à une demande spécifique de certaines données dans la base de données. J'ai été capable de résoudre quand les utilisateurs demandent toutes les données, mais je suis coincé avec des données individuelles. J'utilise telegram.ext
du paquet telegram
en python. Voici ce que j'ai fait jusqu'ici.Le télégramme Bot répond à une commande spécifique dans la liste Python
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()
Je cherche un moyen de passer la commande en cours, qui est également l'ID dans la base de données qui demande de l'utilisateur dans la liste currr[]
à la fonction individualreq(bot, update)
afin que seules les données de l'ID appelé est en train de répondre. Les utilisateurs choisiront parmi une liste d'ID dans le télégramme et le gestionnaire de commande peut transmettre l'ID sélectionné à la fonction. Je n'ai pas trouvé un moyen de transmettre l'identifiant à la fonction. Quelqu'un pourrait m'aider à résoudre cela s'il vous plaît. Merci
J'ai essayé ceci mais la sortie est seulement une parenthèse vide []. J'ai aussi essayé 'pass_args = True' mais la sortie est la même. –
Est-ce que vous interrogez le répartiteur et testez avec un compte d'utilisateur? –
Oui Je suis en train d'interroger et de tester avec un compte d'utilisateur. Le robot peut également répondre au groupe Telegram. –