@pprogres
Задача — сделать обычную рассылку для бота:
https://db.db — записываем id юзеров
https://db.db — записываем id юзеров
###Записываю юзера в БД при старте
@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