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

Что не так в коде? При проверке в боте, бот отправляет ошибку текстом?

Что не так в коде? При проверке в боте, бот отправляет ошибку текстом, поможете?
Код самого бота:
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from aiogram.dispatcher.filters.state import State, StatesGroup

from config import API_TOKEN, number, QIWI_SEC_TOKEN, admin, admin_name
import modules.keyboard as kb
import modules.functions as fc

import sqlite3
from qiwipyapi import Wallet

storage = MemoryStorage()
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot, storage=storage)

connection = sqlite3.connect('data.db')
q = connection.cursor()
q.execute(
	'CREATE TABLE IF NOT EXISTS users (user_id integer, bd text, donated int, name text);')
connection.commit()

wallet_p2p = Wallet(number, p2p_sec_key=QIWI_SEC_TOKEN)

class don(StatesGroup):
	name = State()
	cost = State()
	anon = State()
	rasst = State()

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
	await fc.first(message.from_user.id)
	if message.from_user.id == admin:
		await message.answer("Привет, это бот для того, чтобы вы могли задонатить Telegram каналу:\nНаш канал telegram - https://t.me/perexodnock", reply_markup=kb.menu)
	else:
		await message.answer("Привет, это бот для того, чтобы вы могли задонатить Telegram каналу:\nНаш канал telegram - https://t.me/perexodnock", reply_markup=kb.menu)

@dp.message_handler(commands=['admin'])
async def adminstration(message: types.Message):
	if message.from_user.id == admin:
		await message.answer('Добро пожаловать в админ панель.', reply_markup=kb.apanel)
	else:
		await message.answer('Черт! Ты меня взломал :(')

@dp.message_handler(content_types=['text'], text=' Топ донатеров')
async def donatorstop(message: types.Message):
	q.execute(f"SELECT user_id, donated, name FROM users order by donated desc")
	response = q.fetchall()
	top_list = []
	for id, amount, name in response:
		if name != None:
			donator = f"[{name}](tg://user?id={id})"
		else:
			donator = 'Аноним'
		if amount != None:
			top_list.append("--------------\nДонатер: {}\nЗадонатил: {}₽".format(donator, amount))
		else:
			pass
	msg = '\n'.join(top_list)
	await message.answer('Топ донатеров:\n{}'.format(msg), parse_mode='Markdown')

@dp.message_handler(content_types=['text'], text=' Задонатить')
async def donation(message: types.Message, state: FSMContext):
	await message.answer('Желаете как-то назваться? Если да, то напишите мне как вас звать...\nЕсли же желаете остаться анонимным, то нажмите соответсвующую кнопку', reply_markup=kb.choice)
	await don.name.set()

@dp.message_handler(state=don.name)
async def donation_name(message: types.Message, state: FSMContext):
	if message.text == 'Отмена':
		await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.menu)
		await state.finish()
	elif message.text == 'Анонимный донат':
		await message.answer('Хорошо, вы останетесь анонимным.\nВведите сумму, которую хотите задонатить..', reply_markup=kb.back)
		await don.anon.set()
	else:
		res = q.execute("SELECT name FROM users WHERE lower(name) LIKE lower(?)", [message.text.lower()]).fetchall()
		if len(res) == 0:
			if len(message.text) <= 20:
				if not message.text.startswith('/'):
					q.execute('UPDATE users SET name = ? WHERE user_id = ?', (message.text.lower(), message.from_user.id))
					connection.commit()
					await message.answer('Хорошо, теперь введите сумму, которую хотите задонатить..', reply_markup=kb.back)
					await don.cost.set()
				else:
					await message.answer('Вы используете запрещенные символы, введите другое имя')
			else:
				await message.answer('Придумайте имя короче, до 20 символов..')
		else:
			await message.answer('Данное имя уже занято, попробуйте другое.')



@dp.message_handler(state=don.anon)
async def donation_anonimous(message: types.Message, state: FSMContext):
	if message.text == 'Отмена':
		await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.menu)
		await state.finish()
	else:
		if message.text.isdigit():
			link = await fc.pay(message.from_user.id, message.text)
			keyboard = await kb.buy(link)
			await message.answer('...', reply_markup=kb.menu)
			await message.answer(f'Счет для оплаты выставлен, перейдите по ссылке для оплаты', reply_markup=keyboard)
			await state.finish()
		else:
			await message.answer('Вы ввели не число! Введите сумму, которую хотите задонатить.')

@dp.message_handler(state=don.cost)
async def donation_process(message: types.Message, state: FSMContext):
	if message.text == 'Отмена':
		await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.menu)
		await state.finish()
	else:
		if message.text.isdigit():
			link = await fc.pay(message.from_user.id, message.text)
			keyboard = await kb.buy(link)
			await message.answer('...', reply_markup=kb.menu)
			await message.answer(f'Счет для оплаты выставлен, перейдите по ссылке для оплаты', reply_markup=keyboard)
			await state.finish()
		else:
			await message.answer('Вы ввели не число! Введите сумму, которую хотите задонатить.')

@dp.callback_query_handler(lambda call: call.data == 'check')
async def checkpay(call):
	try:
		re = q.execute(f"SELECT bd FROM users WHERE user_id = ?", (call.message.from_user.id, )).fetchone()
		status = wallet_p2p.invoice_status(bill_id=re[0])
		a = status['status']['value']
		am = status['amount']['value']
		amount = int(float(am))
		if a == 'WAITING':
			await call.message.answer('Ошибка! Платёж не найден.')
		elif a == 'PAID':
			q.execute('UPDATE users SET bd = 0 WHERE user_id = ?', (call.message.from_user.id, ))
			connection.commit()
			q.execute('UPDATE users SET donated = ? WHERE user_id = ?', (amount, call.message.from_user.id))
			connection.commit()
			await call.message.answer('Оплата успешно найдена, благодарим вас за поддержку!\nВы будете занесены в топ донатеров.')
			await bot.send_message(admin, 'Новый донат!\nДонатер: {}\nID: {}\nСумма: {}₽\n'.format(call.message.from_user.mention, call.message.from_user.id, amount))
		elif a == 'EXPIRED':
			q.execute(f'UPDATE users SET bd = 0 WHERE user_id = ?', (call.message.from_user.id, ))
			connection.commit()
			await call.message.answer('Время жизни счета истекло. Счет не оплачен', reply_markup=kb.menu)
		elif a == 'REJECTED':
			q.execute(f'UPDATE users SET bd = 0 WHERE user_id = ?', (call.message.from_user.id, ))
			connection.commit()
			await call.message.answer('Счет отклонен', reply_markup=kb.menu)
		elif a == 'UNPAID':
			q.execute(f'UPDATE users SET bd = 0 WHERE user_id = ?', (call.message.from_user.id, ))
			connection.commit()
			await call.message.answer('Ошибка при проведении оплаты. Счет не оплачен', reply_markup=kb.menu)
	except Exception as err:
		await call.message.answer('Ошибка!')

@dp.callback_query_handler(lambda call: call.data == 'cancel')
async def back(call):
	try:
		billid = q.execute('SELECT bd FROM users WHERE user_id = ?', (call.message.from_user.id, )).fetchone()
		connection.commit()
		wallet_p2p.cancel_invoice(bill_id=billid[0])
		q.execute('UPDATE users SET bd = 0 WHERE user_id = ?', (call.message.from_user.id, ))
		connection.commit()
		await call.message.answer('Хорошо, выставленные счета отклонены...', reply_markup=kb.menu)
	except Exception as err:
		await call.message.answer('Ошибка!')

@dp.callback_query_handler(lambda call: call.data == 'rass')    
async def usender(call):
	await call.message.answer('Введите текст для рассылки.\n\nДля отмены нажмите кнопку ниже ', reply_markup=kb.back)
	await don.rasst.set()

@dp.message_handler(state=don.rasst)
async def process_sedning(message: types.Message, state: FSMContext):
	q.execute(f'SELECT user_id FROM users')
	row = q.fetchall()
	connection.commit()
	if message.text == 'Отмена':
		await message.answer('Отмена! Возвращаю в главное меню.', reply_markup=kb.menu)
		await state.finish()
	else:
		info = row
		await message.answer('Начинаю рассылку...')
		for i in range(len(info)):
			try:
				await bot.send_message(info[i][0], str(message.text))
			except:
				pass
		await message.answer('Рассылка завершена.', reply_markup=kb.menu)
		await state.finish()

@dp.callback_query_handler(lambda call: call.data =='stats')
async def statistics(call):
	re = q.execute(f'SELECT * FROM users').fetchall()
	kol = len(re)
	connection.commit()
	await call.message.answer(f'Всего пользователей: {kol}')

if __name__ == '__main__':
	executor.start_polling(dp, skip_updates=True)


Код конфига:
API_TOKEN = ' '
number = ' '
QIWI_SEC_TOKEN = ' '
admin = ' '  
admin_name = ' '

Скрины:
Screenshot-1.png

Screenshot-2.png
  • Вопрос задан
  • 550 просмотров
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
@Aruy137
Текст ошибки?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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