【问题标题】:How to get list of all channels using discordgo?如何使用 discordgo 获取所有频道的列表?
【发布时间】:2018-09-17 19:41:45
【问题描述】:

我想使用机器人在我的私人不和谐服务器的所有文本频道上发送消息。

我已经连接并且可以拥有Session 对象,但我不确定如何从Session 获取所有可用频道的列表。

dg, err := discordgo.New("Bot " + Token)
if err != nil {
    fmt.Println("error creating Discord session,", err)
    return
}

// Open a websocket connection to Discord and begin listening.
err = dg.Open()
if err != nil {
    fmt.Println("error opening connection,", err)
    return
}

// Get all channel ID's from dg here

discord API 甚至可以做到这一点吗?

【问题讨论】:

  • 有两种方法,称为 GuildChannels 和 UserChannels。你试过了吗?
  • GuildChannels 需要 guildID 而 UserChannels 返回空列表
  • 这里是 python api stackoverflow.com/questions/49446882/… 但我在 discordgo 中找不到类似的东西
  • @IncreasinglyIdiotic UserChannels returns an array of Channel structures for all private channels.您的频道是私有的吗?
  • @reticentroot 遗憾的是他们不是。我尝试使用该方法,但它返回一个空列表。

标签: go discord


【解决方案1】:

不知道这是否仍然与您相关,但将其留在这里让其他想知道的人。

您只需要访问discordgo.Session 对象,dg 在您的情况下也可以正常工作。

这是可能的,但您必须遍历机器人有权访问的每个 Guild(服务器)。或者,如果您有相关的公会 ID 或对象,您可以只循环访问该公会的频道。

func spam(s *discordgo.Session) {
    // Loop through each guild in the session
    for _, guild := range s.State.Guilds {

        // Get channels for this guild
        channels, _ := s.GuildChannels(guild.ID)

        for _, c := range channels {
            // Check if channel is a guild text channel and not a voice or DM channel
            if c.Type != discordgo.ChannelTypeGuildText {
                continue
            }

            // Send text message
            s.ChannelMessageSend(
                c.ID,
                fmt.Sprintf("testmsg (sorry for spam). Channel name is %q", c.Name),
            )
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多