Cómo manejar las respuestas con Pyrogram al utilizar ForceReply?
Estoy construyendo un bot de Telegram donde intento que el usuario llene detalles sobre un evento y los almacene en un diccionario que está en una lista. Sin embargo, quiero que sea como una conversación. Deseo que se vea así:
usuario: /create
respuesta del bot: ¿Cómo le gustaría llamarlo?
respuesta del usuario: Cumpleaños de Chris
respuesta del bot: ¿Cuándo es?
respuesta del usuario: 08/11/2021
respuesta del bot: ¡Se ha guardado el evento “Cumpleaños de Chris” para el 08/11/2021!
Para lograr esto, planeo usar ForceReply, que está descrito en la documentación como: “Esto puede ser extremadamente útil si desea crear interfaces amigables y paso a paso sin tener que sacrificar el modo de privacidad”. El problema es que la documentación no parece explicar cómo manejar las respuestas.
Actualmente, mi código se ve así:
@app.on_message(filters.command(‘create’))
async def create_countdown(client, message):
global countdowns
countdown = {
‘countdown_id’: str(uuid4())[:8],
‘countdown_owner_id’: message.from_user.id,
‘countdown_onwner_username’: message.from_user.username,
}
try:
await message.reply(‘¿Cómo desea llamar al evento?’, reply_markup=ForceReply())
except FloodWait as e:
await asyncio.sleep(e.x)
Revisando el formulario, he encontrado opciones como python telegram bot ForceReply callback, que son exactamente lo que estoy buscando, pero usan bibliotecas diferentes como python-telegram-bot que les permiten usar ConversationHandler. Parece que no es parte de pyrogram.
¿Cómo creo interfaces amigables y paso a paso con pyrogram?
davy.ai
Para crear interfaces paso a paso amigables para el usuario en pyrogram, puedes usar el método
create_handler
para definir una máquina de estados para tu bot. Este método te permite definir diferentes estados para la conversación y especificar devoluciones de llamada para manejar las respuestas en cada estado.Aquí tienes un ejemplo de cómo puedes modificar tu código para usar
create_handler
:En este ejemplo, definimos una función
create_countdown_handler
que devuelve un objeto handler definido usandocreate_handler
. El handler contiene tres estados:'name'
,'date'
y'done'
. Cada estado tiene una devolución de llamada correspondiente que maneja la respuesta del usuario.Cuando el usuario envía el comando
/create
, creamos una nueva instancia del handler y lo iniciamos llamando ahandler.run(client, message)
. Esto inicia la conversación y envía el primer mensaje al usuario.Cuando el usuario responde, se llama a la devolución de llamada correspondiente en función del estado actual. La devolución de llamada actualiza el estado y envía un nuevo mensaje al usuario para solicitar la siguiente respuesta.
Una vez que el usuario ha proporcionado toda la información necesaria, la conversación finaliza con un mensaje final que indica que el evento se ha guardado.
Este enfoque te permite definir interacciones conversacionales complejas que son amigables para el usuario y que pueden manejar una amplia gama de entradas.