如何使用discordgo获取所有频道的列表?

时间:2018-04-08 07:21:34

标签: go discord

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

我已关联并且可以拥有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是否可以实现这一点?

1 个答案:

答案 0 :(得分: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),
            )
        }
    }
}