diff --git a/db.py b/db.py index 1430be4..0b9f437 100644 --- a/db.py +++ b/db.py @@ -287,6 +287,13 @@ class BotDB: except sqlite3.Error as error: print(error) + def update_date_for_user(self, date, user_id: int): + try: + result = self.cursor.execute("UPDATE `our_users` SET `date_changed` = ? WHERE `user_id` = ?", (date, user_id,)) + return self.conn.commit() + except sqlite3.Error as error: + print(error) + def get_user_by_message_id(self, message_id): """Возвращает идентификатор пользователя по идентификатору сообщения""" try: diff --git a/main.py b/main.py index d3a46ee..83c5902 100644 --- a/main.py +++ b/main.py @@ -83,6 +83,7 @@ class TelegramHelperBot: #TODO: Админку сделать! self.bot.send_message(message.chat.id, "Ты в админке, Ура! Делай что хочешь") + self.admin_panel(message) elif message.text == '/state': print(f'Внутри функции handle_message // Команда /state // state - {self.state.value}') self.bot.send_message(message.chat.id, @@ -121,6 +122,37 @@ class TelegramHelperBot: chat_id = BotDB.get_user_by_message_id(message_id) self.bot.send_message(chat_id, message_from_admin, reply_markup=markup) + # Админка + @self.bot.callback_query_handler(func=lambda call: True) + def post_for_group(call): + if call.data == 'publish' and call.message.content_type == 'text': + try: + self.bot.send_message(chat_id=MAIN_PUBLIC, text=call.message.text) + self.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) + except Exception as e: + if LOGS: + self.bot.send_message(chat_id=IMPORTANT_LOGS, + text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") + elif call.data == 'publish' and call.message.content_type == 'photo': + try: + self.bot.send_photo( + chat_id=MAIN_PUBLIC, + caption=call.message.caption, + photo=call.message.photo[-1].file_id, + ) + self.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) + except Exception as e: + if LOGS: + self.bot.send_message(chat_id=IMPORTANT_LOGS, + text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") + elif call.data == 'decline': + try: + self.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) + except Exception as e: + if LOGS: + self.bot.send_message(IMPORTANT_LOGS, + f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") + def register_chat_handler(self, message): self.bot.register_next_step_handler(message, self.resend_message_in_group_for_message) @@ -131,6 +163,33 @@ class TelegramHelperBot: except (ConnectionError, Exception): print(f"Произошла ошибка: {str(Exception)}\n\nTraceback:\n{traceback.format_exc()}") + # Черный список + def admin_panel(self, message): + try: + #Добавить админа: 842766148 + markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) + item1 = types.KeyboardButton("Забанить пользователя из списка") + item2 = types.KeyboardButton("Забанить пользователя по ID") + markup.add(item1, item2) + self.bot.send_message(message.chat.id, "Добро пожаловать в админку. Выбери что хочешь:", reply_markup=markup) + self.bot.register_next_step_handler(message, self.ban_user) + except Exception as e: + self.bot.register_next_step_handler(message, self.admin_panel) + + def ban_user(self, message): + # проверяем, что ID передан правильно + #TODO: остановился где-то тут, функция не дописана. Хотел сделать админку + бан пользователей + try: + if message.text == "Забанить пользователя из списка": + pass + elif message.text == "Забанить пользователя по ID": + self.bot.send_message(message.chat.id, "Пришли ID юзера") + #BotDB.set_user_blacklist(ban_user_id) + #bot.reply_to(message, f"Пользователь {ban_user_id} заблокирован.") + except Exception as e: + self.bot.reply_to(message, f"Укажи ID пользователя. Ошибка\n\n {e}") + self.bot.register_next_step_handler(message, self.ban_user) + def start_message(self, message): try: name_stick_hello = list(Path('Stick').rglob('Hello_*')) @@ -155,12 +214,12 @@ class TelegramHelperBot: is_bot = message.from_user.is_bot username = message.from_user.username language_code = message.from_user.language_code - date_added = datetime.now() - date_changed = date_added - + current_date = datetime.now() + date = current_date.strftime("%Y-%m-%d %H:%M:%S") if not BotDB.user_exists(user_id): - BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, date_added, - date_changed) + BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, date, + date) + BotDB.update_date_for_user(date, user_id) markup = self.get_reply_keyboard(message) hello_message = messages.get_message(self.__get_first_name(message), 'HELLO_MESSAGE') self.bot.send_message(message.chat.id, hello_message, parse_mode='html', reply_markup=markup, @@ -177,8 +236,9 @@ class TelegramHelperBot: from_chat_id=message.chat.id, message_id=message.message_id ) - print(f'Кладу в базу: {message.message_id}') - BotDB.add_new_message_in_db(message.text, message.message_id + 1, message.from_user.id, datetime.now(), 0) + current_date = datetime.now() + date = current_date.strftime("%Y-%m-%d %H:%M:%S") + BotDB.add_new_message_in_db(message.text, message.message_id + 1, message.from_user.id, date, 0) question = messages.get_message(self.__get_first_name(message), 'QUESTION') markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) item1 = types.KeyboardButton("Выйти из чата") @@ -253,7 +313,7 @@ class TelegramHelperBot: def resend_message_in_group_for_post(self, message): markup = types.InlineKeyboardMarkup(row_width=1) - item1 = types.InlineKeyboardButton("Опубликовать", callback_data='post_post_post') + item1 = types.InlineKeyboardButton("Опубликовать", callback_data='publish') item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline') markup.add(item1, item2) try: @@ -345,70 +405,6 @@ class TelegramHelperBot: bot = TelegramHelperBot(BOT_TOKEN) -def telegram_bot(): - # Черный список - - @bot.message_handler(commands=['admin'], user_id=842766148) - def admin_panel(message): - try: - markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) - item1 = types.KeyboardButton("Забанить пользователя из списка") - item2 = types.KeyboardButton("Забанить пользователя по ID") - markup.add(item1, item2) - bot.send_message(message.chat.id, "Добро пожаловать в админку. Выбери что хочешь:", reply_markup=markup) - bot.register_next_step_handler(message, ban_user) - except Exception as e: - bot.register_next_step_handler(message, admin_panel) - - def ban_user(message): - # проверяем, что ID передан правильно - #TODO: остановился где-то тут, функция не дописана. Хотел сделать админку + бан пользователей - try: - if message.text == "Забанить пользователя из списка": - pass - elif message.text == "Забанить пользователя по ID": - bot.send_message(message.chat.id, "Пришли ID юзера") - #BotDB.set_user_blacklist(ban_user_id) - #bot.reply_to(message, f"Пользователь {ban_user_id} заблокирован.") - except Exception as e: - bot.reply_to(message, f"Укажи ID пользователя. Ошибка\n\n {e}") - bot.register_next_step_handler(message, ban_user) - - - # Админка - @bot.callback_query_handler(func=lambda call: True) - def post_for_group(call): - if call.data == 'post_post_post' and call.message.content_type == 'text': - try: - bot.send_message(chat_id=MAIN_PUBLIC, text=call.message.text) - bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) - except Exception as e: - if LOGS: - bot.send_message(chat_id=IMPORTANT_LOGS, - text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") - elif call.data == 'post_post_post' and call.message.content_type == 'photo': - try: - bot.send_photo( - chat_id=MAIN_PUBLIC, - caption=call.message.caption, - photo=call.message.photo[-1].file_id, - ) - bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) - except Exception as e: - if LOGS: - bot.send_message(chat_id=IMPORTANT_LOGS, - text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") - elif call.data == 'decline': - try: - bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id) - except Exception as e: - if LOGS: - bot.send_message(IMPORTANT_LOGS, - f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") - - def __get_first_name(message): - return message.from_user.first_name - if __name__ == "__main__": # Запускаем бота