Discord Bot, создайте новый канал Publi c в категории существующих каналов - PullRequest
0 голосов
/ 14 февраля 2020

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

        public Task ExecuteCommand(BotMessageInformation botMessageInfo)
        {
            return Task.Run(
            async
            ()
            =>
            {
                ulong messageChannelId = botMessageInfo.Message.Channel.Id;
                var textChannel = botMessageInfo.Client
                                  .GetChannel(messageChannelId) as SocketTextChannel;
                string textChannelName = textChannel.Name;
                // ulong textChannelCategory = textChannel.CategoryId;
                await textChannel.DeleteAsync();
                await botMessageInfo.Client.GetGuild(botMessageInfo.GuildId)
                                           .CreateTextChannelAsync(textChannelName);
            });
        }

botMessageInfo.Client имеет тип DiscordSocketClient.

Как мне создать этот канал в данной категории? Я хочу использовать textChannel.CategoryId

1 Ответ

1 голос
/ 07 апреля 2020

Да, вы можете создать канал в категории. 2-й параметр функции CreateTextChannelAsync (включая CreateAudioChannelAsyn c) позволяет вам установить CategoryId.

Вам потребуется получить идентификатор ulong для категории, который вы можете получить из Guild.CategoryChannels. Затем вы можете передать этот идентификатор во второй параметр, чтобы присвоить каналу эту категорию.

// in using statements area
using System.Linq;

public Task ExecuteCommand(BotMessageInformation botMessageInfo)
{
    return Task.Run(
    async
    ()
    =>
    {
        ulong messageChannelId = botMessageInfo.Message.Channel.Id;
        var textChannel = botMessageInfo.Client
                          .GetChannel(messageChannelId) as SocketTextChannel;
        string textChannelName = textChannel.Name;
                // ulong textChannelCategory = textChannel.CategoryId;
                await textChannel.DeleteAsync();

        var guild = botMessageInfo.Client.GetGuild(botMessageInfo.GuildId);
        var categoryId = guild.CategoryChannels.First(c => c.Name == "Name of Category").Id;

        await guild.CreateTextChannelAsync(textChannelName, tcp => tcp.CategoryId = categoryId);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...