Не конкатенируется 'FSMContextProxy' с 'int'
Я пишу бота "угадай число" для телеграма. Я хочу добавить команду choice по которой юзер будет писать любое число и бот будет загадывать свое число от 1 до числа, загаданного юзером. Но при рандомном выборе в строке t = random.randint(1, num) вылазит ошибка
return self.randrange(a, b+1)
TypeError: unsupported operand type(s) for +: 'FSMContextProxy' and 'int'
Код:
@dp.message_handler(commands=['choice'])
async def choice(message: types.Message):
await Form.num.set()
await bot.send_message(message.chat.id, 'Напишите целое число до которого я загадаю свое число. Примечания: введите только целое число. Введите число не менее 50, иначе победа не будет засчитана. При вводе числа >= 100 будет засчитано 2 балла.')
@dp.message_handler(state=Form.num)
async def num(message: types.Message, state: FSMContext):
async with state.proxy() as num:
num['number'] = int(message.text)
await state.finish()
t = random.randint(1, num)
await bot.send_message(message.chat.id, 'Я загадал число от 1 до ' + num + '. Теперь попробуй отгадать его.')
Пробовал сделать так:
@dp.message_handler(commands=['choice'])
async def choice(message: types.Message):
await Form.num.set()
await bot.send_message(message.chat.id, 'Напишите целое число до которого я загадаю свое число. Примечания: введите только целое число. Введите число не менее 50, иначе победа не будет засчитана. При вводе числа >= 100 будет засчитано 2 балла.')
global num
async with state.proxy() as num:
num['number'] = int(message.text)
await state.finish()
@dp.message_handler(state=Form.num)
async def num(message: types.Message, state: FSMContext):
t = random.randint(1, num)
await bot.send_message(message.chat.id, 'Я загадал число от 1 до ' + num + '. Теперь попробуй отгадать его.')
Тогда ошибка
return self.randrange(a, b+1)
TypeError: unsupported operand type(s) for +: 'function' and 'int'
Если же сделать
@dp.message_handler(commands=['choice'])
async def choice(message: types.Message, state = FSMContext):
await Form.num.set()
await bot.send_message(message.chat.id, 'Напишите целое число до которого я загадаю свое число. Примечания: введите только целое число. Введите число не менее 50, иначе победа не будет засчитана. При вводе числа >= 100 будет засчитано 2 балла.')
global num
async with state.proxy() as num:
num['number'] = int(message.text)
await state.finish()
t = random.randint(1, num)
await bot.send_message(message.chat.id, 'Я загадал число от 1 до ' + num + '. Теперь попробуй отгадать его.')
Тогда
num['number'] = int(message.text)
ValueError: invalid literal for int() with base 10: '/choice'
Ответы (1 шт):
async with state.proxy() as num:
^^^
num['number'] = int(message.text)
^^^
await state.finish()
t = random.randint(1, num)
^^^
Здесь у вас num - это то, что выдаёт state.proxy().
async def num(message: types.Message, state: FSMContext):
^^^
t = random.randint(1, num)
^^^
А здесь num - это название функции, начатой строкой выше.
Вы сначала назовите всё как-то по-разному: функции одними именами, переменные другими, прокси всякие назовите proxy. А то у вас несколько разных сущностей, и все они называются num. При этом питон не различает сущности по способу обращения к ним, в нём не может быть одновременно и функция и переменная с одним именем, вернее они могут быть, но их названия будут друг-друга "перекрывать" и у вас будут очень странные ошибки. Для начала разведите эти все сущности по разным осмысленным именам, а там и разберётесь, где у вас что.