मैंने यह कोड लिखा है और मुझे उपयोगकर्ता के संदेश (स्ट्रिंग प्रकार) से "स्थानीय समय" प्राप्त करने की आवश्यकता है। लेकिन मुझे टाइमर सेट करने के लिए पूर्णांक की तरह यह चाहिए। "Local_time = int (msg.from_user.id, msg.text)" में टाइपर है। मेरे द्वारा यह कैसे किया जा सकता है?

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import time

from Config import TOKEN

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Hi!")


@dp.message_handler(commands=['help'])
async def process_help_command(message: types.Message):
    await message.reply("/timer - set timer")


@dp.message_handler(commands=['timer'])
async def set_timer(msg: types.Message):
    await bot.send_message(msg.from_user.id, text='How many minutes?')
    time.sleep(5)
    local_time = int(msg.from_user.id, msg.text)
    local_time_b = int(local_time * 60)
    await bot.send_message(msg.from_user.id, text='Timer set')
    time.sleep(local_time_b)
    await bot.send_message(msg.from_user.id, text='The timer has worked')

print("Hello")

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

Local_time = int (msg.from_user.id, msg.text)

TypeError: 'str' ऑब्जेक्ट को पूर्णांक के रूप में व्याख्यायित नहीं किया जा सकता है

-1
LogDog 1 नवम्बर 2020, 16:06

2 जवाब

सबसे बढ़िया उत्तर

Int फ़ंक्शन को पहले पैरामीटर के रूप में पाठ की आवश्यकता होती है, दूसरा (वैकल्पिक) आधार है (जो आपको ज़रूरत है अगर आप एक अलग आधार के साथ स्ट्रिंग की व्याख्या करने के लिए पायथन - यानी बिनानी)

local_time = int(msg.text)

Msg.text उपयोगकर्ता इनपुट है (यह एक नंबर होना चाहिए) जिसे इसे इंट में डाला गया है।

यदि आप एक कमांड हैंडलर के माध्यम से इनपुट की प्रक्रिया करते हैं, तो आपको यह विचार करने की आवश्यकता है कि पाठ संदेश में कमांड शामिल है अर्थात /start 12
> एक विकल्प यह है कि कमांड को हटाकर निम्नलिखित मान प्राप्त करें

# remove '/start'
interval = msg.text[7:]
local_time = int(interval)
print(local_time)
0
Beppe C 4 नवम्बर 2020, 09:01

सबसे पहले

Async फ़ंक्शन में time.sleep() का उपयोग करना बंद करें। इसके बजाय await asyncio.sleep() का उपयोग करें!

दूसरा

python की मूल बातें जानें।

तीसरा

@dp.message_handler(commands=['timer'])
async def timer_handler(message: Message):
    # get args from message (it's `str` type!) 
    timer_string = message.get_args()
    
    # let's try to convert it to `int`
    try:
        timer = int(timer_string)
    except (ValueError, TypeError):
        return await message.answer("Please set a digit for timer. E.g.: /timer 5")
    
    # success! timer is set!
    await message.answer(f'Timer set for {timer}')
    
    # sleeping (this way, instead of blocking `time.sleep`)
    await asyncio.sleep(timer)
    
    # it's time to send message
    await message.answer("It's time! :)")

P.S .: कोई, aiogram टैग जोड़ें

0
Oleg 8 नवम्बर 2020, 19:26