elliebot/src/EllieBot/Modules/Utility/LiveChannel/LiveChannelCommands.cs
Toastie d9d35420c9
fixed .antispamignore
Improved livechannel error handling
2025-03-19 14:38:14 +13:00

93 lines
No EOL
3.2 KiB
C#

namespace EllieBot.Modules.Utility.LiveChannel;
public partial class Utility
{
[Group]
public class LiveChannelCommands(LiveChannelService svc) : EllieModule
{
[Cmd]
[RequireContext(ContextType.Guild)]
[UserPerm(GuildPerm.ManageChannels)]
[BotPerm(GuildPerm.ManageChannels)]
public async Task LiveChAdd(IChannel channel, [Leftover] string template)
{
if (!await svc.AddLiveChannelAsync(ctx.Guild.Id, channel, template))
{
await Response()
.Error(strs.livechannel_limit(LiveChannelService.MAX_LIVECHANNELS))
.SendAsync();
return;
}
var eb = CreateEmbed()
.WithOkColor()
.WithDescription(GetText(strs.livechannel_added(channel.Name)))
.AddField(GetText(strs.template), template, true)
.AddField(GetText(strs.preview),
await repSvc.ReplaceAsync(template,
new(
client: ctx.Client as DiscordSocketClient,
guild: ctx.Guild
)),
true)
.WithFooter(GetText(strs.livechannel_please_wait));
await Response()
.Embed(eb)
.SendAsync();
return;
}
[Cmd]
[RequireContext(ContextType.Guild)]
[UserPerm(GuildPerm.ManageChannels)]
[BotPerm(GuildPerm.ManageChannels)]
public async Task LiveChList()
{
var liveChannels = await svc.GetLiveChannelsAsync(ctx.Guild.Id);
if (liveChannels.Count == 0)
{
await Response().Pending(strs.livechannel_list_empty).SendAsync();
return;
}
var embed = CreateEmbed()
.WithTitle(GetText(strs.livechannel_list_title(ctx.Guild.Name)));
foreach (var config in liveChannels)
{
var channelName = await ctx.Guild.GetChannelAsync(config.ChannelId)
.Fmap(x => x?.Name ?? config.ChannelId.ToString());
embed.AddField(channelName, config.Template);
}
await Response().Embed(embed).SendAsync();
}
[Cmd]
[RequireContext(ContextType.Guild)]
[UserPerm(GuildPerm.ManageChannels)]
[BotPerm(GuildPerm.ManageChannels)]
public Task LiveChRemove(IChannel channel)
=> LiveChRemove(channel.Id);
[Cmd]
[RequireContext(ContextType.Guild)]
[UserPerm(GuildPerm.ManageChannels)]
[BotPerm(GuildPerm.ManageChannels)]
public async Task LiveChRemove(ulong channelId)
{
if (await svc.RemoveLiveChannelAsync(ctx.Guild.Id, channelId))
{
await Response()
.Confirm(strs.livechannel_removed(((SocketGuild)ctx.Guild).GetChannel(channelId)?.Name ??
channelId.ToString())).SendAsync();
}
else
{
await Response().Error(strs.livechannel_not_found).SendAsync();
}
}
}
}