Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
 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()
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
# -*- 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
            ]