События бота Discord.py отформатированы точно так же, но один запускается, а другой не запускается - PullRequest
0 голосов
/ 24 января 2019

Я недавно экспериментировал с диссон-ботами и API-диссонансами, но у меня возникла проблема с бот-событиями.При создании двух событий с использованием модуля discord.py будет работать только одно, а другое - нет, но оба они будут отформатированы одинаково.Почему это происходит и как я могу решить эту проблему?Вот мой код:

@bot.event
async def on_message(message):
    message = await bot.wait_for_message(author=message.author)
    if message.content.startswith('!genlifetime password'):
        global amount
        amount = message.content[len('!genlifetime password'):].strip()
        num = int(amount)
        chars = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
        for x in range(0, num):
            authkey1 = ''
            authkey2 = ''
            authkey3 = ''
            authkey4 = ''
            for i in range(0,4):
                authkey1 = authkey1 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey2 = authkey2 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey3 = authkey3 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey4 = authkey4 + chars[random.randrange(0,35)]
            authkey = authkey1 + '-' + authkey2 + '-' + authkey3 + '-' + authkey4
            print(authkey)
            with open(keyfile, 'a') as f:
                f.write(authkey + ' LIFETIME \n')

@bot.event
async def authorize(message):
    message = await bot.wait_for_message(author=message.author)
    if message.content.startswith('!activate'):
        global key
        key = message.content[len('!activate'):].strip()
        print(key)        

bot.run("NTM3Mzk1NDQzNzAxNjQ1MzEz.DykoDA.x5PrEwxZ0hlY2TeCtKVlg1QsbfQ")

Когда я запускаю своего бота и набираю !genlifetime password 10, бот сгенерирует 10 ключей, как и предполагалось, напечатает их в оболочке и поместит их в ключи.текст.Однако событие authorize не работает вообще.Если я введу! Ключ авторизации, в оболочке ничего не произойдет.Ключ не печатается вообще.Я даже пытался поставить отпечаток до message = await bot.wait_for_message(author=message.author), но этот отпечаток тоже не распечатывался.Оба события отформатированы одинаково, так почему одно работает, а другое нет?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вызовы wait_for_message кажутся излишними: согласно документам, аргумент message, передаваемый в обратные вызовы, - это сообщение, которое вы хотите. Если бы вы удалили вызовы на wait_for_message и просто использовали сообщение, переданное напрямую, оно, вероятно, работало бы так, как ожидалось.

0 голосов
/ 24 января 2019

Я думаю, что код должен выглядеть примерно так:

@bot.event
async def on_message(message):
    message = await bot.wait_for_message(author=message.author)
    if message.content.startswith('!activate'):
        global key
        key = message.content[len('!activate'):].strip()
        print(key)        
    if message.content.startswith('!genlifetime password'):
        global amount
        amount = message.content[len('!genlifetime password'):].strip()
        num = int(amount)
        chars = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
        for x in range(0, num):
            authkey1 = ''
            authkey2 = ''
            authkey3 = ''
            authkey4 = ''
            for i in range(0,4):
                authkey1 = authkey1 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey2 = authkey2 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey3 = authkey3 + chars[random.randrange(0,35)]
            for i in range(0,4):
                authkey4 = authkey4 + chars[random.randrange(0,35)]
            authkey = authkey1 + '-' + authkey2 + '-' + authkey3 + '-' + authkey4
            print(authkey)
            with open(keyfile, 'a') as f:
                f.write(authkey + ' LIFETIME \n')

Хотя я этого не проверял.

...