Discord - 使用 python 显示来自特定类别的频道名称

Posted

技术标签:

【中文标题】Discord - 使用 python 显示来自特定类别的频道名称【英文标题】:Discord - display channel names from a specific category with python 【发布时间】:2021-07-13 12:56:24 【问题描述】:

如果有人向机器人发送消息,则可以在 python 上显示来自特定类别的所有文本通道,例如:如果 xyz 向机器人发送 !vip 消息,那么他将回复 所有文本通道姓名来自“VIP”类别?我找不到像这样的线程只是计算特定类别中有多少文本通道等......

我确实设置了基本机器人(也可以在 *** 上找到),如果您向机器人发送 !hello 并且它正在工作但无法弄清楚我上面提到的如何做.

import discord

TOKEN = 'yourtoken'

client = discord.Client()

@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

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

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

【问题讨论】:

我会在命令中使用它。 *** 上也有一篇关于它的现有帖子。 什么帖子?从一个类别中获取所有频道名称?你能给我一个关于那个帖子的链接吗? 这应该回答它:***.com/questions/62685771/… 谢谢,是的,也许这就是我想要的,但你能解释一下我该如何使用它吗?我想我需要将* 替换为我想要获取的类别名称(?),如果我写!vip 例如:在get-vip-channels 频道中,我该如何调用该函数? 啊,好吧,我发现我需要输入!comm categoryname,但它的显示是这样的:[<TextChannel id=833691055723118602 name='test' position=1 nsfw=False news=False category_id=833691033166151740>, 我可以得到test 的频道名称吗? 【参考方案1】:

如 cmets 中所述,您必须为此使用命令。为此,您可以使用CategoryChannel.channelsguild.categories

这给出了有关整个类别的信息,如下所示: [<TextChannel id=ChannelID name='Allgemein' position=0 nsfw=False news=False category_id=CategoryID>]

要仅显示名称,请使用以下命令:

text_channel_list = [] # "Create" a list

@client.command()
async def comm(ctx, *, category: CategoryChannel):
    for channel in category.text_channels: # Get text channel
        text_channel_list.append(channel.name) # Append them to the list
    await ctx.send(f"\n".join(text_channel_list)) # Send the channels in one message

我们必须将await 语句放在for 循环函数之外,以便只接收一条消息。

如需了解更多信息,请阅读docs

【讨论】:

谢谢它几乎可以工作,但在新消息中复制每个频道...(频道名称为 0-22 仅供开发人员使用)您可以看到 here 如果机器人发送新消息没问题使用每个频道名称,因为这样我可以“绕过” 2000 个字符的限制,但如果不复制它们会很棒。 您是否已经尝试过自己解决问题?毕竟,这不是一个“请为我编写/实现” 平台。 我知道。但是从技术上讲,您给了我一个与每个频道名称重复的代码。现在我正在努力解决我没有进一步解决的问题。我尝试了here 的所有内容,例如:new_list = [i for n, i in enumerate(text_channel_list) if i not in text_channel_list[:n]] await ctx.send(f"new_list") ,但做了同样的事情,只是复制了每个频道。 我编辑了我的答案。如果您不知道如何“打破”for-loop,您确实应该阅读此页面上的一些贡献,因为这里也有一个贡献:How to send a list in one message 仅仅因为我给出了一个可能的答案这并不意味着一个人不能要求你自己的贡献。我的研究表明,您的研究几乎不存在,否则您也会找到我的帖子.... 好吧,你是对的。我也可以更专心一点,但是谢谢!

以上是关于Discord - 使用 python 显示来自特定类别的频道名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 python Discord bot 播放 Youtube 音频

显示来自 2 个单独 JSON 文件的 JSON 数据 Discord PY

使用 JSON/Python 收集信息的 Discord 机器人显示相同的数据

Python discord Bot 处理来自一个用户的消息并在 webhook 中发送它们

discord.py emoji 所有服务器机器人

Python discord.py 显示未知命令