forked from EllieBotDevs/elliebot
243 lines
No EOL
8.2 KiB
C#
243 lines
No EOL
8.2 KiB
C#
namespace EllieBot.Modules.Administration;
|
|
|
|
public partial class Administration
|
|
{
|
|
[Group]
|
|
public partial class GreetCommands : EllieModule<GreetService>
|
|
{
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task Boost()
|
|
=> Toggle(GreetType.Boost);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task BoostDel(int timer = 30)
|
|
=> SetDel(GreetType.Boost, timer);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task BoostMsg([Leftover] string? text = null)
|
|
=> SetMsg(GreetType.Boost, text);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task Greet()
|
|
=> Toggle(GreetType.Greet);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetDel(int timer = 30)
|
|
=> SetDel(GreetType.Greet, timer);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetMsg([Leftover] string? text = null)
|
|
=> SetMsg(GreetType.Greet, text);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetDm()
|
|
=> Toggle(GreetType.GreetDm);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetDmMsg([Leftover] string? text = null)
|
|
=> SetMsg(GreetType.GreetDm, text);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task Bye()
|
|
=> Toggle(GreetType.Bye);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task ByeDel(int timer = 30)
|
|
=> SetDel(GreetType.Bye, timer);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task ByeMsg([Leftover] string? text = null)
|
|
=> SetMsg(GreetType.Bye, text);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetTest([Leftover] IGuildUser? user = null)
|
|
=> Test(GreetType.Greet, user);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
public Task GreetDmTest([Leftover] IGuildUser? user = null)
|
|
=> Test(GreetType.GreetDm, user);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
[Ratelimit(5)]
|
|
public Task ByeTest([Leftover] IGuildUser? user = null)
|
|
=> Test(GreetType.Bye, user);
|
|
|
|
[Cmd]
|
|
[RequireContext(ContextType.Guild)]
|
|
[UserPerm(GuildPerm.ManageGuild)]
|
|
[Ratelimit(5)]
|
|
public Task BoostTest([Leftover] IGuildUser? user = null)
|
|
=> Test(GreetType.Boost, user);
|
|
|
|
|
|
public async Task Toggle(GreetType type)
|
|
{
|
|
var enabled = await _service.SetGreet(ctx.Guild.Id, ctx.Channel.Id, type);
|
|
|
|
if (enabled)
|
|
await Response()
|
|
.Confirm(
|
|
type switch
|
|
{
|
|
GreetType.Boost => strs.boost_on,
|
|
GreetType.Greet => strs.greet_on,
|
|
GreetType.Bye => strs.bye_on,
|
|
GreetType.GreetDm => strs.greetdm_on,
|
|
_ => strs.error
|
|
}
|
|
)
|
|
.SendAsync();
|
|
else
|
|
await Response()
|
|
.Pending(
|
|
type switch
|
|
{
|
|
GreetType.Boost => strs.boost_off,
|
|
GreetType.Greet => strs.greet_off,
|
|
GreetType.Bye => strs.bye_off,
|
|
GreetType.GreetDm => strs.greetdm_off,
|
|
_ => strs.error
|
|
}
|
|
)
|
|
.SendAsync();
|
|
}
|
|
|
|
|
|
public async Task SetDel(GreetType type, int timer)
|
|
{
|
|
if (timer is < 0 or > 600)
|
|
return;
|
|
|
|
await _service.SetDeleteTimer(ctx.Guild.Id, type, timer);
|
|
|
|
if (timer > 0)
|
|
await Response()
|
|
.Confirm(
|
|
type switch
|
|
{
|
|
GreetType.Boost => strs.boostdel_on(timer),
|
|
GreetType.Greet => strs.greetdel_on(timer),
|
|
GreetType.Bye => strs.byedel_on(timer),
|
|
_ => strs.error
|
|
}
|
|
)
|
|
.SendAsync();
|
|
else
|
|
await Response()
|
|
.Pending(
|
|
type switch
|
|
{
|
|
GreetType.Boost => strs.boostdel_off,
|
|
GreetType.Greet => strs.greetdel_off,
|
|
GreetType.Bye => strs.byedel_off,
|
|
_ => strs.error
|
|
})
|
|
.SendAsync();
|
|
}
|
|
|
|
|
|
public async Task SetMsg(GreetType type, string? text = null)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(text))
|
|
{
|
|
var conf = await _service.GetGreetSettingsAsync(ctx.Guild.Id, type);
|
|
var msg = conf?.MessageText ?? GreetService.GetDefaultGreet(type);
|
|
await Response()
|
|
.Confirm(
|
|
type switch
|
|
{
|
|
GreetType.Boost => strs.boostmsg_cur(msg),
|
|
GreetType.Greet => strs.greetmsg_cur(msg),
|
|
GreetType.Bye => strs.byemsg_cur(msg),
|
|
GreetType.GreetDm => strs.greetdmmsg_cur(msg),
|
|
_ => strs.error
|
|
})
|
|
.SendAsync();
|
|
return;
|
|
}
|
|
|
|
var isEnabled = await _service.SetMessage(ctx.Guild.Id, type, text);
|
|
|
|
await Response()
|
|
.Confirm(type switch
|
|
{
|
|
GreetType.Boost => strs.boostmsg_new,
|
|
GreetType.Greet => strs.greetmsg_new,
|
|
GreetType.Bye => strs.byemsg_new,
|
|
GreetType.GreetDm => strs.greetdmmsg_new,
|
|
_ => strs.error
|
|
})
|
|
.SendAsync();
|
|
|
|
|
|
if (!isEnabled)
|
|
{
|
|
var cmdName = GetCmdName(type);
|
|
|
|
await Response().Pending(strs.boostmsg_enable($"`{prefix}{cmdName}`")).SendAsync();
|
|
}
|
|
}
|
|
|
|
private static string GetCmdName(GreetType type)
|
|
{
|
|
var cmdName = type switch
|
|
{
|
|
GreetType.Greet => "greet",
|
|
GreetType.Bye => "bye",
|
|
GreetType.Boost => "boost",
|
|
GreetType.GreetDm => "greetdm",
|
|
_ => "unknown_command"
|
|
};
|
|
return cmdName;
|
|
}
|
|
|
|
public async Task Test(GreetType type, IGuildUser? user = null)
|
|
{
|
|
user ??= (IGuildUser)ctx.User;
|
|
|
|
await _service.Test(ctx.Guild.Id, type, (ITextChannel)ctx.Channel, user);
|
|
var conf = await _service.GetGreetSettingsAsync(ctx.Guild.Id, type);
|
|
|
|
var cmd = $"`{prefix}{GetCmdName(type)}`";
|
|
|
|
var str = type switch
|
|
{
|
|
GreetType.Greet => strs.boostmsg_enable(cmd),
|
|
GreetType.Bye => strs.greetmsg_enable(cmd),
|
|
GreetType.Boost => strs.byemsg_enable(cmd),
|
|
GreetType.GreetDm => strs.greetdmmsg_enable(cmd),
|
|
_ => strs.error
|
|
};
|
|
if (conf?.IsEnabled is not true)
|
|
await Response().Pending(str).SendAsync();
|
|
}
|
|
}
|
|
} |