گفت و گوی بلند مدت با ربات تلگرام

ساخت وبلاگ
سلام عرض می کنم خدمت اعضای محترم انجمن
یه سوال داشتم که چند روز روش گیر افتادم سپاسگزار کسی میشم که در این مورد راهنمایی کنه

من در حال درست کردن یک ربات تلگرام با python telegram bot هستم وقتی من ربات رو درست می کنم به خوبی کار می کنه اما مشکلی وجود داره و اون اینه که

اگه کاربر ربات ربات رو برای چند ساعت رها کنه و دوباره پیام بده دستورات و پیام هایی که میده نادیده نادیده گرفته میشوند و باید ابتدا دستور start رو بفرسته تا دوباره

بتونه با ربات کار کنه خب البته اگه ربات من یک ربات معمولی بود این اتفاق نمی افتاد اما نکنه اینه که ربات من از کلاس conversation استفاده می کنه تا یک گفت و گو با

کاربر داشته باشه و چندین حالت برای کاربر در نظر گرفتم که اگه پیام داد از حالتی به حالت دیگه بره اما امروز فهمیدم که اگه مدتی به ربات پیام ندیم به حالت اولیه بر

می گردد و دوباره باید پیام شروع براش ارسال بشه . من چطور می تونم جلوی این حالت رو بگیرم؟ چطور می تونم کاری کنم که ربات در همون حالت که بوده بمونه؟ و

اینکار یک کار غیر ممکن نیست زیرا در ربات های دیگر مشابه این کار را زیاد دیده ام مثلا

رباتی که نام اهنگ رو براش می فرستم و اونم لینک دانلود رو برام می فرسته بعد من میتونم سه روز دیگه برم و روش کلیک کنم و فایل اهنگ رو دانلود کنم.
من هم این طور رباتی میخوام .

کد من که در واقع همون مثال خود فریم ورکه:

#!/usr/bin/env python# -*- coding: utf-8 -*-
#
# Simple Bot to reply to Telegram messages
# This program is dedicated to the public domain under the CC0 license.
"""
This Bot uses the Updater class to handle the bot.First, a few callback functions are defined. Then, those functions are passed to
the Dispatcher and registered at their respective places.
Then, the bot is started and runs until we press Ctrl-C on the command line.Usage:
Example of a bot-user conversation using ConversationHandler.
Send /start to initiate the conversation.
Press Ctrl-C on the command line or send a signal to the process to stop the
bot.
"""from telegram import (ReplyKeyboardMarkup, ReplyKeyboardRemove)
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters, RegexHandler,
ConversationHandler)import logging# Enable logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)logger = logging.getLogger(__name__)GENDER, PHOTO, LOCATION, BIO = range(4)def start(bot, update):
reply_keyboard = [['Boy', 'Girl', 'Other']]update.message.reply_text(
'Hi! My name is Professor Bot. I will hold a conversation with you. '
'Send /cancel to stop talking to me.nn'
'Are you a boy or a girl?',
reply_markup=ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True))return GENDERdef gender(bot, update):
user = update.message.from_user
logger.info("Gender of %s: %s", user.first_name, update.message.text)
update.message.reply_text('I see! Please send me a photo of yourself, '
'so I know what you look like, or send /skip if you don't want to.',
reply_markup=ReplyKeyboardRemove())return PHOTOdef photo(bot, update):
user = update.message.from_user
photo_file = bot.get_file(update.message.photo[-1].file_id)
photo_file.download('user_photo.jpg')
logger.info("Photo of %s: %s", user.first_name, 'user_photo.jpg')
update.message.reply_text('Gorgeous! Now, send me your location please, '
'or send /skip if you don't want to.')return LOCATIONdef skip_photo(bot, update):
user = update.message.from_user
logger.info("User %s did not send a photo.", user.first_name)
update.message.reply_text('I bet you look great! Now, send me your location please, '
'or send /skip.')return LOCATIONdef location(bot, update):
user = update.message.from_user
user_location = update.message.location
logger.info("Location of %s: %f / %f", user.first_name, user_location.latitude,
user_location.longitude)
update.message.reply_text('Maybe I can visit you sometime! '
'At last, tell me something about yourself.')return BIOdef skip_location(bot, update):
user = update.message.from_user
logger.info("User %s did not send a location.", user.first_name)
update.message.reply_text('You seem a bit paranoid! '
'At last, tell me something about yourself.')return BIOdef bio(bot, update):
user = update.message.from_user
logger.info("Bio of %s: %s", user.first_name, update.message.text)
update.message.reply_text('Thank you! I hope we can talk again some day.')return ConversationHandler.ENDdef cancel(bot, update):
user = update.message.from_user
logger.info("User %s canceled the conversation.", user.first_name)
update.message.reply_text('Bye! I hope we can talk again some day.',
reply_markup=ReplyKeyboardRemove())return ConversationHandler.ENDdef error(bot, update, error):
"""Log Errors caused by Updates."""
logger.warning('Update "%s" caused error "%s"', update, error)def main():
# Create the EventHandler and pass it your bot's token.
updater = Updater("TOKEN")# Get the dispatcher to register handlers
dp = updater.dispatcher# Add conversation handler with the states GENDER, PHOTO, LOCATION and BIO
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],states={
GENDER: [RegexHandler('^(Boy|Girl|Other)$', gender)],PHOTO: [MessageHandler(Filters.photo, photo),
CommandHandler('skip', skip_photo)],LOCATION: [MessageHandler(Filters.location, location),
CommandHandler('skip', skip_location)],BIO: [MessageHandler(Filters.text, bio)]
},fallbacks=[CommandHandler('cancel', cancel)]
)dp.add_handler(conv_handler)# log all errors
dp.add_error_handler(error)# Start the Bot
updater.start_polling()# Run the bot until you press Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT. This should be used most of the time, since
# start_polling() is non-blocking and will stop the bot gracefully.
updater.idle()if __name__ == '__main__': main()
برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 230 تاريخ : جمعه 6 بهمن 1396 ساعت: 10:54

خبرنامه