Discord.py,如果它不存在,我将如何让机器人创建一个频道,但如果它确实存在,它将继续执行它的任务?

Posted

技术标签:

【中文标题】Discord.py,如果它不存在,我将如何让机器人创建一个频道,但如果它确实存在,它将继续执行它的任务?【英文标题】:Discord.py, how would I make the bot create a channel if it doesn't exists but if it does exists it will just carry on with it's task? 【发布时间】:2019-10-19 03:12:15 【问题描述】:

我正在努力做到这一点,所以当有人收到警告时(-warn @user reason),它会说明用户收到了警告,他们收到了谁的警告以及他们收到警告的原因 然后,如果该频道尚不存在,我希望它创建一个名为“warn-logs”的频道(在 Discord 本身中键入时为#warn-logs),但如果该频道已存在该名称,它将继续进行用它的任务和说:什么用户被警告,他们被谁警告以及为什么他们被警告,我不希望它记录任何东西,只是让人们知道警告并将其保存到一个频道

我已经尝试了所有能找到的方法,但没有任何帮助,甚至 Python Discord 服务器或 Discord.py Discord 服务器都没有

这是警告命令本身以及我到目前为止所做的事情

@client.command()
@has_permissions(kick_members=True)
async def warn(ctx, member:discord.Member, *, arg):
 author = ctx.author
 guild = ctx.message.guild
 channel = await guild.create_text_channel('warn-logs')

 channel
 await ctx.send(f'member.mention warned for: arg warned by: author.mention')
 await member.send(f'author.mention warned you for: arg')
 await ctx.message.delete()

我没有收到任何错误消息,所发生的只是它创建了一个名为 warn-logs 的通道(即使已经存在同名的通道)但不发送任何消息

【问题讨论】:

【参考方案1】:

看起来当前代码应该在调用命令的通道中发送消息。是这样吗?

您可以使用discord.utils.get 搜索具有特定名称的频道:

@client.command()
@has_permissions(kick_members=True)
async def warn(ctx, member:discord.Member, *, arg):
    author = ctx.author
    guild = ctx.guild
    channel = get(guild.text_channels, name='warn-logs')
    if channel is None:
        channel = await guild.create_text_channel('warn-logs')
    await channel.send(f'member.mention warned for: arg warned by: author.mention')
    await member.send(f'author.mention warned you for: arg')
    await ctx.message.delete()

【讨论】:

是的,它会将其发送给被警告的人和执行命令的通道,但我希望它创建警告日志(如果尚未创建通道,则如果是,则它'将继续完成任务的其余部分)并将消息发送到警告日志 @DrJakaboii 就是这样 所以我不能让它创建一个日志通道,如果一个不存在并在那里发布reson? @DrJakaboii 这应该是上面代码的作用。当您尝试时,它不这样做吗? get 调用应该返回现有的警告日志通道。如果它返回None,则通道不存在,我们创建它。

以上是关于Discord.py,如果它不存在,我将如何让机器人创建一个频道,但如果它确实存在,它将继续执行它的任务?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 机器人:如何让我的不和谐机器人向我发送对用户在 DM 中使用的命令的响应,例如进行调查?

如何让我的 discord.py 机器人识别它正在被 ping

如何在 discord.py 库中设置多个前缀或使前缀不区分大小写?

如何让 Discord.py 机器人向服务器所有者发送消息?

如何让机器人在 discord.py 重写中为频道设置慢速模式?

Discord.py 让机器人复制每条消息,包括文件