Чтобы расширить функционал вашего Telegram-бота и добавить возможность вставки кастомных эмодзи в водяной знак, вам нужно сделать несколько вещей. Во-первых, вы должны предоставить команду или функцию, которая будет позволять пользователю задавать кастомный водяной знак с эмодзи. Во-вторых, вам необходимо обновить обработчик новых сообщений, чтобы учесть пользовательские настройки при добавлении водяного знака.
Вот базовый пример, как это можно реализовать.
1. Разработайте команду для установки кастомного водяного знака с эмодзи.
2. Измените обработчик нового поста, чтобы использовать заданный водяной знак.
### Новый код
Добавьте следующий код для реализации этой функциональности:
```python
# Словарь для хранения пользовательских водяных знаков по ID пользователя
user_watermarks = {}
# Команда для установки кастомного водяного знака
async def set_watermark(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Устанавливает кастомный водяной знак для пользователя."""
user_id = update.effective_user.id
if context.args:
# Объединяем все аргументы и формируем один водяной знак
custom_watermark = ' '.join(context.args)
user_watermarks[user_id] = custom_watermark
await update.message.reply_text(f"Ваш водяной знак установлен: {custom_watermark}")
else:
await update.message.reply_text("Пожалуйста, введите текст водяного знака после команды.")
# Обработчик новых сообщений в канале с учетом пользовательского водяного знака
async def handle_channel_post(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Добавляет водяной знак к новым сообщениям в канале."""
post = update.channel_post
if not post:
return
user_id = post.from_user.id
default_watermark = "© Ваш водяной знак"
# Получаем пользовательский водяной знак, если он установлен
watermark = user_watermarks.get(user_id, default_watermark)
separator = "\n\n"
try:
if post.text:
original_entities = list(post.entities or [])
updated_text = f"{post.text}{separator}{watermark}"
# Корректируем smeshenie entities для нового текста
new_entities = adjust_entities_offset(original_entities, len(updated_text) - len(post.text))
await context.bot.send_message(chat_id=post.chat.id, text=updated_text, entities=new_entities)
await context.bot.delete_message(chat_id=post.chat.id, message_id=post.message_id)
except Exception as e:
logger.error(f"Ошибка при обработке поста: {e}")
def main():
"""Запуск бота."""
application = ApplicationBuilder().token(TOKEN).build()
application.add_handler(CommandHandler("set_watermark", set_watermark))
application.add_handler(MessageHandler(filters.Channel, handle_channel_post))
application.run_polling()
if __name__ == "__main__":
main()
```
### Объяснение кода:
1. **Словарь для водяных знаков**: Мы используем словарь `user_watermarks`, чтобы хранить индивидуальные водяные знаки для каждого пользователя, который взаимодействует с ботом.
2. **Команда `/set_watermark`**: Вы добавили команду, которая позволяет пользователю установить свой собственный водяной знак. Пользователь вводит эту команду с текстом знака, и он сохраняется в `user_watermarks`.
3. **Обновленный обработчик сообщений**: Теперь в обработчике `handle_channel_post` мы проверяем наличие пользовательского водяного знака для пользователя или используем стандартный, если его нет.
Теперь ваш Telegram-бот будет добавлять кастомные водяные знаки с эмодзи в уведомления по мере их поступления!