@Dezzly

Не отправляется рассылка в боте telegram?

import asyncio
import logging

from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import CommandStart, Command
from aiogram.types import Message
from aiogram import Router
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup

from config import TOKEN

# Логирование
logging.basicConfig(level=logging.INFO)

# ID администратора
ADMIN_ID = **********

# Файл для хранения ID пользователей
USERS_FILE = "users.txt"

# Инициализация бота
bot = Bot(token=TOKEN)
dp = Dispatcher()
router = Router()

# Состояния FSM
class States(StatesGroup):
    broadcast = State()

def save_user_id(user_id):
    """Сохраняет ID пользователя в файл."""
    with open(USERS_FILE, "a+", encoding="utf-8") as f:
        f.seek(0)
        if str(user_id) not in f.read():
            f.write(f"{user_id}\n")

def get_user_ids():
    """Возвращает список ID пользователей из файла."""
    try:
        with open(USERS_FILE, "r", encoding="utf-8") as f:
            return [int(line.strip()) for line in f]
    except FileNotFoundError:
        return []

# Обработчик команды /start
@router.message(CommandStart())
async def cmd_start(message: Message, state: FSMContext):
    user_id = message.from_user.id
    save_user_id(user_id)
    await message.answer("Привет! Ты зарегистрирован для получения рассылки.")

# Обработчик команды /admin
@router.message(Command("admin"))
async def cmd_admin(message: Message, state: FSMContext):
    user_id = message.from_user.id
    if user_id == ADMIN_ID:
        await state.set_state(States.broadcast)
        await message.answer("Введите текст для рассылки:")
    else:
        await message.answer("У вас нет прав доступа.")

# Обработчик текста для рассылки
@router.message(F.state == States.broadcast)
async def process_broadcast(message: Message, state: FSMContext):
    text = message.text
    await state.finish()

    print(f"Получен текст для рассылки: {text}")

    for user_id in get_user_ids():
        try:
            await bot.send_message(chat_id=user_id, text=text)
            print(f"Сообщение отправлено пользователю {user_id}")
        except Exception as e:
            print(f"Ошибка при отправке сообщения пользователю {user_id}: {e}")

    await message.answer(f"Рассылка отправлена!")

# Регистрация роутера
dp.include_router(router)

# Запуск бота
async def main():
    await dp.start_polling(bot)

if __name__ == '__main__':
    asyncio.run(main())
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
в роутере попробуйте внести изменения
@router.message(States.broadcast)
async def process_broadcast(message: Message, state: FSMContext):
    text = message.text
    await state.finish()
    ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы