Discord BOT with Python,如何让它在我们发送命令的频道中回复(完成)

Posted

技术标签:

【中文标题】Discord BOT with Python,如何让它在我们发送命令的频道中回复(完成)【英文标题】:Discord BOT with Python, How to make it reply in the channel we send the command (Done) 【发布时间】:2020-12-05 08:51:45 【问题描述】:

完成!感谢任何帮助过我的人:)也许您还有更好的答案,所以,请随时回答!

我知道,这可能看起来像一个愚蠢的问题,但如果你认为我是一个初学者,在 Python 中为 Discord 制作机器人,超出了我所有其他 Python 知识,而 Stack Overflow 可能是一个只是为了那个地方,我希望它不会。 (我太新了,当我看到我的机器人上线时,我真的把家里的每个人都吵醒了,哈哈)

正如我在其他帖子、教程等中看到的; (不要介意 , 和 的用法;可能是错误的)我们必须指定频道的ID,那么我们如何才能在用户发送命令的频道中回复呢?也许通过某种类型的命令获取当前频道的 ID?我不知道。

import discord

TOKEN = 'XXXXX'

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('!hello'):
        msg = 'Hi 0.author.mention'.format(message)
        await client.send_message(message.channel, msg)

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.run(TOKEN)

(因为我懒惰地重新生成令牌,所以我在这个例子中设置为 xxxxx,但不用担心我把它放在普通代码中。)

正如我所见,即使有相似的问题,也没有相同的问题(我看不到答案或问题,因为每个人都知道该怎么做)

问题出在 send_message 部分。它给出了一个错误。

【问题讨论】:

是的,我第一次提到谢谢。 message.channel 不是从消息的频道中获取频道 ID 吗?我想我不明白你在找什么? @TadhgMcDonald-Jensen 但是它给出了一个错误,说 send_message 不是客户端的有效命令。 (编辑:很抱歉以错误的方式提出实际问题,我尝试了我使用的许多其他堆栈溢出帖子的答案,如果没有工作就删除了。所以我可能从其中一个和一个我那里得到另一个错误在谈论,是那个。 【参考方案1】:

您只需要获取通道对象并使用message.channel.send() 而不是client.send_message() 向其发送消息

if message.content.startswith('!hello'):
    msg = 'Hi 0.author.mention'.format(message)
    await message.channel.send(msg)

将来您可能想尝试这样的事情,或者出于任何原因遇到它:

from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.command()
#This is defining a '!hello' command
async def hello(ctx):
    #In this case you have to use the ctx to send the message
    #Good to remember that ctx is NOT a parameter wich the user will give
    msg = f'Hi ctx.author.mention'
    await ctx.send(msg)

【讨论】:

谢谢@Voz!我已经修复了它,但它仍然有帮助! 不客气 :)。如果您选择我的最佳答案,我将不胜感激。 嗯,我以前从来没有这样做过...用复选图标..? 是的,如果您对如何操作有任何疑问,请使用检查图标 ***.com/help/someone-answers 检查此链接 刚刚做到了@Voz! :)【参考方案2】:

您可以通过两种方式发送消息。一种是使用 on_message,但我建议不要这样做,因为它可能会干扰代码中的其他命令。

例子:

import discord

client = discord.Client(command_prefix='!')

@client.event
async def on_ready()
 print('Bot is ready')

#example message
@client.command()
async def test(ctx):
 await ctx.send('This message is a test')

client.run('YOUR TOKEN')

你可以通过在bot频道中执行“!test”来调用测试命令。

【讨论】:

【参考方案3】:

导入操作系统 导入下一条线 从 nextcord.ext 导入命令

client = commands.Bot(command_prefix='Your Prefered Prefix')

@client.command() 异步定义 hi(ctx): 等待 ctx.send(f"hi ctx.author.name!")

client.run(Token)

【讨论】:

以上是关于Discord BOT with Python,如何让它在我们发送命令的频道中回复(完成)的主要内容,如果未能解决你的问题,请参考以下文章

Python Discord Bot 未加入语音频道

Python 3.6 Discord bot Bot 事件冲突

Discord Bot,提到不和谐@users时出现问题

Discord Bot如何为自动进入服务器的新用户赋予角色

Discord Python Bot- 修复清除命令

Discord bot python:discord.errors.ClientException:找不到ffmpeg