Задать вопрос
@pprogres

Как заставить работать рассылку в aiogram?

Задача - сделать обычную рассылку для бота:
https://db.db - записываем id юзеров

https://main.py

###Записываю юзера в БД при старте

@dp.message_handler(commands=["start"])
async def welcome(message: types.Message):
    chat_id = message.chat.id
    username = message.from_user.username
    if message.from_user.username == None:
        bot.send_message(chat_id, ' Вам необходимо установить логин для работы с ботом!\n\n Инструкция: https://telegra.ph/Ustanovka-imeni-polzovatelya-login-v-telegram-05-22')
    else:
        func.first_join(user_id=chat_id, username=username)
    await bot.send_message(
        message.chat.id,
        f"<b>Добро пожаловать, {message.from_user.username}!</b>\n\n"
        f"Чтобы подать заявку на фильм, нажмите на кнопку\n <b>Стол заказов</b>",
        parse_mode=ParseMode.HTML,
        reply_markup=reg_keyboard,
        )


###Создаю class

class rassilka(StatesGroup):
    message = State()
    message1 = State()


###Работаю с машиной состояний:

@dp.callback_query_handler(lambda call: True)
async def handler_call(call):
    chat_id = call.message.chat.id
    message_id = call.message.message_id

    if call.data == 'statistics':
            await bot.edit_message_text(chat_id=chat_id, message_id=message_id, text=func.stats(), reply_markup=ras_button)

    elif call.data == 'menu':
            await bot.send_message(call.message.chat.id, text='Главное меню', reply_markup=reg_keyboard)
   

    elif call.data == 'message':
        msg = await bot.send_message(chat_id=chat_id,
                               text='Введите текст для рассылки. \n\nДля отмены напишите "-" без кавычек!')
        await rassilka.message1.set()

@dp.message_handler(state=rassilka.message1, content_types=types.ContentTypes.TEXT)
async def message1(message: types.Message, state: FSMContext):
    text = message.text
    if message.text.startswith('-'):
        await bot.send_message(message.chat.id, text=canel_operation)
    else:
        info = func.admin_message(text)
        await bot.send_message(message.chat.id, text=' Рассылка начата!')
        for i in range(len(info)):
            try:
                time.sleep(1)
                await bot.send_message(info[i][0], str(text), parse_mode="ParseMode.HTML")
            except:
                pass
        await bot.send_message(message.chat.id, text=' Рассылка завершена!')
        await state.finish()


functions.py
def first_join(user_id, username):
    connection = sqlite3.connect(db)
    q = connection.cursor()
    q = q.execute('SELECT * FROM users WHERE user_id IS '+str(user_id))
    row = q.fetchone()
    if row is None:
        q.execute("INSERT INTO users (user_id, nick) VALUES ('%s', '%s')"%(user_id, username))
        connection.commit()
    connection.close()


def admin_message(text):
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    cursor.execute(f'SELECT user_id FROM users')
    row = cursor.fetchall()
    return row
    conn.close()


def stats():
    conn = sqlite3.connect(db)
    cursor = conn.cursor()
    row = cursor.execute(f'SELECT user_id FROM users').fetchone()
    amount_user_all = 0
    while row is not None:
        amount_user_all += 1
        row = cursor.fetchone()
    msg = ' Информация:\n\n Пользователей в боте - ' + str(amount_user_all) + '\n  '
    return msg
    conn.close()


В итоге рассылка просит задать текст для рассылки, после чего Рассылка начата\Рассылка завершена. но ничео не отправляет, ошибок нет, выводил info принтом проверял БД выдаёт список id
  • Вопрос задан
  • 637 просмотров
Подписаться 3 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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