Discord Bot 命令未显示

Posted

技术标签:

【中文标题】Discord Bot 命令未显示【英文标题】:Discord Bot Command is not Showing 【发布时间】:2021-01-21 15:45:46 【问题描述】:

所以我正在制作一个基本的机器人命令,以响应玩家所说的内容,例如执行 !test code 将使机器人以“代码”响应。出于某种原因,运行命令时没有任何反应。我什至在里面放了一个打印件,看看它是否真的在运行,但事实并非如此。这是我的代码:

import discord
from discord.ext import commands

client = discord.Client()
bot = commands.Bot(command_prefix="!")

@client.event
async def on_ready():
    print('Logged in as 0.user'.format(client))
    print("-"*16)

game = discord.Game("Discord")
await client.change_presence(status=discord.Status.online, activity=game)

@bot.command()
async def test(ctx, arg):
    await ctx.send(str(arg))

client.run('token here')

感谢任何帮助。

【问题讨论】:

【参考方案1】:

试试这个:

import discord
from discord.ext import commands

client = commands.Bot(command_prefix="!")

@client.event
async def on_ready():
    print('Logged in as 0.user'.format(client))
    print("-"*16)

game = discord.Game("Discord")
await client.change_presence(status=discord.Status.online, activity=game)

@client.command()
async def test(ctx, *, arg):
    await ctx.send(str(arg))

client.run('token here')

你错了:

client = discord.Client()
bot = commands.Bot(command_prefix="!")

你有 2 个单独的机器人处理程序,如果你使用命令,你只需要 bot = commands.Bot(command_prefix="!") 行,在这种情况下,你有命令的机器人处理程序,但你正在运行客户端

【讨论】:

我认为上面的代码会抛出“'await' outside function”错误......你测试过你的答案吗 是的,它奏效了。我真的很困惑,因为只有 2 个更改:变量名更改和添加的星号。还有我添加回来的函数之外的等待。 是的,我会编辑答案以向您展示您做错了什么:)【参考方案2】:

如果想让机器人运行最后一行代码必须是 bot.run('your token') 如果你想让客户端运行使用 client.run('your token'),你不能同时运行客户端和机器人/p>

【讨论】:

【参考方案3】:

以下代码在使用 Python3.7 测试时按预期运行 ...

import discord
from discord.ext import commands

client = commands.Bot(command_prefix="!")

@client.event
async def on_ready():
    print('Logged in as 0.user'.format(client))
    print("-"*16)

    game = discord.Game("Discord")
    await client.change_presence(status=discord.Status.online, activity=game)

@client.command()
async def test(ctx, *arg):
    await ctx.send(str(arg))

client.run('token here')

您发布的代码在函数之外有一个等待语句

......
print("-"*16)

game = discord.Game("Discord")
await client.change_presence(status=discord.Status.online, activity=game)
.......

也改变

@bot.command()
async def test(ctx, arg):

到:

@bot.command()
async def test(ctx, *arg):

关于你为什么通过*arg而不是arg的解释:

args-and-kwargs

【讨论】:

以上是关于Discord Bot 命令未显示的主要内容,如果未能解决你的问题,请参考以下文章

Bot 未检测到服务器成员 (Discord.py)

Python,Discord bot 未回复消息且终端未更新

discord.py bot 只响应一个命令

discord python bot kick 命令

Python Discord Bot 未加入语音频道

Discord bot 发送消息特定通道错误