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)
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
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)
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)
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)
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)
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)