python - 向 Discord Bot 添加更多参数?
问题描述
我为我的 D&D 团队编写了一个基本的 Discord Bot。它允许我们使用命令来掷骰子并发送结果,而不是使用我们说我们掷什么的荣誉系统。但是,它有两个主要缺点:
1:一次只能掷一个骰子,并且
2:你不能添加任何修饰符。
我见过很多 Discord Bot,尤其是那些在 Youtube 上搜索音乐的机器人,它们在运行命令时可以有多个参数,例如“!play songname ”。我将如何使我的机器人可以具有多个参数,例如!roll(骰子类型,数量,修饰符)而不仅仅是!roll_d20?
代码如下:
import discord
from discord.ext import commands # used to create bot commands
import random # adding this fixed a problem, don't delete
from random import randint # generates random numbers for dice rolls
import sys # used to safely shut down the bot
bot = commands.Bot(command_prefix='!') # creates an instance of a bot
@bot.event # says when the bot should be ready as a message in the IDE
async def on_ready():
print("Ready to roll!")
@bot.command() # allows users to test the response of the bot from Discord
async def test(ctx):
await ctx.send('Ready to roll!'.format(ctx.author))
@bot.command() # rolls a d4 and shows the result
async def roll_d4(ctx):
x = random.randint(1,4)
await ctx.send((str(ctx.author) + ', you rolled a d4 and got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d6 and shows the result
async def roll_d6(ctx):
x = random.randint(1,6)
await ctx.send((str(ctx.author) + ', you rolled a d6 got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d8 and shows the result
async def roll_d8(ctx):
x = random.randint(1,8)
await ctx.send((str(ctx.author) + ', you rolled a d8 got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d10 and shows the result
async def roll_d10(ctx):
x = random.randint(1,10)
await ctx.send((str(ctx.author) + ', you rolled a d10 got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d12 and shows the result
async def roll_d12(ctx):
x = random.randint(1,12)
await ctx.send((str(ctx.author) + ', you rolled a d12 got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d20 and shows the result
async def roll_d20(ctx):
x = random.randint(1,20)
if x == 1:
await ctx.send((str(ctx.author) + ', you rolled a d20 and got a Nat 1!').format(ctx.author))
elif x == 20:
await ctx.send((str(ctx.author) + ', you rolled a d20 and got a Nat 20!').format(ctx.author))
else:
await ctx.send((str(ctx.author) + ', you rolled a d20 and got a ' + str(x) + '!').format(ctx.author))
@bot.command() # rolls a d100 and shows the result
async def roll_d100(ctx):
x = random.randint(1,100)
await ctx.send((str(ctx.author) + ', you rolled a d100 got a ' + str(x) + '!').format(ctx.author))
@bot.command() # shuts down the bot
async def stop(ctx):
await ctx.send(("Logging out. See you next session!").format(ctx.author))
sys.exit()
bot.run('token')
解决方案
推荐阅读
- python-3.x - 如何使用 django 在 redis 缓存中的现有值列表中添加/更新/删除值
- python - python中具有任意位的整数奇偶校验
- c# - .Net Core Web API 与 ServiceFabric MinRequestBodyDataRate
- node.js - 自定义错误处理程序在 Express 中不起作用
- python - 更新函数并从 scipy 获取迭代结果
- vb.net - 自定义类 vb.net 中未定义类型“记录”
- python - 具有对数比例颜色图的 Geopandas
- javascript - 从回调函数中提取处理响应的通用代码
- javascript - 正则表达式提取第二和第三个字符串
- c++ - 如何使用多核和多线程来获得最大的 cpu 和 I/O 容量来加速 C++ 中的程序?