• XSS.stack #1 – первый литературный журнал от юзеров форума

Вопрос по телеграм группам

Cosmo

дренаж осушетелем
КИДАЛА
Регистрация
28.05.2024
Сообщения
120
Реакции
205
Гарант сделки
4
Пожалуйста, обратите внимание, что пользователь заблокирован
Подскажите, через какого бота можно настроить приветственное сообщение для новых юзеров в тг группе, с прикреплением своего линка

Схема такая:
Юзер вступает в группу, бот шлет ему мое сообщение с ссылкой.
Видел как это реализовано с капчей, но насколько я понимаю, произвольные сообщения от бота можно тоже настроить
 
1734282888667.png

Python:
import telebot

bot = telebot.TeleBot('твой токен')

@bot.message_handler(content_types=['new_chat_members'])
def welcome(message):
    chat_id = message.chat.id
    new_member = message.new_chat_members[0]
    bot.send_message(chat_id, f"Привет, {new_member.first_name}! Рады видеть тебя в нашем чате!")

bot.polling()
ТЗ немного не понятное
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Посмотреть вложение 100148
Python:
import telebot

bot = telebot.TeleBot('твой токен')

@bot.message_handler(content_types=['new_chat_members'])
def welcome(message):
    chat_id = message.chat.id
    new_member = message.new_chat_members[0]
    bot.send_message(chat_id, f"Привет, {new_member.first_name}! Рады видеть тебя в нашем чате!")

bot.polling()
ТЗ немного не понятное
Все правильно, да. И еще кнопка должна быть с линком после этого приветственного сообщения.
И хотелось бы уже готового, которого я в группу бы добавил и настроил
 
Последнее редактирование:
Все правильно, да. И еще кнопка должна быть с линком после этого приветственного сообщения.
И хотелось бы уже готового, которого я в группу бы добавил и настроил
один из самых популярных "готовых" ботов https://missrose.org/
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Посмотреть вложение 100148
Python:
import telebot

bot = telebot.TeleBot('твой токен')

@bot.message_handler(content_types=['new_chat_members'])
def welcome(message):
    chat_id = message.chat.id
    new_member = message.new_chat_members[0]
    bot.send_message(chat_id, f"Привет, {new_member.first_name}! Рады видеть тебя в нашем чате!")

bot.polling()
ТЗ немного не понятное
Эх, еще один любитель телебота. Но я хочу показать свой пример на Aiogram 3. =)
Специально для: xss.pro

Версия Python 3.12, Aiogram 3.16.0
Скрины отработки:
Лог отработки интерпретатора:
1735055013706.png


Как это выглядит в телеге:
1735055126375.png


Перед установкой обязательно: pip install aiogram

Код:
Исходник - main.py
Python:
import asyncio
import logging
from datetime import datetime
from aiogram import Bot, Router, Dispatcher, types
from aiogram.filters import ChatMemberUpdatedFilter
from aiogram.types import ChatMemberUpdated
from aiogram.enums.parse_mode import ParseMode
from aiogram.utils.markdown import hbold
from aiogram.exceptions import TelegramBadRequest

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s',
    handlers=[
        logging.FileHandler('bot.log', encoding='utf-8'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

BOT_TOKEN = "" # Сюда вставляй токен из Botfather
router = Router()


async def check_bot_permissions(bot: Bot, chat_id: int) -> bool:
    """Проверка прав бота в чате"""
    try:
        bot_member = await bot.get_chat_member(chat_id, (await bot.me()).id)

        if bot_member.status != "administrator":
            logger.warning(f"[ПРАВА] Бот не является администратором в чате {chat_id}")
            return False
        required_permissions = {
            'can_invite_users': True
        }

        for perm, required in required_permissions.items():
            if not getattr(bot_member, perm, False):
                logger.warning(f"[ПРАВА] Отсутствует право {perm} в чате {chat_id}")
                return False

        return True

    except Exception as e:
        logger.error(f"[ОШИБКА] Проверка прав: {str(e)}", exc_info=True)
        return False


def format_user_info(user: types.User) -> str:
    return (f"ID: {user.id}, "
            f"Username: @{user.username or 'Нет'}, "
            f"Имя: {user.first_name} {user.last_name or ''}")


@router.chat_member()
async def chat_member_updated_handler(event: ChatMemberUpdated, bot: Bot):
    """Обработчик изменений статуса участников чата"""
    try:
        # Проверяем права бота
        if not await check_bot_permissions(bot, event.chat.id):
            await bot.send_message(
                event.chat.id,
                "⚠️ У бота недостаточно прав. Пожалуйста, назначьте бота администратором "
                "и предоставьте права на отправку сообщений и управление пользователями.",
                parse_mode=ParseMode.HTML
            )
            return

        chat_info = f"Чат: {event.chat.title} (ID: {event.chat.id})"
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        if event.new_chat_member and event.new_chat_member.status != "left":
            user = event.new_chat_member.user
            full_name = f"{user.first_name} {user.last_name or ''}"

            welcome_message = (
                f"👋 Привет, {hbold(full_name)}!\n"
                f"Добро пожаловать в наш чат {hbold(event.chat.title)}!"
            )

            logger.info(
                f"[НОВЫЙ УЧАСТНИК] {chat_info}\n"
                f"Время: {current_time}\n"
                f"Пользователь: {format_user_info(user)}"
            )

            try:
                await bot.send_message(
                    event.chat.id,
                    welcome_message,
                    parse_mode=ParseMode.HTML
                )
            except TelegramBadRequest as e:
                logger.error(f"[ОШИБКА] Отправка приветствия: {str(e)}")

        elif (event.old_chat_member and
              event.old_chat_member.status == "member" and
              event.new_chat_member.status == "left"):
            user = event.old_chat_member.user
            full_name = f"{user.first_name} {user.last_name or ''}"

            goodbye_message = (
                f"👋 Пользователь {hbold(full_name)} "
                f"покинул наш чат."
            )

            logger.info(
                f"[УЧАСТНИК ВЫШЕЛ] {chat_info}\n"
                f"Время: {current_time}\n"
                f"Пользователь: {format_user_info(user)}"
            )

            try:
                await bot.send_message(
                    event.chat.id,
                    goodbye_message,
                    parse_mode=ParseMode.HTML
                )
            except TelegramBadRequest as e:
                logger.error(f"[ОШИБКА] Отправка прощания: {str(e)}")

    except Exception as e:
        logger.error(
            f"[ОШИБКА] Обработка изменения участника\n"
            f"Чат: {chat_info}\n"
            f"Ошибка: {str(e)}",
            exc_info=True
        )


async def main():
    try:
        bot = Bot(token=BOT_TOKEN)
        dp = Dispatcher()
        dp.include_router(router)

        logger.info("[ЗАПУСК] Бот успешно запущен")
        await dp.start_polling(bot)

    except Exception as e:
        logger.error(f"[ОШИБКА] Критическая ошибка при запуске: {str(e)}", exc_info=True)
        raise


if __name__ == "__main__":
    asyncio.run(main())
 
Эх, еще один любитель телебота. Но я хочу показать свой пример на Aiogram 3. =)
Специально для: xss.pro

Версия Python 3.12, Aiogram 3.16.0
Скрины отработки:
Лог отработки интерпретатора:
Посмотреть вложение 100653

Как это выглядит в телеге:
Посмотреть вложение 100656

Перед установкой обязательно: pip install aiogram

Код:
Исходник - main.py
Python:
import asyncio
import logging
from datetime import datetime
from aiogram import Bot, Router, Dispatcher, types
from aiogram.filters import ChatMemberUpdatedFilter
from aiogram.types import ChatMemberUpdated
from aiogram.enums.parse_mode import ParseMode
from aiogram.utils.markdown import hbold
from aiogram.exceptions import TelegramBadRequest

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s',
    handlers=[
        logging.FileHandler('bot.log', encoding='utf-8'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

BOT_TOKEN = "" # Сюда вставляй токен из Botfather
router = Router()


async def check_bot_permissions(bot: Bot, chat_id: int) -> bool:
    """Проверка прав бота в чате"""
    try:
        bot_member = await bot.get_chat_member(chat_id, (await bot.me()).id)

        if bot_member.status != "administrator":
            logger.warning(f"[ПРАВА] Бот не является администратором в чате {chat_id}")
            return False
        required_permissions = {
            'can_invite_users': True
        }

        for perm, required in required_permissions.items():
            if not getattr(bot_member, perm, False):
                logger.warning(f"[ПРАВА] Отсутствует право {perm} в чате {chat_id}")
                return False

        return True

    except Exception as e:
        logger.error(f"[ОШИБКА] Проверка прав: {str(e)}", exc_info=True)
        return False


def format_user_info(user: types.User) -> str:
    return (f"ID: {user.id}, "
            f"Username: @{user.username or 'Нет'}, "
            f"Имя: {user.first_name} {user.last_name or ''}")


@router.chat_member()
async def chat_member_updated_handler(event: ChatMemberUpdated, bot: Bot):
    """Обработчик изменений статуса участников чата"""
    try:
        # Проверяем права бота
        if not await check_bot_permissions(bot, event.chat.id):
            await bot.send_message(
                event.chat.id,
                "⚠️ У бота недостаточно прав. Пожалуйста, назначьте бота администратором "
                "и предоставьте права на отправку сообщений и управление пользователями.",
                parse_mode=ParseMode.HTML
            )
            return

        chat_info = f"Чат: {event.chat.title} (ID: {event.chat.id})"
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        if event.new_chat_member and event.new_chat_member.status != "left":
            user = event.new_chat_member.user
            full_name = f"{user.first_name} {user.last_name or ''}"

            welcome_message = (
                f"👋 Привет, {hbold(full_name)}!\n"
                f"Добро пожаловать в наш чат {hbold(event.chat.title)}!"
            )

            logger.info(
                f"[НОВЫЙ УЧАСТНИК] {chat_info}\n"
                f"Время: {current_time}\n"
                f"Пользователь: {format_user_info(user)}"
            )

            try:
                await bot.send_message(
                    event.chat.id,
                    welcome_message,
                    parse_mode=ParseMode.HTML
                )
            except TelegramBadRequest as e:
                logger.error(f"[ОШИБКА] Отправка приветствия: {str(e)}")

        elif (event.old_chat_member and
              event.old_chat_member.status == "member" and
              event.new_chat_member.status == "left"):
            user = event.old_chat_member.user
            full_name = f"{user.first_name} {user.last_name or ''}"

            goodbye_message = (
                f"👋 Пользователь {hbold(full_name)} "
                f"покинул наш чат."
            )

            logger.info(
                f"[УЧАСТНИК ВЫШЕЛ] {chat_info}\n"
                f"Время: {current_time}\n"
                f"Пользователь: {format_user_info(user)}"
            )

            try:
                await bot.send_message(
                    event.chat.id,
                    goodbye_message,
                    parse_mode=ParseMode.HTML
                )
            except TelegramBadRequest as e:
                logger.error(f"[ОШИБКА] Отправка прощания: {str(e)}")

    except Exception as e:
        logger.error(
            f"[ОШИБКА] Обработка изменения участника\n"
            f"Чат: {chat_info}\n"
            f"Ошибка: {str(e)}",
            exc_info=True
        )


async def main():
    try:
        bot = Bot(token=BOT_TOKEN)
        dp = Dispatcher()
        dp.include_router(router)

        logger.info("[ЗАПУСК] Бот успешно запущен")
        await dp.start_polling(bot)

    except Exception as e:
        logger.error(f"[ОШИБКА] Критическая ошибка при запуске: {str(e)}", exc_info=True)
        raise


if __name__ == "__main__":
    asyncio.run(main())
А в чем проблема telebot? Для таких задач она как раз удобная, не много всего, но есть всё что нужно.
 
А в чем проблема telebot? Для таких задач она как раз удобная, не много всего, но есть всё что нужно.
Согласен. Просто добавил лаконичный пример на аиограме. =]
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх