Как получить список всех каналов с помощью discordgo?

avatar
Increasingly Idiotic
8 апреля 2018 в 07:21
3725
1
7

Я хочу отправить сообщение по всем текстовым каналам моего частного сервера Discord с помощью бота.

Я подключился и могу иметь объект Session, но я не уверен, как получить список всех доступных каналов из Session<76077997><7872073>.3<<76077738299306>.

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?

Источник
Peter
8 апреля 2018 в 09:41
0

Существует два метода: GuildChannels и UserChannels. Вы пробовали это?

Increasingly Idiotic
8 апреля 2018 в 11:04
0

GuildChannels требует guildID, а UserChannels возвращает пустой список

vitr
8 апреля 2018 в 12:16
0

здесь python api coderhelper.com/questions/49446882/…, но я не смог найти ничего подобного в discordgo

reticentroot
8 апреля 2018 в 23:38
2

@IncreasinglyIdiotic UserChannels returns an array of Channel structures for all private channels. Ваши каналы закрыты?

Increasingly Idiotic
10 апреля 2018 в 16:10
0

@reticentroot К сожалению, это не так. Я пытался использовать этот метод, но он возвращает пустой список.

Ответы (1)

avatar
haraldfw
8 августа 2018 в 07:53
3

Не знаю, актуально ли это для вас, но оставьте это здесь для всех, кому интересно.

Все, что вам нужно, это доступ к объекту discordgo.Session, dg в вашем случае будет работать точно так же.

Возможно, но вам придется перебирать каждую гильдию (сервер), к которой у бота есть доступ. В качестве альтернативы, если у вас есть соответствующий идентификатор или объект гильдии, вы можете пройти по каналам только этой гильдии.

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),
            )
        }
    }
}