2 回答
TA贡献1846条经验 获得超7个赞
您有两个语句的计算结果都可以为 ,这意味着变量可能永远不会被创建。ifFalsesides
这是因为您创建的 在函数之外,使其超出范围。您需要将其移动到函数内部或声明为全局(不建议)。sidessides
...
#active_ybna = 6
#active_danger = 6
w=""
#Successful server connection message
@client.event
async def on_ready():
print(f'{client.user.name} has connected to Discord!')
#Makes sure bot doesn't respond to itself
@client.event
async def on_message(message):
sides = 6
if message.author == client.user:
return
#Choose die (6 or 10)
if message.content.startswith('!y d6'):
sides = 6
if message.content.startswith('!y d10'):
sides = 10
#Evaluate rolls
if message.content.startswith('!y'):
if int(message.content[2])>int(0):
z = int(message.content[2])
for x in range(z):
y = randint(1,int(sides))
active_ybna = 'ybna'+ sides + '_faces()'
response = 'Roll ' + str(x+1) + ': ' + active_ybna(y)
await message.channel.send(response)
if len(message.content)>=4:
if int(message.content[4])>int(0):
z = int(message.content[4])
for x in range(z):
y=randint(1,int(sides))
active_danger = 'danger'+ sides + '_faces()'
response = 'Danger ' + str(x+1) + ': ' + active_danger(y)
await message.channel.send(response)
client.run(TOKEN)您有两个语句的计算结果都可以为 ,这意味着变量可能永远不会被创建。ifFalsesides
这是因为您创建的 在函数之外,使其超出范围。您需要将其移动到函数内部或声明为全局(不建议)。sidessides
...
#active_ybna = 6
#active_danger = 6
w=""
#Successful server connection message
@client.event
async def on_ready():
print(f'{client.user.name} has connected to Discord!')
#Makes sure bot doesn't respond to itself
@client.event
async def on_message(message):
sides = 6
if message.author == client.user:
return
#Choose die (6 or 10)
if message.content.startswith('!y d6'):
sides = 6
if message.content.startswith('!y d10'):
sides = 10
#Evaluate rolls
if message.content.startswith('!y'):
if int(message.content[2])>int(0):
z = int(message.content[2])
for x in range(z):
y = randint(1,int(sides))
active_ybna = 'ybna'+ sides + '_faces()'
response = 'Roll ' + str(x+1) + ': ' + active_ybna(y)
await message.channel.send(response)
if len(message.content)>=4:
if int(message.content[4])>int(0):
z = int(message.content[4])
for x in range(z):
y=randint(1,int(sides))
active_danger = 'danger'+ sides + '_faces()'
response = 'Danger ' + str(x+1) + ': ' + active_danger(y)
await message.channel.send(response)
client.run(TOKEN)
TA贡献1827条经验 获得超8个赞
我认为我发布的变量未声明为全局变量。我稍微简化了这一切,并将其塞进一个具有多个IF的事件中。
还添加了一些其他代码...
# ybnabot.py
#d6 functionality
import os
from random import randint
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
def ybna6_faces(x):
return{
1: 'No, And...',
2: 'No...',
3: 'No, But...',
4: 'Yes, But...',
5: 'Yes...',
6: 'Yes, And...'
}[x]
def danger6_faces(x):
return{
1: 'Blank',
2: 'Blank',
3: 'Blank',
4: 'Blank',
5: ':skull:',
6: ':skull: :skull:'
}[x]
def ybna10_faces(x):
return{
1: 'No, And...',
2: 'No, And, But...',
3: 'No...',
4: 'Not, But...',
5: 'No, But, And...',
6: 'Yes, But, And...',
7: 'Yes, But...',
8: 'Yes...',
9: 'Yes, And, But...',
10: 'Yes, And...'
}[x]
def danger10_faces(x):
return{
1: 'Blank',
2: 'Blank',
3: 'Blank',
4: 'Blank',
5: ':skull',
6: ':skull: :skull',
7: 'Blank',
8: 'Blank',
9: ':skull:',
10: ':skull: :skull:'
}[x]
@client.event
async def on_ready():
global sides
sides = 6
print(f'{client.user.name} has connected to Discord!')
@client.event
async def on_message(message):
global sides
if message.author == client.user:
return
#Send Help DM
if message.content.startswith('!y help'):
await message.author.send('YBNA Bot Help!')
await message.author.send('Commands:')
await message.author.send('!y X Z - Roll X number of YBNA dice and Z Danger dice (Danger die can be omitted)')
await message.author.send('!y d6 - Choose six sided dice')
await message.author.send('!y d10 - Choose 10 sided dice')
await message.author.send('!y dice - Displays which dice are selected (d6 or d10)')
await message.author.send('!y help - This message!')
await message.author.send('txutfz73 credits here')
await message.author.send('github link here')
return
#Check die used
if message.content.startswith('!y dice'):
response = 'Using ' + str(sides) + ' sided dice!'
await message.channel.send(response)
return
#Choose d6 or d10
if message.content.startswith('!y d6'):
sides = 6
await message.channel.send('Now using d6!')
return
if message.content.startswith('!y d10'):
sides = 10
response = 'Now using d10!'
await message.channel.send(response)
return
#Roll d6
if sides == 6:
if message.content.startswith('!y'):
if int(message.content[2])>int(0):
z = int(message.content[2])
for x in range(z):
y = randint(1,6)
response = 'Roll ' + str(x+1) + ': ' + ybna6_faces(y) + str(sides)
await message.channel.send(response)
if len(message.content)>=4:
if int(message.content[4])>int(0):
z = int(message.content[4])
for x in range(z):
y=randint(1,6)
response = 'Danger ' + str(x+1) + ': ' + danger6_faces(y)
await message.channel.send(response)
#Roll d10
else:
if message.content.startswith('!y'):
if int(message.content[2])>int(0):
z = int(message.content[2])
for x in range(z):
y = randint(1,10)
response = 'Roll ' + str(x+1) + ': ' + ybna10_faces(y) + str(sides)
await message.channel.send(response)
if len(message.content)>=4:
if int(message.content[4])>int(0):
z = int(message.content[4])
for x in range(z):
y=randint(1,10)
response = 'Danger ' + str(x+1) + ': ' + danger10_faces(y)
await message.channel.send(response)
client.run(TOKEN)
添加回答
举报