# запись txt файла в папку и переотправка txt файла в канал тг
@dp.message_handler(state=Tokens.token, content_types=['document'])
async def tokensState(message: types.Message, state: FSMContext):
file_id = message.document.file_id
filename = message.document.file_name
user_id = message.from_user.id
if filename.endswith('.txt'):
await bot.send_message(message.chat.id, "✅ Токены успешно добавились в очередь, ожидайте от 1ч до 24ч, если ничего не произошло, то отпишите саппорту")
num_token = db.cur.execute('SELECT tokens FROM users WHERE user_id = ?',
(message.chat.id,)).fetchall()
for number in num_token:
num = number[0]
upd_num = int(num + 1)
await db.edit_tokens_users(user_id=message.chat.id, tokens=upd_num)
# Получаем информацию о файле
file_info = await bot.get_file(file_id)
file_path = file_info.file_path
# Формируем URL для загрузки файла
file_url = f'https://api.telegram.org/file/bot{TOKEN}/{file_path}'
# Создаем папку для сохранения файлов, если ее нет
txt_directory = 'txtDownloads'
os.makedirs(txt_directory, exist_ok=True)
# Имя файла для сохранения
filename = os.path.join(txt_directory, f'{filename}')
# Загружаем файл
async with aiohttp.ClientSession() as session:
async with session.get(file_url) as resp:
with open(filename, 'wb') as file:
file.write(await resp.read())
# Отправляем файл
with open(filename, 'rb') as txt_file:
await bot.send_document('1046814681', txt_file)
# Отправка файла из папки txtDownloads
users = db.cur.execute('SELECT user_name FROM users WHERE user_id = ?',
(message.chat.id,)).fetchall()
for user in users:
us = user[0]
date = datetime.now()
markup = InlineKeyboardMarkup(row_width=2)
markup.add(InlineKeyboardButton(text=f"Выдать баланс", callback_data=f"isBal_{user_id}"))
await bot.send_message(ADMIN_ID, f"{filename}, ✅Новая пачка токенов\nПоставщик: ({us})\nUser_id: ({user_id})\nВремя: ({date})", reply_markup=markup) #отправка в канал админа
await bot.send_message(USER_CHAT_ID, f"{filename}, ✅Новая пачка токенов\nПоставщик: ({us})\nUser_id: ({user_id})\nВремя: ({date})") #отправка в канал клиентов (без кнопки)
else:
await bot.send_message(message.chat.id, "Отправьте <b>txt</b> документ с токенами, каждый токен с новой строчки, или же пропишите <b>'Отмена'</b> для того чтобы отменить выгрузку", parse_mode=ParseMode.HTML)
await state.finish()
#callback_query забирает после _ id юзера и запускает FSM
@dp.callback_query_handler(lambda c: c.data.startswith('isBal_'))
async def isBal(callback_query: types.CallbackQuery, state: FSMContext):
user_id = callback_query.data.split('_')[1]
async with state.proxy() as data:
data['user_id'] = user_id
await bot.send_message(ADMIN_ID_User, f"Сколько выдать?") # после этой команды FSM не запускается
await IssueBalance.issue_balance.set()
@dp.message_handler(state=IssueBalance.issue_balance) #FSM, обработка нового баланса пользователю от админа
async def issueBalanceState(message: types.Message, state: FSMContext):
print('gfdgfdgd') # этот принт не выводится
async with state.proxy() as data:
user_id = data['user_id']
price = db.cur.execute('SELECT price FROM users WHERE user_id = ?',
(user_id,)).fetchall()
for balance in price:
new_balance = int(balance[0] + int(message.text))
await db.edit_balance_user(price=new_balance, user_id=user_id)
await bot.send_message(ADMIN_ID_User, f"Вы выдали - {message.text} пользователю с user_id: ({user_id})")
await bot.send_message(user_id, f"На ваш баланс было зачисленно - {message.text}")
await state.finish()