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



@pprogres

Задача — сделать обычную рассылку для бота:
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, ' Вам необходимо установить логин для работы с ботом!nn Инструкция: 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>nn"
        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="Введите текст для рассылки. nnДля отмены напишите "-" без кавычек!")
        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 = ' Информация:nn Пользователей в боте - ' + str(amount_user_all) + 'n  '
    return msg
    conn.close()

В итоге рассылка просит задать текст для рассылки, после чего Рассылка начатаРассылка завершена. но ничео не отправляет, ошибок нет, выводил info принтом проверял БД выдаёт список id


Решения вопроса 0


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *