Esempio n. 1
0
async def member_handler(message: types.ChatMember):
    global logging
    try:
        db = SQL(db_path)
        text, keyboard = None, None
        user = db.get_user(message['chat']['id'])
        log_text, update, greeting = Auth.logs.chat_member(
            message, db.get_user(message['chat']['id']))
        if greeting:
            text = 'Добро пожаловать, снова'
            if user is None:
                await asyncio.sleep(1)
                text, keyboard = first_start(message)
                if message['chat']['type'] == 'channel':
                    text = None
        logging.append(log_text)
        db.update('users', message['chat']['id'], update) if update else None
        keyboard = keyboard if message['chat']['type'] != 'channel' else None
        await Auth.async_message(bot.send_message,
                                 id=message['chat']['id'],
                                 text=text,
                                 keyboard=keyboard)
        db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(message)
Esempio n. 2
0
def users_db_creation():
    db = SQL(db_path)
    spreadsheet = gspread.service_account('google.json').open('UNITED USERS')
    users = spreadsheet.worksheet(os.environ['folder']).get(
        'A1:Z50000', major_dimension='ROWS')
    raw_columns = db.create_table('users', users.pop(0), additional=True)
    users_ids, columns = db.upload('users', raw_columns, users)
    _zero_user = db.get_user(0)
    db.close()
    return _zero_user, ['id', *users_ids], columns
Esempio n. 3
0
async def red_messages(message: types.Message):
    try:
        db = SQL(db_path)
        text, keyboard = None, None
        user = db.get_user(message['chat']['id'])
        if user and message['migrate_to_chat_id']:
            db.update('users', user['id'], {
                'username': '******',
                'reaction': '🅾️'
            })
        await sender(message, user, text, keyboard, log_text=True)
        db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(message)
Esempio n. 4
0
async def repeat_channel_messages(message: types.Message):
    global start_message
    try:
        if str(message['chat']['id']) == digest_channel:
            battle = None
            search = re.search(r'Битва (\d{2}/\d{2}/\d{4} \d{2}:\d{2})',
                               message['text'])
            if search:
                battle_stamp = objects.stamper(search.group(1),
                                               delta=3,
                                               pattern='%d/%m/%Y %H:%M')
                if (time_now() - battle_stamp) < 1800 and (
                        time_now() - dict(message).get('date')) < 1800:
                    battle = Auth.time(battle_stamp,
                                       form='normal',
                                       sep='/',
                                       tag=italic,
                                       seconds=None)

            if battle:
                db = SQL(db_path)
                users = db.get_users()
                stamp = datetime.now(tz).timestamp()
                db.close()
                coroutines = [
                    sender(message,
                           user=user,
                           func=bot.forward_message,
                           id=user['id']) for user in users
                ]
                await asyncio.gather(*coroutines)
                text = bold(
                    chats_to_human(
                        len(users),
                        round(datetime.now(tz).timestamp() - stamp, 3)))
                start_message = Auth.message(
                    old_message=start_message,
                    text=f"\n\nСводки {battle}:\n{text}")
        else:
            if str(message['chat']['id']) not in channels:
                db = SQL(db_path)
                text, log_text = None, None
                user = db.get_user(message['chat']['id'])
                if user is None:
                    text, log_text = first_start(message), ' [#Впервые]'
                await sender(message, user=user, text=text, log_text=log_text)
                db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(message)
Esempio n. 5
0
async def callbacks(call):
    try:
        db = SQL(db_path)
        keyboard = call['message']['reply_markup']
        user = db.get_user(call['message']['chat']['id'])
        if user:
            text, log_text = None, None
            split = call['data'].split('_')
            if len(split) == 2:
                if split[0] in names:
                    image = db.get_image(name=split[0], frame=split[1])
                    await editor(call,
                                 user,
                                 text=text,
                                 keyboard=keyboard,
                                 log_text=log_text)
                    if image:
                        caption = None
                        if call['message']['chat']['id'] == idMe:
                            last_update = Auth.logs.time(image['last_update'],
                                                         tag=bold,
                                                         form='iso')
                            caption = f"Изображение: {bold(image['path'])}\nОбновлено: {last_update}"
                        await sender(call['message'],
                                     user,
                                     id=call['message']['chat']['id'],
                                     func=bot.send_photo,
                                     path=image['path'],
                                     caption=caption)
            else:
                for frame, f_text in frames:
                    if str(frame) in call['data']:
                        keyboard = keys.currencies(frame)
                        text = f'Выбран фрейм {f_text}, выберите валюту'
                await editor(call,
                             user,
                             text=text,
                             keyboard=keyboard,
                             log_text=log_text)
        db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(call)
Esempio n. 6
0
async def repeat_all_messages(message: types.Message):
    try:
        db = SQL(db_path)
        user = db.get_user(message['chat']['id'])
        text, log_text = None, True
        if user:
            if message['chat']['id'] == idMe:
                if message['text'].lower().startswith('/logs'):
                    text = Auth.logs.text()

                elif message['text'].lower().startswith('/reboot'):
                    text, log_text = Auth.logs.reboot(dispatcher)

            elif message['text'].lower().startswith('/reg'):
                text = '✅'
        else:
            log_text = ' [#Впервые]'
            text = first_start(message)
        await sender(message, user, text=text, log_text=log_text)
        db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(message)
Esempio n. 7
0
async def repeat_all_messages(message: types.Message):
    try:
        db = SQL(db_path)
        user = db.get_user(message['chat']['id'])
        if user:
            keyboard = keys.folders()
            text, response, log_text = None, None, True

            if message['text'].startswith('/'):
                if message['text'].lower().startswith('/st'):
                    text = 'Добро пожаловать, снова'

                if message['chat']['id'] == idMe:
                    if message['text'].lower().startswith('/info'):
                        text = ''
                        images = db.get_images()
                        now = Auth.logs.time(form='iso', tag=bold)
                        for image in images:
                            name = re.sub('images/', '', image['path'])
                            last_update = Auth.logs.time(image['last_update'],
                                                         tag=bold,
                                                         form='iso')
                            text += f'{name}: {last_update}\n'
                        text += f"{code('-' * 30)}\nСейчас: {now}"

                    elif message['text'].lower().startswith('/logs'):
                        text = Auth.logs.text()

                    elif message['text'].lower().startswith('/reboot'):
                        text, log_text = Auth.logs.reboot(dispatcher)

                    elif message['text'].lower().startswith('/new'):
                        response = True
                        await Auth.async_message(bot.send_photo,
                                                 id=message['chat']['id'],
                                                 path='images/alt.jpg')

                    elif message['text'].lower().startswith('/reload'):
                        text = 'Успешно отправлено:'
                        query = "SELECT id FROM users WHERE reaction = '✅' AND NOT id = 0"
                        users = db.request(query)
                        for target_user in users:
                            text += f"\n{target_user['id']}"
                            await Auth.async_message(bot.send_message,
                                                     id=target_user['id'],
                                                     text=bold('Бот обновлен'),
                                                     keyboard=keys.folders())

                if message['text'].lower().startswith('/remove'):
                    await bot.send_message(
                        message['chat']['id'],
                        bold('Окей'),
                        reply_markup=types.ReplyKeyboardRemove(True),
                        parse_mode='HTML')

            elif message['text'].lower().startswith('f'):
                text = bold('Пример сообщения')

            elif message['text'].lower().startswith('h'):
                text = 'Выбор таймфрейма'
                keyboard = keys.frames()

            await sender(message, user, text, keyboard, log_text=log_text)
            if text is None and response is None:
                task = Auth.async_bot.forward_message
                await Auth.logs.async_message(task,
                                              id=Auth.logs.dump_chat_id,
                                              message=message)
        else:
            text, keyboard = first_start(message)
            await sender(message, user, text, keyboard, log_text=' [#Впервые]')
        db.close()
    except IndexError and Exception:
        await Auth.dev.async_except(message)