frisby
Profilo di
Nome | frisby |
---|---|
Indirizzo email | [email protected] |
Website URL | http://www.reggelloambiente.it |
Avatar | |
Messaggi | 3 |
-
- 2019-03-18 08:17:29
- Re: BOT Telegram con Keyboard, problema nel richiamare funzioni
- Forum >> Principianti
-
Dopo mesi l'ho risolto...
Non si può richiamare direttamente una funzione dal menu, ma va creata una condizione IF
CODICE DEL SOTTOMENU:
def amelia_keyboard():
keyboard = [[InlineKeyboardButton("SISMO V", callback_data='asv'), .................
SI CREA UNA "IF" all'interno del Comando BUTTON
def button(bot, update):
query = update.callback_query
bot.send_message(text="%s" % query.data, chat_id=query.message.chat_id, message_id=query.message.message_id) <--- Scrive il comando prima della risposta, in questo caso "asv"
if query.data == "asv": bot.send_photo(query.message.chat_id,'/amelia_sismo_v') <--- IF che richiama la funzione
-
- 2018-11-12 08:09:47
- Re: BOT Telegram con Keyboard, problema nel richiamare funzioni
- Forum >> Principianti
- Forse non è così banale come sembra
-
- 2018-11-07 22:14:57
- BOT Telegram con Keyboard, problema nel richiamare funzioni
- Forum >> Principianti
- Buongiorno,
sono 3 giorni che impazzisco, dopo aver scritto oltre 1500 linee di codice da 0, per far "rispondere" il BOT lanciando una funzione anzichè un semplice testo. Intanto allego un estratto del codice che già attivo sulla pagina del BOT @earthqquakebot , lanciando /start
Il BOT sarà operativo all'interno di una chat amatoriale di appassionati di sismologia della quale faccio parte e servirà per richiamare i sismogrammi delle stazioni che partecipano alla rete sismica (attualmente 20 stazioni italiane)
In pratica ho 2 PULSANTI:
SISMO V richiama la funzione (definita precedentemente) amelia_sismo_v che però restituisce l'errore:
WARNING - Update "{........}" caused error "Message is not modified"
WF V, lancia /amelia_wf_v (con la / davanti) che il software interpreta come stringa e la scrive pari pari come risposta. Ovviamente, essendo un comando, viene scritto in BLU da Telegram ed è cliccabile. Cliccandoci sopra viene eseguito correttamente.
Ecco, io in fondo vorrei solo evitare alla fine di dover premere sul comando per visualizzare l'immagine.
Dall'allegato si capisce molto meglio quello che dico.
Grazie a tutti ed a chi riuscirà ad aiutarmi
Claudio
-------------------------------------
PS: Se può essere utile a qualcuno, ho trovato questo sistema per far ricaricare ogni volta le immagini a Telegram ed evitare che le prenda dalla cache. Avevo questa necessità perchè le immagini che richiamo col BOT si auto-aggiornano ogni 3 minuti.
bot.send_photo(update.message.chat_id,'http://www.energialternativa.info/Public/NewForum/ImpiantiRT/SismogrammaEmiro/Sismogramma.png'+'?v='+
time.strftime("%M-%S", time.gmtime()),'Sismogramma Amelia (TR)
Verticale')
----------------------------------------
CODICE BOT:
#!/usr/bin/env python import telepot import logging from telegram import InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import Updater, CommandHandler, CallbackQueryHandler import time import datetime logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) TOKEN="TOKEN-TELEGRAM" # earthqquakebot # TOKEN eventualmente va cambiato anchein fondo nell updater. bot = telepot.Bot(TOKEN) ############################### MENU ############################################ def start(bot, update): # update.message.reply_text(main_menu_message(), reply_markup=main_menu_keyboard()) query = update.callback_query bot.sendMessage(chat_id=update.message.chat_id, text='STAZIONI EArthQQuake', reply_markup=main_menu_keyboard()) def main_menu(bot, update): query = update.callback_query bot.edit_message_text(chat_id=query.message.chat_id, message_id=query.message.message_id, text='STAZIONI EArthQQuake', reply_markup=main_menu_keyboard()) def amelia(bot, update): query = update.callback_query bot.edit_message_text(chat_id=query.message.chat_id, message_id=query.message.message_id, text='AMELIA (TR) - Emiro', reply_markup=amelia_keyboard()) ############################ Keyboards ####################################### def main_menu_keyboard(): keyboard = [[InlineKeyboardButton('AMELIA (TR)', callback_data='amelia')]] return InlineKeyboardMarkup(keyboard) def button(bot, update): query = update.callback_query #NON CANCELLA LA TASTIERA DOPO L INVIO DEL COMANDO bot.send_message(text="%s" % query.data, chat_id=query.message.chat_id, message_id=query.message.message_id) # CANCELLA LA TASTIERA DOPO L INVIO DEL COMANDO #bot.editMessageText(text="%s" % query.data, chat_id=query.message.chat_id, message_id=query.message.message_id) def help(bot, update): update.message.reply_text("Usa /start per aprire il menu principale.") def error(bot, update, error): logging.warning('Update "%s" caused error "%s"' % (update, error)) def amelia_keyboard(): keyboard = [[InlineKeyboardButton("SISMO V", callback_data= 'amelia_sismo_v'), InlineKeyboardButton('WF V', callback_data='/amelia_wf_v')], [InlineKeyboardButton('Indietro', callback_data='main')]] return InlineKeyboardMarkup(keyboard) ############################# FINE MENU ########################## ################################################################## ########################## AMELIA (TR) ########################### ################################################################## def amelia_sismo_v(bot, update): query = update.callback_query bot.send_photo(update.message.chat_id, 'http://www.energialternativa.info/Public/NewForum/ImpiantiRT/SismogrammaEmiro/Sismogramma.png' + '?v='+ time.strftime("%M-%S", time.gmtime()),'Sismogramma Amelia (TR) Verticale') def amelia_wf_v(bot, update): query = update.callback_query bot.send_photo(update.message.chat_id, 'http://www.energialternativa.info/Public/NewForum/ImpiantiRT/SismogrammaEmiro/WaterFall.png' + '?v='+ time.strftime("%M-%S", time.gmtime()),'Waterfall Amelia (TR) Verticale') def main(): # Create the Updater and pass it your bot's token. updater = Updater("TOKEN-TELEGRAM") ############################ MENU ################################### updater.dispatcher.add_handler(CommandHandler('start', start)) updater.dispatcher.add_handler(CommandHandler('help', help)) updater.dispatcher.add_error_handler(error) updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern='main')) updater.dispatcher.add_handler(CallbackQueryHandler(amelia, pattern='amelia')) updater.dispatcher.add_handler(CallbackQueryHandler(button)) ######################################################################## updater.dispatcher.add_handler(CommandHandler('amelia_sismo_v', amelia_sismo_v)) updater.dispatcher.add_handler(CommandHandler('amelia_wf_v', amelia_wf_v)) # Start the Bot updater.start_polling() # Run the bot until the user presses Ctrl-C or the process receives SIGINT, # SIGTERM or SIGABRT updater.idle() if __name__ == '__main__':main()
--- Ultima modifica di ㎝ in data 2018-11-07 23:09:23 ---