def __init__(self, user_id, user_command): self.new_menu_correct = True self.user_command = user_command self.user_id = user_id self.__c = SQLiter() self.__prev_user_menu_id = self.__c.get_user_menu(self.user_id) new_part_menu = __MENU_TREE_TEXT__[self.user_command] if new_part_menu == 'main': self.__next_user_menu_id = new_part_menu elif new_part_menu == 'back': self.__next_user_menu_id = '.'.join( self.__prev_user_menu_id.split('.')[:-1]) else: self.__next_user_menu_id = self.__prev_user_menu_id + '.' + new_part_menu # wrong command if self.__next_user_menu_id not in __MENU_TREE__: self.new_menu_correct = False return self.user_menu_handler = __MENU_TREE__[self.__next_user_menu_id][0] self.user_command_type = __MENU_TREE__[self.__next_user_menu_id][2] self._init_reply_menu() self._init_reply_message()
def post_data(): if not request.json: abort(400) db = SQLiter(const.DATABASE_NAME) body = request.json chat_id = body.get('user_id') user_answer = body.get('answer') a = Main(chat_id, user_answer, db) db.close() return a.get_response(), 200
def __init__(self): # Enable logging logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) self.logger = logging.getLogger(__name__) self.__c__ = SQLiter() self.subscribe_job = Job(self._subscription_job_callback, __config__.subscr_time_delta.total_seconds()) # Create the EventHandler and pass it your bot's token. self.updater = Updater(__config__.TG_TOKEN) self.updater.job_queue.put(self.subscribe_job) # Get the dispatcher to register handlers self.dp = self.updater.dispatcher # on different commands - answer in Telegram # self.dp.add_handler(CommandHandler("start", self.start)) # self.dp.add_handler(CommandHandler("help", self.help, pass_args=True)) # self.dp.add_handler(CommandHandler("language_ru", self.subscribe)) self.dp.add_handler(MessageHandler(Filters.text, self._handle_text_message)) # self.dp.add_handler(MessageHandler(Filters.location, self.location)) # log all errors self.dp.add_error_handler(self.error) # Start the Bot self.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. self.updater.idle()
def __init__(self, bot, update): self.bot = bot self.message = update.message self.user_id = self.message.from_user.id self.chat_id = self.message.chat_id self.user_command = self.message.text self.__c = SQLiter() self.user_menu = UserButtonsMenu(self.user_id, self.user_command) if not self.user_menu.new_menu_correct: return # try: handler_func = self.__getattribute__(self.user_menu.user_menu_handler) # call user_menu_handler method handler_func()
def botCreateLinkStep4(message): params.append(message.text) parametr = link.Link(params[0], params[1], params[2], params[3]) db_worker = SQLiter('codes.db') db_worker.insert_row(message.from_user.id, parametr.getCode(), parametr.getChannelLink(), parametr.getNotSub(), parametr.getSub()) db_worker.connection.commit() db_worker.close() links.append(link.Link(params[0], params[1], params[2], params[3])) startWork(message)
def botWatchLink(message): db_worker = SQLiter('codes.db') for i in range(db_worker.count_rows()): answer = db_worker.select_single(i) result = "" for j in answer: result += str(j) + " " bot.send_message(message.chat.id, result, reply_markup=types.ReplyKeyboardRemove()) db_worker.connection.commit() db_worker.close() startWork(message)
def _subscription_job_callback(bot, job): users_data = SQLiter().current_subscriptions(datetime.now(__config__.SERVER_TZ).astimezone(pytz.utc)) if len(users_data) == 0: return for user_data in users_data: JobCommandHandling(bot, **user_data).smart_weather()
class UserButtonsMenu(object): def __init__(self, user_id, user_command): self.new_menu_correct = True self.user_command = user_command self.user_id = user_id self.__c = SQLiter() self.__prev_user_menu_id = self.__c.get_user_menu(self.user_id) new_part_menu = __MENU_TREE_TEXT__[self.user_command] if new_part_menu == 'main': self.__next_user_menu_id = new_part_menu elif new_part_menu == 'back': self.__next_user_menu_id = '.'.join( self.__prev_user_menu_id.split('.')[:-1]) else: self.__next_user_menu_id = self.__prev_user_menu_id + '.' + new_part_menu # wrong command if self.__next_user_menu_id not in __MENU_TREE__: self.new_menu_correct = False return self.user_menu_handler = __MENU_TREE__[self.__next_user_menu_id][0] self.user_command_type = __MENU_TREE__[self.__next_user_menu_id][2] self._init_reply_menu() self._init_reply_message() def __del__(self): if self.user_command_type == 'menu': self.__c.set_user_menu(self.user_id, self.__next_user_menu_id) def _init_reply_menu(self): self.__new_menu = [] for key, value in __MENU_TREE_OD__.items(): if key.startswith(self.__next_user_menu_id + '.') and \ key.count('.') == self.__next_user_menu_id.count('.') + 1: self._add_button_to_menu(key.split('.')[-1]) self.reply_menu = ReplyKeyboardMarkup(self.__new_menu) def _init_reply_message(self): self.reply_message = '' if self.__next_user_menu_id == 'main.preferences': self.reply_message = ('Текущие настройки:\n' 'Координаты для определения погоды - latitude: {lat}, longitude: {lng}\n' 'Подписка: {subscribed}, Время оповещения: {send_time}') \ .format(**self.__c.user_preferences(self.user_id)) elif self.__next_user_menu_id == 'main.weather': self.reply_message = ( 'Меню погоды.\n' 'Умный прогноз - кардинальные изменения погоды в ближайшие сутки\n' 'Текущая - текущая погода\n' 'Ближайшее изменение - когда ожидать кардинальное изменение погоды\n' ) elif self.__next_user_menu_id == 'main': self.reply_message = ('Главное меню.\n' 'Погода - текущая погода и прогнозы\n' 'Настройки - координаты, подписка и пр.') elif self.__next_user_menu_id == 'main.preferences.language': self.reply_message = ( 'Воспользуйтесь одной из команд для смены языка:\n' '/language_ru - русский язык\n' '/language_en - english') def _add_button_to_menu(self, button_name): button_text = '' for key, value in __MENU_TREE_TEXT__.items(): if value == button_name: if button_name == 'location': button_text = KeyboardButton(key, request_location=True) else: button_text = key break if len(self.__new_menu) == 0 or len(self.__new_menu[-1]) == 2: self.__new_menu.append([button_text]) else: self.__new_menu[-1].append(button_text)
class UserCommandHandling(object): def __init__(self, bot, update): self.bot = bot self.message = update.message self.user_id = self.message.from_user.id self.chat_id = self.message.chat_id self.user_command = self.message.text self.__c = SQLiter() self.user_menu = UserButtonsMenu(self.user_id, self.user_command) if not self.user_menu.new_menu_correct: return # try: handler_func = self.__getattribute__(self.user_menu.user_menu_handler) # call user_menu_handler method handler_func() # except (TypeError, NameError): # raise NameError # Main # Define a few command handlers. These usually take the two arguments bot and # update. Error handlers also receive the raised TelegramError object in error. def _start(self): self.__c.find_user(self.message.from_user) # update.message.reply_text('Hi, {} {}!'.format(user_dic['first_name'], user_dic['last_name']), # reply_markup=reply_keyboard_markup(update.message.from_user.id, 'menu_0')) def _help(self): self.message.reply_text('Help!') def _echo(self): self.message.reply_text(self.message.text) def _into_menu(self): self.message.reply_text(text=self.user_menu.reply_message, reply_markup=self.user_menu.reply_menu) # Weather def _init_weather_forecast(self): self.weatherForecast = WeatherForecast(**self._user_location()) def _current_weather(self): self._init_weather_forecast() self.message.reply_text(self.weatherForecast.get_current_weather()) def _smart_weather(self): self._init_weather_forecast() self.message.reply_text(self.weatherForecast.today_smart_weather()) def _nearest_smart_weather(self): self._init_weather_forecast() self.message.reply_text(self.weatherForecast.nearest_weather_change()) def _get_location(self): pass def _set_language(self): pass # self.message.reply_text(get_reply_message(kwargs['menu_path'])) def _subscribe(self): self.__c.subscribe(self.user_id) self.message.reply_text('Подписка обновлена') def _location(self): with self.message.location as l: self.__c.save_location( self.user_id, l.latitude, l.longitude, self.weatherForecast.get_timezone_by_coords( l.latitude, l.longitude)) self.message.reply_text("Your location saved") def _user_location(self): return self.__c.get_user_location(self.user_id)
# -*- coding:utf-8 -*- import CollinsCrawler from Keeper import Keeper from SQLiter import SQLiter if __name__ == '__main__': word = 'function' result = CollinsCrawler.look_up(word) # with Keeper('localhost', 'kingcos', '1234', 'WordList') as keeper: # keeper.create_tables() with SQLiter('WordList.db') as liter: liter.create_tables() if not liter.select('SELECT name FROM Word WHERE name = \'' + result.name + '\''): # Save Word liter.execute( 'INSERT INTO Word (name, phonetic, frequency, additional) values' + result.desc()) word_id = str( liter.select('SELECT id FROM Word WHERE name = \'' + result.name + '\'')[0][0]) # Save Level [ liter.execute('INSERT INTO Level (wordID, name) values (' + word_id + ', \'' + level + '\')') for level in result.levels ]