mirror of
https://github.com/NoiTheCat/BirthdayBot.git
synced 2024-11-21 21:54:36 +00:00
Add birthday setting commands
This commit is contained in:
parent
b1af7922af
commit
edec3134be
2 changed files with 73 additions and 115 deletions
73
ApplicationCommands/BirthdayModule.cs
Normal file
73
ApplicationCommands/BirthdayModule.cs
Normal file
|
@ -0,0 +1,73 @@
|
|||
using Discord.Interactions;
|
||||
|
||||
namespace BirthdayBot.ApplicationCommands;
|
||||
|
||||
[Group("birthday", "Commands relating to birthdays.")]
|
||||
public class BirthdayModule : BotModuleBase {
|
||||
public const string HelpRemove = "Removes your birthday information from this bot.";
|
||||
|
||||
[Group("set", "Subcommands for setting birthday information.")]
|
||||
public class SubCmdsBirthdaySet : BotModuleBase {
|
||||
public const string HelpSetBday = "Sets or updates your birthday.";
|
||||
public const string HelpSetZone = "Sets or updates your time zone, when your birthday is already set.";
|
||||
|
||||
[SlashCommand("date", HelpSetBday)]
|
||||
public async Task CmdSetBday([Summary(description: HelpOptDate)] string date,
|
||||
[Summary(description: HelpOptPfxOptional + HelpOptZone)] string? zone = null) {
|
||||
int inmonth, inday;
|
||||
try {
|
||||
(inmonth, inday) = ParseDate(date);
|
||||
} catch (FormatException e) {
|
||||
// Our parse method's FormatException has its message to send out to Discord.
|
||||
await RespondAsync(e.Message, ephemeral: true).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
string? inzone = null;
|
||||
if (zone != null) {
|
||||
try {
|
||||
inzone = ParseTimeZone(zone);
|
||||
} catch (FormatException e) {
|
||||
await ReplyAsync(e.Message).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var user = await Context.GetGuildUserConfAsync().ConfigureAwait(false);
|
||||
await user.UpdateAsync(inmonth, inday, inzone ?? user.TimeZone).ConfigureAwait(false);
|
||||
|
||||
await RespondAsync($":white_check_mark: Your birthday has been set to **{FormatDate(inmonth, inday)}**" +
|
||||
(inzone == null ? "" : $", with time zone {inzone}") + ".");
|
||||
}
|
||||
|
||||
[SlashCommand("zone", HelpSetZone)]
|
||||
public async Task CmdSetZone([Summary(description: HelpOptZone)] string zone) {
|
||||
var user = await Context.GetGuildUserConfAsync().ConfigureAwait(false);
|
||||
if (!user.IsKnown) {
|
||||
await RespondAsync(":x: You must first set your birthday to use this command.", ephemeral: true).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
string inzone;
|
||||
try {
|
||||
inzone = ParseTimeZone(zone);
|
||||
} catch (FormatException e) {
|
||||
await RespondAsync(e.Message, ephemeral: true).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
await user.UpdateAsync(user.BirthMonth, user.BirthDay, inzone).ConfigureAwait(false);
|
||||
await RespondAsync($":white_check_mark: Your time zone has been set to **{inzone}**.").ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
[SlashCommand("remove", HelpRemove)]
|
||||
public async Task CmdRemove() {
|
||||
var user = await Context.GetGuildUserConfAsync().ConfigureAwait(false);
|
||||
if (user.IsKnown) {
|
||||
await user.DeleteAsync().ConfigureAwait(false);
|
||||
await RespondAsync(":white_check_mark: Your information for this server has been removed.");
|
||||
} else {
|
||||
await RespondAsync(":white_check_mark: This bot already does not have your birthday for this server.");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
using BirthdayBot.Data;
|
||||
|
||||
namespace BirthdayBot.ApplicationCommands;
|
||||
|
||||
internal class RegistrationCommands : BotApplicationCommand {
|
||||
#region Help strings
|
||||
public const string HelpSet = "Sets or updates your birthday.";
|
||||
public const string HelpZone = "Sets or updates your time zone. For use only if you have already set a birthday.";
|
||||
public const string HelpZoneDel = "Removes your time zone information from the bot.";
|
||||
public const string HelpDel = "Removes your birthday information from the bot.";
|
||||
|
||||
const string MsgNoData = "This bot does not have your birthday information for this server.";
|
||||
#endregion
|
||||
|
||||
public override IEnumerable<ApplicationCommandProperties> GetCommands() => new ApplicationCommandProperties[] {
|
||||
new SlashCommandBuilder()
|
||||
.WithName("set-birthday")
|
||||
.WithDescription(HelpSet)
|
||||
.AddOption("date", ApplicationCommandOptionType.String, HelpOptDate, isRequired: true)
|
||||
.Build(),
|
||||
new SlashCommandBuilder()
|
||||
.WithName("set-timezone")
|
||||
.WithDescription(HelpZone)
|
||||
.AddOption("zone", ApplicationCommandOptionType.String, HelpOptZone, isRequired: true)
|
||||
.Build(),
|
||||
new SlashCommandBuilder()
|
||||
.WithName("remove-timezone")
|
||||
.WithDescription(HelpZoneDel)
|
||||
.AddOption("zone", ApplicationCommandOptionType.String, HelpOptZone, isRequired: true)
|
||||
.Build(),
|
||||
new SlashCommandBuilder()
|
||||
.WithName("remove-birthday")
|
||||
.WithDescription(HelpDel)
|
||||
.Build()
|
||||
};
|
||||
public override CommandResponder? GetHandlerFor(string commandName) => commandName switch {
|
||||
"set-birthday" => CmdSetBirthday,
|
||||
"set-timezone" => CmdSetTimezone,
|
||||
"remove-timezone" => CmdDelTz,
|
||||
"remove-birthday" => CmdDelBd,
|
||||
_ => null
|
||||
};
|
||||
|
||||
// Note that the following subcommands have largely been copied to RegistrationOverrideCommands.
|
||||
// Any changes made here should be reflected there, if appropriate.
|
||||
|
||||
private static async Task CmdSetBirthday(ShardInstance instance, GuildConfiguration gconf, SocketSlashCommand arg) {
|
||||
int inmonth, inday;
|
||||
try {
|
||||
(inmonth, inday) = ParseDate((string)arg.Data.Options.First().Value);
|
||||
} catch (FormatException e) {
|
||||
// Our parse method's FormatException has its message to send out to Discord.
|
||||
arg.RespondAsync(e.Message).Wait();
|
||||
return;
|
||||
}
|
||||
|
||||
bool known;
|
||||
try {
|
||||
var user = await GuildUserConfiguration.LoadAsync(gconf.GuildId, arg.User.Id).ConfigureAwait(false);
|
||||
known = user.IsKnown;
|
||||
await user.UpdateAsync(inmonth, inday, user.TimeZone).ConfigureAwait(false);
|
||||
} catch (Exception ex) {
|
||||
Program.Log("Error", ex.ToString());
|
||||
arg.RespondAsync(ShardInstance.InternalError).Wait();
|
||||
return;
|
||||
}
|
||||
|
||||
await arg.RespondAsync(":white_check_mark: Your birthday has been " +
|
||||
$"{ (known ? "updated to" : "recorded as") } **{inday:00}-{Common.MonthNames[inmonth]}**.").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static async Task CmdSetTimezone(ShardInstance instance, GuildConfiguration gconf, SocketSlashCommand arg) {
|
||||
var user = await GuildUserConfiguration.LoadAsync(gconf.GuildId, arg.User.Id).ConfigureAwait(false);
|
||||
if (!user.IsKnown) {
|
||||
await arg.RespondAsync(":x: You must have a birthday set before you can use this command.",
|
||||
ephemeral: true).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
bool hasZone = user.TimeZone != null;
|
||||
|
||||
string inZone;
|
||||
try {
|
||||
inZone = ParseTimeZone((string)arg.Data.Options.First().Value);
|
||||
} catch (Exception e) {
|
||||
arg.RespondAsync(e.Message).Wait();
|
||||
return;
|
||||
}
|
||||
await user.UpdateAsync(user.BirthMonth, user.BirthDay, inZone).ConfigureAwait(false);
|
||||
|
||||
await arg.RespondAsync($":white_check_mark: Your time zone has been { (hasZone ? "updated" : "set") } to **{inZone}**.")
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static async Task CmdDelTz(ShardInstance instance, GuildConfiguration gconf, SocketSlashCommand arg) {
|
||||
var u = await GuildUserConfiguration.LoadAsync(gconf.GuildId, arg.User.Id).ConfigureAwait(false);
|
||||
if (!u.IsKnown) {
|
||||
await arg.RespondAsync(":white_check_mark: " + MsgNoData);
|
||||
} else if (u.TimeZone is null) {
|
||||
await arg.RespondAsync(":white_check_mark: You do not have any time zone information.");
|
||||
} else {
|
||||
await u.UpdateAsync(u.BirthMonth, u.BirthDay, null);
|
||||
await arg.RespondAsync(":white_check_mark: Your time zone information has been removed.");
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task CmdDelBd(ShardInstance instance, GuildConfiguration gconf, SocketSlashCommand arg) {
|
||||
var u = await GuildUserConfiguration.LoadAsync(gconf.GuildId, arg.User.Id).ConfigureAwait(false);
|
||||
if (u.IsKnown) {
|
||||
await u.DeleteAsync().ConfigureAwait(false);
|
||||
await arg.RespondAsync(":white_check_mark: Your birthday information has been removed.");
|
||||
} else {
|
||||
await arg.RespondAsync(":white_check_mark: " + MsgNoData);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue