Задача - сделать обычную рассылку для бота:
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