Exemple #1
0
 def __init__(self, consumer_key, consumer_secret, access_token,
              access_token_secret, name_db):
     self.db = dbwork.DataBase(name_db)
     self.consumer_key = consumer_key
     self.consumer_secret = consumer_secret
     self.access_token = access_token
     self.access_token_secret = access_token_secret
Exemple #2
0
def send_email(text):
    logger = logging.getLogger('App.send_email')
    db = dbwork.DataBase(settings.NAME_DATABASE)
    db.init_email_table(settings.NAME_TABLE_EMAILS)
    recipients = db.get_emails(settings.NAME_TABLE_EMAILS)
    recipients = [rec[0] for rec in recipients]

    if len(recipients) == []:
        logger.warning('List of emails is empty!')
    for recipient in recipients:
        try:
            msg = MIMEMultipart()

            msg['Subject'] = settings.SUBJECT
            msg['From'] = settings.FROM_EMAIL
            msg['To'] = recipient

            msg.attach(MIMEText(text))

            with open('plot.png', 'rb') as f_pic:
                img = MIMEImage(f_pic.read())
                msg.attach(img)

            server = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
            server.login(settings.ADMIN_EMAIL, settings.ADMIN_PASS)
            server.send_message(msg=msg,
                                from_addr=settings.ADMIN_EMAIL,
                                to_addrs=recipient)
            server.quit()
        except Exception as e:
            logger.info("Can't send email ")
Exemple #3
0
    def send_message(self, text):
        """
        Load list of users telegram bot from database and send message.
        """
        logger = logging.getLogger('App.send_message')
        db = dbwork.DataBase(settings.NAME_DATABASE)
        db.init_user_table(settings.NAME_TABLE_USER)
        users_id = db.get_users_id(settings.NAME_TABLE_USER)
        if users_id == []:
            return False
        i = 0
        while (True):
            try:
                for chat_id in users_id:
                    self.bot.send_message(chat_id[0], text)
                    time.sleep(1)
                    logger.info('Send message success!')
                break
            except Exception:
                logger.warning('Send message cannot connect %s' %
                               apihelper.proxy['https'])
                time.sleep(2)
                i += 1
                if i >= len(self.proxies):
                    i = 0
                    self.proxies = self.get_new_proxies()

                apihelper.proxy = self.proxies[i]
        return True
Exemple #4
0
                def get_users_list(message):
                    command = message.text.split(' ')
                    if len(command) < 2:
                        self.bot.send_message(message.chat.id,
                                              'Введите пароль...')
                    else:
                        password = command[1]
                        if password == str(settings.PASSWORD):
                            db = dbwork.DataBase(settings.NAME_DATABASE)
                            db.init_user_table(settings.NAME_TABLE_USER)
                            users = db.get_users(settings.NAME_TABLE_USER)
                            l_users = []
                            for user in users:
                                l_users.append('|'.join(list(map(str, user))))

                            self.bot.send_message(message.chat.id,
                                                  '\n'.join(l_users))
                            logger.info('Success get users list!')
                        else:
                            self.bot.send_message(message.chat.id,
                                                  'Не верный пароль.')
Exemple #5
0
                def insert_email(message):
                    command = message.text.split(' ')
                    if len(command) != 3:
                        self.bot.send_message(
                            message.chat.id,
                            'Введите корректный запрос: command password email'
                        )
                    else:
                        password = command[1]
                        email = command[2]
                        if password == str(settings.PASSWORD):
                            db = dbwork.DataBase(settings.NAME_DATABASE)
                            db.init_email_table(settings.NAME_TABLE_EMAILS)
                            db.push_email(settings.NAME_TABLE_EMAILS, email)
                            self.bot.send_message(message.chat.id,
                                                  'Почтовый ящик добавлен!')
                            logger.info('Success inserted email!')

                        else:
                            self.bot.send_message(
                                message.chat.id,
                                'Введите корректный пароль...')
Exemple #6
0
 def send_welcome(message):
     chat_id = message.chat.id
     user_id = message.from_user.id
     fname = message.chat.first_name
     lname = message.chat.last_name
     uname = message.chat.username
     db = dbwork.DataBase(settings.NAME_DATABASE)
     db.init_user_table(settings.NAME_TABLE_USER)
     if db.check_user(settings.NAME_TABLE_USER, user_id):
         self.bot.reply_to(
             message,
             "Еще раз привет, %s %s!\nТы уже есть в базе моих друзей!"
             % (fname, lname))
     else:
         db.push_user(settings.NAME_TABLE_USER, user_id,
                      chat_id, fname, lname, uname)
         self.bot.reply_to(
             message,
             "Привет, %s %s !\n Я бот, который поможет тебе торговать!\n\n"
             "Каждый день я буду писать тебе о моём прогнозе цены Bitcoin!"
             % (fname, lname))
     logger.info('Succes send welcome!')
Exemple #7
0
def get_btc_data(currency_pair,
                 period=86400,
                 date_from=(2015, 1, 1),
                 name_table='btc_data'):
    logger = logging.getLogger('App.getpolo.get_btc_data')

    try:
        date_from_utc = datetime(year=date_from[0],
                                 month=date_from[1],
                                 day=date_from[2]).timestamp()
        polo = Poloniex()
        data = polo.returnChartData(currency_pair,
                                    period,
                                    start=date_from_utc,
                                    end=9999999999)
    except Exception as e:
        logger.error('Getting bitcoin data from Poloniex!')

    logger.info('Data from Poloniex has been received!')

    fields = tuple(data[0].keys())
    rows = []

    for row in data:
        values = []
        for field in fields:
            if field == 'date':
                values.append(
                    datetime.utcfromtimestamp(row[field]).strftime('%Y-%m-%d'))
            else:
                values.append(row[field])
        rows.append(values)

    df_data = pd.DataFrame.from_records(rows, columns=fields)
    db = dbwork.DataBase(settings.NAME_DATABASE)
    df_data.to_sql(name_table, db.engine, index=False, if_exists='replace')
    logger.info('Data BTC has been loaded into DATABASE.')
def run():
    db = dbwork.DataBase()

    def send_welcome(message):
        try:
            bot_name = _bot.get_me().username
            _bot.send_message(
                message.chat.id, 'Здравствуйте, я администратор группы! '
                '\nЧтобы стать членом нашей команды, нажмите на ссылку ниже!' +
                'https://t.me/' + bot_name + '?start')
            return 0
        except Exception:
            _bot.send_message(
                message.chat.id,
                'Что-то пошло не так, пожалуйста, сообщите другому администратору'
                ' о вашей проблеме. Извините за неудобство.')

    @_bot.message_handler(content_types=["left_chat_member"])
    def left_user(message):
        try:
            db.delete_user(message.left_chat_member.id)
        except Exception:
            pass

    @_bot.message_handler(commands=['start'])
    def init_dialog(message):
        try:
            if message.chat.id == settings.GROUP_ID:
                check_in_db(message)
            else:
                if db.check_user(message.from_user.id):
                    _bot.send_message(
                        message.from_user.id,
                        'Ты уже есть в нашей базе данных тебе не требуется'
                        ' вводить данную команду!')
                    return 0
                msg = _bot.reply_to(
                    message,
                    "Мы рады приветствовать тебя в нашей группе! Как тебя зовут?"
                )
                _bot.register_next_step_handler(msg, process_name_step)
        except Exception:
            pass

    def process_name_step(message):
        try:
            uid = message.from_user.id
            name = message.text
            user = User(uid, name)
            _users[uid] = user
            msg = _bot.reply_to(message, 'Сколько тебе лет? ')
            _bot.register_next_step_handler(msg, process_age_step)
        except Exception as e:
            _bot.reply_to(
                message, 'Что-то пошло не так с вашим возрастом! '
                'Сообщите любому другому администратору о своей проблеме.')

    def process_age_step(message):
        try:
            age = message.text
            if not age.isdigit():
                msg = _bot.reply_to(
                    message,
                    'Возраст должен быть введен корректным числом. Сколько тебе лет? '
                )
                _bot.register_next_step_handler(msg, process_age_step)
                return
            if int(age) > 100 or int(age) < 3:
                msg = _bot.reply_to(
                    message, 'Неккоректный возраст. Сколько тебе лет? ')
                _bot.register_next_step_handler(msg, process_age_step)
                return

            user = _users[message.from_user.id]
            user.age = age

            markup = telebot.types.ReplyKeyboardMarkup(one_time_keyboard=True,
                                                       row_width=1)
            markup.add('Женщина', 'Мужчина')
            msg = _bot.reply_to(message,
                                'Выбери свой пол: ',
                                reply_markup=markup)
            _bot.register_next_step_handler(msg, process_sex_step)
        except Exception as e:
            _bot.reply_to(
                message, 'Что-то пошло не так с Вашим возрастом! '
                'Сообщите любому другому администратору о своей проблеме или введи команду /start.'
            )

    def process_sex_step(message):
        try:
            sex = message.text
            user = _users[message.from_user.id]
            if (sex == u'Женщина') or (sex == u'Мужчина'):
                user.sex = sex
            else:
                raise Exception()

            msg = _bot.reply_to(message, 'Введите Вашу электронную почту: ')
            _bot.register_next_step_handler(msg, process_email_step)

        except Exception as e:
            _bot.reply_to(
                message, 'Что-то пошло не так с Вашим полом! '
                'Сообщите любому другому администратору о своей проблеме или введите команду: /start.'
            )

    def process_email_step(message):
        try:
            user = _users[message.from_user.id]
            user.email = message.text

            msg = _bot.reply_to(
                message,
                'Напишите кратко о Вашей нише, например "Занимаюсь металопрокатом" :'
            )
            _bot.register_next_step_handler(msg, process_business_step)

        except Exception as e:
            _bot.reply_to(
                message, 'Что-то не так с Вашей почтой! '
                'Сообщите любому другому администратору о своей проблеме или введите команду: /start.'
            )

    def process_business_step(message):
        try:
            user = _users[message.from_user.id]
            user.busy = message.text
            msg = _bot.reply_to(message, 'В каком городе Вы живете?')
            _bot.register_next_step_handler(msg, process_city_step)
        except Exception as e:
            _bot.reply_to(
                message, 'Что-то не так с Вашей нишей! '
                'Сообщите любому другому администратору о своей проблеме.')

    def process_city_step(message):
        try:
            user = _users[message.from_user.id]
            user.city = message.text
            time_now = time.time()
            user.date_msg = str(
                datetime.datetime.fromtimestamp(time_now).strftime(
                    '%Y-%m-%d %H:%M:%S'))
            user.date_msg_unix = time_now
            db.push_user(user)

            _bot.send_message(
                message.from_user.id,
                'Мы рады познакомиться с тобой, ' + user.name + '!'
                '\nНиже приведены правила нашего сообщества, которые нельзя нарушать.'
                '\nВнимательно прочитайте их перед использованием чата.'
                '\n1. Запрещено использовать любую рекламу и ненормативную лексику!'
                '\n2. Пользователи не проявляющие активность более 3-х дней будут удалены!'
                '\n3. Запрещен любой спам и флуд!')
            _users.clear()
        except Exception as e:
            _bot.reply_to(
                message, 'Что-то не так с Вашим городом! '
                'Сообщите любому другому администратору о своей проблеме.')

    # --------------------------------------- mass messages for admin  -------------------------------------------------
    @_bot.message_handler(
        commands=['settings'],
        func=lambda message: message.chat.id != settings.GROUP_ID)
    def setting(message):
        try:
            admins = _bot.get_chat_administrators(settings.GROUP_ID)
            for u in admins:
                if message.from_user.id == u.user.id:
                    markup = telebot.types.ReplyKeyboardMarkup(
                        one_time_keyboard=True, row_width=1)
                    markup.add('Рассылка', 'Добавить RegExp')

                    msg = _bot.reply_to(
                        message,
                        'Доступ разрешен, так как Вы администратор группы.'
                        '\nВыберите режим работы:',
                        reply_markup=markup)
                    _bot.register_next_step_handler(msg, define_mode)
                    break
        except Exception as exc:
            _bot.send_message(message.from_user.id,
                              'Что-то случилось в функциии setting')

    def define_mode(message):
        try:
            if message.text == u'Рассылка':
                msg = _bot.reply_to(
                    message,
                    'Введите Ваше сообщение для рассылка и нажми Enter:')
                _bot.register_next_step_handler(msg, mass_notify)
            elif message.text == u'Добавить RegExp':
                msg = _bot.reply_to(message,
                                    'Введите Ваше регулярное выражение:')
                _bot.register_next_step_handler(msg, add_regexp)
        except Exception as exc:
            _bot.send_message(message,
                              "Что-то случилось в функции define_mode")

    def add_regexp(message):
        try:
            _reg_exp.append(message.text)
            _bot.send_message(message.chat.id,
                              'Регулярное выражение добавлено!')
        except Exception as exc:
            _bot.send_message(message.chat.id, 'Что-то пошло не так!')

    def mass_notify(message):
        try:
            id_rows = db.get_users_id()

            flag = 0
            for uid in id_rows:
                _bot.send_message(uid[0], message.text)
                if flag > 28:
                    flag = 0
                    time.sleep(1)
                flag += 1
            _bot.send_message(
                message.chat.id,
                'Ваше сообщение разослано по всем пользователям группы.')
        except Exception as exc:
            print("Error! Function mass_notify don't work!")

    # --------------------------------------- bot ban --------------------------------------------------------------
    def moderate(message):
        try:
            for regexp in _reg_exp:
                if re.findall(regexp, message.text):
                    _bot.delete_message(message.chat.id, message.message_id)
                    _bot.send_message(
                        message.from_user.id,
                        'Вы получаете временный бан за использование ненормативной лексики или рекламы'
                    )
                    # bot.restrict_chat_member(message.chat.id, message.from_user.id, until_date=time.time() + 360)
        except Exception as exc:
            print("Error! Function moderate() don't work!")

    # ---------------------------------------------- delete links ------------------------------------------------------

    @_bot.message_handler(func=lambda message: message.entities is not None and
                          message.chat.id == settings.GROUP_ID)
    def delete_links(message):
        try:
            for entity in message.entities:
                if entity.type in ["url", "text_link"]:
                    check_time_ban(message)  # -----------------for testing
                    _bot.send_message(
                        message.from_user.id,
                        'Ссылки в нашей группе запрещены, в связи с чем, '
                        'Ваше сообщение было удалено!')
                    _bot.delete_message(message.chat.id, message.message_id)
                else:
                    return
        except Exception as exc:
            print("Error! delete_links don't work!")

    # ------------------------------------------ read all messages -----------------------------------------------------
    @_bot.message_handler(func=lambda message: message.text and message.chat.id
                          == settings.GROUP_ID)
    def check_in_db(message):
        try:
            if db.check_user(message.from_user.id):
                db.push_date_msg(message.date, message.from_user.id)
                moderate(message)
                return 1
            _bot.delete_message(message.chat.id, message.message_id)
            check_time_welcome(message)
        except Exception as exc:
            print("Error! check_in_db don't work")

    def check_time_welcome(message):
        try:
            global TIME_LAUNCH
            time_now = time.time()
            if time_now > TIME_LAUNCH + TIME_WELCOME:
                TIME_LAUNCH = time_now
                send_welcome(message)
                check_time_ban(message)
        except Exception as exc:
            print("Error! check_time_welcome don't work!")

    def check_time_ban(message):
        try:
            users_id = db.get_ban_users(TIME_BAN_UNIX)
            for uid in users_id:
                _bot.send_message(
                    uid[0],
                    'Вы были удалены из группы, в связи с отсутствием активности в чате более 3-х дней!'
                )
                _bot.kick_chat_member(settings.GROUP_ID, uid[0])
                db.delete_user(message.left_chat_member.id)
        except Exception as exc:
            print("Error! check_time_ban don't work!")

    _bot.remove_webhook()

    _bot.set_webhook(url=settings.WEBHOOK_URL_BASE + settings.WEBHOOK_URL_PATH,
                     certificate=open(settings.WEBHOOK_SSL_CERT, 'r'))

    cherrypy.config.update({
        'server.socket_host': settings.WEBHOOK_LISTEN,
        'server.socket_port': settings.WEBHOOK_PORT,
        'server.ssl_module': 'builtin',
        'server.ssl_certificate': settings.WEBHOOK_SSL_CERT,
        'server.ssl_private_key': settings.WEBHOOK_SSL_PRIV
    })

    cherrypy.quickstart(WebhookServer(), settings.WEBHOOK_URL_PATH, {'/': {}})
Exemple #9
0
 def load_data(self, name_db, tab_btc, tab_sentiment):
     db = dbwork.DataBase(name_db)
     btc_data = pd.read_sql(tab_btc, db.engine)
     sent_data = pd.read_sql(tab_sentiment, db.engine)
     return btc_data, sent_data