Merge voice 1 #8
@@ -134,10 +134,23 @@ class BotDB:
|
||||
self.logger.info(f"Попытка добавить пользователя в базу данных: user_id={user_id}, first_name={first_name}")
|
||||
try:
|
||||
self.connect()
|
||||
self.cursor.execute("INSERT INTO 'our_users' ('user_id', 'first_name', 'full_name', 'username', 'is_bot', "
|
||||
"'language_code', 'emoji', 'date_added', 'date_changed') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
(user_id, first_name, full_name,
|
||||
username, is_bot, language_code, emoji, date_added, date_changed))
|
||||
try:
|
||||
# Новая схема с колонкой emoji
|
||||
self.cursor.execute(
|
||||
"INSERT INTO 'our_users' ('user_id', 'first_name', 'full_name', 'username', 'is_bot', "
|
||||
"'language_code', 'emoji', 'date_added', 'date_changed') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
(user_id, first_name, full_name, username, is_bot, language_code, emoji, date_added, date_changed)
|
||||
)
|
||||
except sqlite3.OperationalError as e:
|
||||
# Обратная совместимость: старая схема без колонки emoji
|
||||
if 'no column named emoji' in str(e):
|
||||
self.cursor.execute(
|
||||
"INSERT INTO 'our_users' ('user_id', 'first_name', 'full_name', 'username', 'is_bot', "
|
||||
"'language_code', 'date_added', 'date_changed') VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
(user_id, first_name, full_name, username, is_bot, language_code, date_added, date_changed)
|
||||
)
|
||||
else:
|
||||
raise
|
||||
self.conn.commit()
|
||||
self.logger.info(
|
||||
f"Новый пользователь добавлен в базу: user_id={user_id}, first_name={first_name}, emoji={emoji}")
|
||||
|
||||
@@ -20,7 +20,7 @@ from helper_bot.utils.base_dependency_factory import get_global_instance
|
||||
from helper_bot.utils.helper_func import get_first_name, get_text_message, send_text_message, send_photo_message, \
|
||||
send_media_group_message_to_private_chat, prepare_media_group_from_middlewares, send_video_message, \
|
||||
send_video_note_message, send_audio_message, send_voice_message, add_in_db_media, \
|
||||
update_user_info, check_user_emoji
|
||||
check_user_emoji, check_username_and_full_name
|
||||
from logs.custom_logger import logger
|
||||
|
||||
private_router = Router()
|
||||
@@ -90,8 +90,6 @@ async def handle_start_message(message: types.Message, state: FSMContext):
|
||||
is_bot = message.from_user.is_bot
|
||||
language_code = message.from_user.language_code
|
||||
user_id = message.from_user.id
|
||||
await update_user_info('love', message)
|
||||
check_user_emoji(message)
|
||||
|
||||
# Проверяем наличие username для логирования
|
||||
if not username:
|
||||
@@ -106,7 +104,8 @@ async def handle_start_message(message: types.Message, state: FSMContext):
|
||||
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,
|
||||
# Для первоначального добавления эмодзи пока не назначаем (совместимость)
|
||||
BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, "", date,
|
||||
date)
|
||||
else:
|
||||
is_need_update = check_username_and_full_name(user_id, username, full_name, BotDB)
|
||||
|
||||
@@ -4,16 +4,28 @@ import random
|
||||
from datetime import datetime, timedelta
|
||||
from time import sleep
|
||||
|
||||
import emoji
|
||||
try:
|
||||
import emoji as _emoji_lib
|
||||
except Exception:
|
||||
_emoji_lib = None
|
||||
from aiogram import types
|
||||
from aiogram.types import InputMediaPhoto, FSInputFile, InputMediaVideo, InputMediaAudio
|
||||
|
||||
from helper_bot.utils.base_dependency_factory import BaseDependencyFactory
|
||||
from helper_bot.utils.base_dependency_factory import BaseDependencyFactory, get_global_instance
|
||||
from logs.custom_logger import logger
|
||||
|
||||
bdf = get_global_instance()
|
||||
BotDB = bdf.get_db()
|
||||
GROUP_FOR_LOGS = bdf.settings['Telegram']['group_for_logs']
|
||||
|
||||
emoji_list = list(emoji.EMOJI_DATA.keys())
|
||||
if _emoji_lib is not None:
|
||||
emoji_list = list(_emoji_lib.EMOJI_DATA.keys())
|
||||
else:
|
||||
# Fallback minimal emoji set for environments without the 'emoji' package (e.g., CI tests)
|
||||
emoji_list = [
|
||||
"🙂", "😀", "😉", "😎", "🤖", "🦄", "🐱", "🐶", "🍀", "🔥",
|
||||
"🌟", "🎉", "💡", "🚀", "🌈"
|
||||
]
|
||||
|
||||
|
||||
def safe_html_escape(text: str) -> str:
|
||||
@@ -484,7 +496,7 @@ async def update_user_info(source: str, message: types.Message):
|
||||
BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, user_emoji, date,
|
||||
date)
|
||||
else:
|
||||
is_need_update = check_username_and_full_name(user_id, username, full_name)
|
||||
is_need_update = check_username_and_full_name(user_id, username, full_name, BotDB)
|
||||
if is_need_update:
|
||||
BotDB.update_username_and_full_name(user_id, username, full_name)
|
||||
if source != 'voice':
|
||||
@@ -499,7 +511,7 @@ async def update_user_info(source: str, message: types.Message):
|
||||
def check_user_emoji(message: types.Message):
|
||||
user_id = message.from_user.id
|
||||
user_emoji = BotDB.check_emoji_for_user(user_id=user_id)
|
||||
if user_emoji is None:
|
||||
if user_emoji is None or user_emoji in ("Смайл еще не определен", "Эмоджи не определен", ""):
|
||||
user_emoji = get_random_emoji()
|
||||
BotDB.update_emoji_for_user(user_id=user_id, emoji=user_emoji)
|
||||
return user_emoji
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Ensure project root is on sys.path for module resolution
|
||||
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
if CURRENT_DIR not in sys.path:
|
||||
sys.path.insert(0, CURRENT_DIR)
|
||||
|
||||
from helper_bot.main import start_bot
|
||||
from helper_bot.utils.base_dependency_factory import get_global_instance
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Ensure project root is on sys.path for module resolution when running voice bot directly
|
||||
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
PROJECT_ROOT = os.path.dirname(CURRENT_DIR)
|
||||
if PROJECT_ROOT not in sys.path:
|
||||
sys.path.insert(0, PROJECT_ROOT)
|
||||
|
||||
from aiogram import Bot, Dispatcher
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
from aiogram.fsm.storage.memory import MemoryStorage
|
||||
|
||||
Reference in New Issue
Block a user