diff --git a/BirthdayBot/BackgroundWorker.vb b/BirthdayBot/BackgroundWorker.vb index ffebe0d..0ba3beb 100644 --- a/BirthdayBot/BackgroundWorker.vb +++ b/BirthdayBot/BackgroundWorker.vb @@ -13,7 +13,7 @@ Class BackgroundWorker Private ReadOnly _db As Database Private ReadOnly Property WorkerCancel As New CancellationTokenSource Private _workerTask As Task - Const Interval = 30 ' How often the worker wakes up, in seconds + Const Interval = 180 ' How often the worker wakes up, in seconds Private _clock As IClock Sub New(instance As BirthdayBot, dbsettings As Database) diff --git a/BirthdayBot/Data/GuildSettings.vb b/BirthdayBot/Data/GuildSettings.vb index fd098f9..7dbd35c 100644 --- a/BirthdayBot/Data/GuildSettings.vb +++ b/BirthdayBot/Data/GuildSettings.vb @@ -130,7 +130,7 @@ Class GuildSettings Using db = Await _db.OpenConnectionAsync() Using c = db.CreateCommand() - c.CommandText = $"select * from {BackingTableBans}" + + c.CommandText = $"select * from {BackingTableBans} " + "where guild_id = @Gid and user_id = @Uid" c.Parameters.Add("@Gid", NpgsqlDbType.Bigint).Value = GuildId c.Parameters.Add("@Uid", NpgsqlDbType.Bigint).Value = userId @@ -214,6 +214,7 @@ Class GuildSettings "user_id bigint not null, " + "PRIMARY KEY (guild_id, user_id)" + ")" + c.ExecuteNonQuery() End Using End Sub diff --git a/BirthdayBot/UserInterface/HelpCommands.vb b/BirthdayBot/UserInterface/HelpCommands.vb index f5acb1f..cb6d903 100644 --- a/BirthdayBot/UserInterface/HelpCommands.vb +++ b/BirthdayBot/UserInterface/HelpCommands.vb @@ -6,11 +6,14 @@ Imports Discord.WebSocket Friend Class HelpCommands Inherits CommandsCommon - Private _helpEmbed As EmbedBuilder ' Lazily generated in the help command handler - Private _helpManagerInfo As EmbedFieldBuilder ' Same + Private ReadOnly _helpEmbed As Embed + Private ReadOnly _helpEmbedManager As Embed Sub New(inst As BirthdayBot, db As Configuration) MyBase.New(inst, db) + Dim embeds = CreateHelpEmbed() + _helpEmbed = embeds.Item1 + _helpEmbedManager = embeds.Item2 End Sub Public Overrides ReadOnly Property Commands As IEnumerable(Of (String, CommandHandler)) @@ -21,60 +24,77 @@ Friend Class HelpCommands End Get End Property + Private Function CreateHelpEmbed() As (EmbedBuilder, EmbedBuilder) + Dim title = "Help & About" + Dim description = "Birthday Bot: A utility to assist with acknowledging birthdays and other annual events." + vbLf + + "**Currently a work in progress. There will be bugs. Features may change or be removed.**" + Dim footer As New EmbedFooterBuilder With { + .Text = Discord.CurrentUser.Username, + .IconUrl = Discord.CurrentUser.GetAvatarUrl() + } + + Dim cpfx = $"●`{CommandPrefix}" + ' Normal section + Dim cmdField As New EmbedFieldBuilder With { + .Name = "Commands", + .Value = + $"{cpfx}help`, `{CommandPrefix}info`, `{CommandPrefix}tzdata`" + vbLf + + $" » Various help messages." + vbLf + + $"{cpfx}set (date) [zone]`" + vbLf + + $" » Registers your birth date, with optional time zone." + vbLf + + $" »» Examples: `{CommandPrefix}set jan-31 America/New_York`, `{CommandPrefix}set 15-aug Europe/Stockholm`." + vbLf + + $"{cpfx}set-tz (zone)`" + vbLf + + $" » Sets your local time zone. Only accepts certain values. See `{CommandPrefix}tzdata`." + vbLf + + $"{cpfx}remove`" + vbLf + + $" » Removes all your information from this bot." + } + + ' Manager section + Dim mpfx = cpfx + "config " + Dim managerField As New EmbedFieldBuilder With { + .Name = "Commands for server managers", + .Value = + $"{mpfx}role (role name or ID)`" + vbLf + + " » Specifies which role to apply to users having birthdays." + vbLf + + $"{mpfx}channel (channel name or ID)`" + vbLf + + " » Sets the birthday and event announcement channel. Leave blank to disable announcements." + vbLf + + $"{mpfx}set-tz (time zone name)`" + vbLf + + " » Sets the default time zone to use with all dates. Leave blank to revert to default." + vbLf + + $" » Only accepts certain values. See `{CommandPrefix}tzdata`." + vbLf + + $"{mpfx}ban/unban (user mention or ID)`" + vbLf + + " » Restricts or reallows access to this bot for the given user." + vbLf + + $"{mpfx}ban-all/unban-all`" + vbLf + + " » Restricts or reallows access to this bot for all users. Server managers are exempt." + vbLf + + $"{cpfx}override (user ID) (regular command)`" + vbLf + + " » Performs a command on behalf of the given user." + } + + Dim helpNoManager As New EmbedBuilder + With helpNoManager + .Footer = footer + .Title = title + .Description = description + .AddField(cmdField) + End With + + Dim helpManager As New EmbedBuilder + With helpManager + .Footer = footer + .Title = title + .Description = description + .AddField(cmdField) + .AddField(managerField) + End With + + Return (helpNoManager, helpManager) + End Function + Private Async Function CmdHelp(param As String(), reqChannel As SocketTextChannel, reqUser As SocketGuildUser) As Task Const FunctionMsg = "Attention server manager: A designated birthday role has not yet been set. " + "This bot requires the ability to be able to set and unset the specified role onto all users. " + "It cannot function without it." + vbLf + "To designate a birthday role, issue the command `{0}config role (role name/ID)`." - If _helpEmbed Is Nothing Then - Dim em As New EmbedBuilder - With em - .Footer = New EmbedFooterBuilder With { - .Text = Discord.CurrentUser.Username, - .IconUrl = Discord.CurrentUser.GetAvatarUrl() - } - .Title = "Help & About" - .Description = "Birthday Bot: A utility to assist with acknowledging birthdays and other annual events.\n" + - "**Currently a work in progress. There will be bugs. Features may change or be removed.**" - End With - Dim cpfx = $"●`{CommandPrefix}" - Dim cmdField As New EmbedFieldBuilder With { - .Name = "Commands", - .Value = - $"{cpfx}help`, `{CommandPrefix}info`, `{CommandPrefix}tzdata`" + vbLf + - $" » Various help messages." + vbLf + - $"{cpfx}set (date) [zone]`" + vbLf + - $" » Registers your birth date, with optional time zone." + vbLf + - $" »» Examples: `{CommandPrefix}set jan-31 America/New_York`, `{CommandPrefix}set 15-aug Europe/Stockholm`." + vbLf + - $"{cpfx}set-tz (zone)`" + vbLf + - $" » Sets your local time zone. Only accepts certain values. See `{CommandPrefix}tzdata`." + vbLf + - $"{cpfx}remove`" + vbLf + - $" » Removes all your information from this bot." - } - em.AddField(cmdField) - _helpEmbed = em - - Dim mpfx = cpfx + "config " - _helpManagerInfo = New EmbedFieldBuilder With { - .Name = "Commands for server managers", - .Value = - $"{mpfx}role (role name or ID)`" + vbLf + - " » Specifies which role to apply to users having birthdays." + vbLf + - $"{mpfx}channel (channel name or ID)`" + vbLf + - " » Sets the birthday and event announcement channel. Leave blank to disable announcements." + vbLf + - $"{mpfx}set-tz (time zone name)`" + vbLf + - " » Sets the default time zone to use with all dates. Leave blank to revert to default." + vbLf + - $" » Only accepts certain values. See `{CommandPrefix}tzdata`." + vbLf + - $"{mpfx}ban/unban (user mention or ID)`" + vbLf + - " » Restricts or reallows access to this bot for the given user." + vbLf + - $"{mpfx}ban-all/unban-all`" + vbLf + - " » Restricts or reallows access to this bot for all users. Server managers are exempt." + vbLf + - $"{cpfx}override (user ID) (regular command)`" + vbLf + - " » Performs a command on behalf of the given user." - } - End If - ' Determine if an additional message about an invalid role should be added. Dim useFunctionMessage = False Dim gs As GuildSettings @@ -89,6 +109,6 @@ Friend Class HelpCommands Dim showManagerCommands = reqUser.GuildPermissions.ManageGuild Await reqChannel.SendMessageAsync(If(useFunctionMessage, String.Format(FunctionMsg, CommandPrefix), ""), - embed:=If(showManagerCommands, _helpEmbed.AddField(_helpManagerInfo), _helpEmbed)) + embed:=If(showManagerCommands, _helpEmbedManager, _helpEmbed)) End Function End Class