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)
async def sender(message, user, text=None, keyboard=None, log_text=None, **a_kwargs): global logging dump = True if 'Впервые' in str(log_text) else None task = a_kwargs['func'] if a_kwargs.get('func') else bot.send_message kwargs = { 'log': log_text, 'text': text, 'user': user, 'message': message, 'keyboard': keyboard, **a_kwargs } response, log_text, update = await Auth.async_message(task, **kwargs) if log_text is not None: logging.append(log_text) if dump: head, _, _ = Auth.logs.header(Auth.get_me) await Auth.async_message(bot.send_message, id=Auth.logs.dump_chat_id, text=f'{head}{log_text}') if update: db = SQL(db_path) db.update('users', user['id'], update) db.close() return response
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)
def google_files(): while True: try: db = SQL(db_path) files = drive_client.files(parents=main_folder) for file in files: image = db.get_image_by_id(file['id']) if image: if image['last_update'] < file['modifiedTime']: drive_client.download_file(file_id=file['id'], file_path=image['path']) db.update('images', file['id'], {'last_update': file['modifiedTime']}) sleep(5) except IndexError and Exception: Auth.dev.thread_except()
def google_update(): global google_users_ids while True: try: sleep(2) db = SQL(db_path) users = db.get_updates() if len(users) > 0: client = gspread.service_account('google.json') worksheet = client.open('UNITED USERS').worksheet( os.environ['folder']) for user in users: del user['updates'] if str(user['id']) in google_users_ids: text = 'обновлен' row = google_users_ids.index(str(user['id'])) + 1 else: text = 'добавлен' row = len(google_users_ids) + 1 google_users_ids.append(str(user['id'])) google_row = f'A{row}:{ascii_uppercase[len(user)-1]}{row}' try: user_range = worksheet.range(google_row) except IndexError and Exception as error: if 'exceeds grid limits' in str(error): worksheet.add_rows(1000) user_range = worksheet.range(google_row) sleep(5) else: raise error for index, value, col_type in zip(range(len(user)), user.values(), users_columns): value = Auth.time( value, form='iso', sep='_') if '<DATE>' in col_type else value value = 'None' if value is None else value user_range[index].value = value worksheet.update_cells(user_range) db.update('users', user['id'], {'updates': 0}, True) Auth.dev.printer(f"Пользователь {text} {user['id']}") sleep(1) except IndexError and Exception: Auth.dev.thread_except()
async def editor(call, user, text, keyboard, log_text=None): global logging await bot.answer_callback_query(call['id']) kwargs = { 'log': log_text, 'call': call, 'text': text, 'user': user, 'keyboard': keyboard } response, log_text, update = await Auth.async_message( bot.edit_message_text, **kwargs) if log_text is not None: logging.append(log_text) if update: db = SQL(db_path) db.update('users', user['id'], update) db.close() return response