Если надо, то есть на 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)