• Рассылка сообщений с помощью библиотеки pyTelegramBotAPI?

    @RaiTer228
    Если надо, то есть на aiogram

    import asyncio
    from aiogram import Bot, Dispatcher, types
    from aiogram.contrib.fsm_storage.memory import MemoryStorage
    from aiogram.dispatcher import FSMContext
    from aiogram.dispatcher.filters import Command, Text
    from aiogram.dispatcher.filters.state import State, StatesGroup
    from aiogram.types import InputMediaPhoto, InputMediaVideo
    from aiogram.utils import executor
    
    # Токен вашего бота
    API_TOKEN = "YOUR_BOT_TOKEN"
    
    # ID админа
    ADMIN_ID = 123456789
    
    # Имя файла с пользователями
    USERS_FILE = "users.txt"
    
    # Инициализация бота и диспетчера
    bot = Bot(token=API_TOKEN)
    dp = Dispatcher(bot, storage=MemoryStorage())
    
    # Состояния для FSM
    class SendMessage(StatesGroup):
        text = State()
        media = State()
    
    # Обработчик команды /start
    @dp.message_handler(Command("start"))
    async def send_welcome(message: types.Message):
        await message.reply("Привет! Я бот для рассылки. Используйте команду /send для отправки сообщения.")
    
    # Обработчик команды /send
    @dp.message_handler(Command("send"))
    async def send_message(message: types.Message):
        if message.from_user.id == ADMIN_ID:
            await message.reply("Введите текст для рассылки:")
            await SendMessage.text.set()
        else:
            await message.reply("У вас нет прав для отправки сообщений.")
    
    # Обработчик ввода текста
    @dp.message_handler(state=SendMessage.text)
    async def process_text(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            data["text"] = message.text
            await message.reply("Отправить картинку? (Да/Нет)")
            await SendMessage.media.set()
    
    # Обработчик выбора медиа
    @dp.message_handler(Text(equals=["Да", "Нет"]), state=SendMessage.media)
    async def process_media(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            if message.text == "Да":
                await message.reply("Отправьте картинку:")
                await SendMessage.next()
            else:
                # Отправка текста без картинки
                await send_message_to_users(data["text"])
                await state.finish()
    
    # Обработчик отправки картинки
    @dp.message_handler(content_types=types.ContentType.PHOTO, state=SendMessage.media)
    async def process_photo(message: types.Message, state: FSMContext):
        async with state.proxy() as data:
            # Получение ID картинки
            photo_id = message.photo[-1].file_id
            # Отправка текста и картинки
            await send_message_to_users(data["text"], photo_id)
            await state.finish()
    
    # Функция для отправки сообщения пользователям
    async def send_message_to_users(text: str, media_id: str = None):
        with open(USERS_FILE, "r") as f:
            users = f.read().splitlines()
        for user_id in users:
            try:
                if media_id:
                    # Отправка картинки
                    await bot.send_photo(int(user_id), photo=media_id, caption=text)
                else:
                    # Отправка только текста
                    await bot.send_message(int(user_id), text=text)
            except Exception as e:
                print(f"Ошибка при отправке сообщения пользователю {user_id}: {e}")
    
    # Запуск бота
    if __name__ == "__main__":
        executor.start_polling(dp, skip_updates=True)


    Этот код я использую в своем боте,отправка картинки не работает(может работает,но не отправляет)

    При команде "/start" код записывает id аккаунта в txt файл(но если больше информации надо(имя и тд) то лучше использовать SQL)
    Ответ написан
    Комментировать
  • Выдаёт ошибку в коде. Как исправить?

    @RaiTer228
    Вы используете старую версию aiogram(2.0)

    Попробуйте

    from aiogram.dispatcher.filters import Command
    from aiogram.dispatcher.methods import SendPhoto

    Просто добавьте "dispatcher" между aiogram и модулями
    Ответ написан
    Комментировать