如何让机器人在每个命令中给出不同的值

时间:2021-07-20 05:01:16

标签: python discord

我正在尝试制作一个不和谐的机器人 我将命令设置为 ?p 这将产生一个怪物,我们必须抓住它 但是每当我打开我的机器人并执行 ?p 命令时,它只会一次又一次地产生相同的怪物,并且一次又一次地给出相同的滚动。这是代码 -

import discord
import random
from random import randint

Mons = ["Ekans", "Pidgey", "Pikachu", "Espeon"]
random_mons = random.choice(Mons)

pokemon_roll = randint(1, 100)
pb_roll = randint(20, 100)
gb_roll = randint(40, 100)
ub_roll = randint(60, 100)
mb_roll = 100

@client.event
async def on_message(message):
if message.content.startswith('?p'):
    msg = f'A wild {random_mons} appeared!'.format(message)
    await message.channel.send (msg)
elif message.content.startswith('pb') and pokemon_roll>pb_roll:
    await message.channel.send (f'{random_mons} broke out of pb, {pb_roll}, {pokemon_roll}')
elif message.content.startswith('pb') and pokemon_roll<pb_roll:
    await message.channel.send (f'congrats, you caught {random_mons} with pb, {pb_roll}, 
   {pokemon_roll}')

我想在pokemon_roll低于pb_roll的基础上抓到怪物 但每次相同的滚动和相同的怪物产生

1 个答案:

答案 0 :(得分:0)

您应该在 random_mons 内定义 async def on_message(message)。另外,我认为您的缩进是错误的。正确的做法是:

import discord
import random
from random import randint

Mons = ["Ekans", "Pidgey", "Pikachu", "Espeon"]
# defining anything here makes it a global variable to this file

@client.event
async def on_message(message):
    # also better if you declare Mons here
    random_mons = random.choice(Mons)

    pokemon_roll = randint(1, 100)
    pb_roll = randint(20, 100)
    gb_roll = randint(40, 100)
    ub_roll = randint(60, 100)
    mb_roll = 100

    if message.content.startswith('?p'):
        msg = f'A wild {random_mons} appeared!'.format(message)
        await message.channel.send (msg)
    elif message.content.startswith('pb') and pokemon_roll>pb_roll:
        await message.channel.send (f'{random_mons} broke out of pb, {pb_roll}, {pokemon_roll}')
    elif message.content.startswith('pb') and pokemon_roll<pb_roll:
        await message.channel.send (f'congrats, you caught {random_mons} with pb, {pb_roll}, 
       {pokemon_roll}')

编辑根据评论,您可以执行以下操作:

@client.event
async def on_message(message):
    # also better if you declare Mons here
    random_mons = random.choice(Mons)

    pokemon_roll = randint(1, 100)
    pb_roll = randint(20, 100)
    gb_roll = randint(40, 100)
    ub_roll = randint(60, 100)
    mb_roll = 100

    if message.content.startswith('?p'):
        msg = f'A wild {random_mons} appeared!'.format(message)
        await message.channel.send (msg)
    
    if message.content.startswith('pb') and pokemon_roll>pb_roll:
        await message.channel.send (f'{random_mons} broke out of pb, {pb_roll}, {pokemon_roll}')
    elif message.content.startswith('pb') and pokemon_roll<pb_roll:
        await message.channel.send (f'congrats, you caught {random_mons} with pb, {pb_roll}, 
        {pokemon_roll}')

或者,您需要定义两个函数,一个控制口袋妖怪选择的函数,另一个负责捕获的函数。

此外,您可能需要定义 pokemon_roll==pb_roll 时会发生什么,因为当前未捕获到。