Reduce amount of automatic processing

These changes make the bot skip over needlessly collecting information
for guilds in which it is unnecessary, in most cases guilds that have
invited the bot but have not yet invoked any bot command.
This commit is contained in:
Noi 2020-07-22 19:43:45 -07:00
parent 73fae41ac9
commit 8f84b09b21
4 changed files with 14 additions and 6 deletions

View file

@ -40,6 +40,7 @@ namespace BirthdayBot.BackgroundServices
{
Log($"{exs.InnerExceptions.Count} exception(s) during bulk processing!");
// TODO needs major improvements. output to file?
foreach (var iex in exs.InnerExceptions) Log(iex.Message);
}
else
{
@ -66,7 +67,9 @@ namespace BirthdayBot.BackgroundServices
{
var diag = new PGDiagnostic();
var gc = await GuildConfiguration.LoadAsync(guild.Id);
// Load guild information - stop if there is none (bot never previously used in guild)
var gc = await GuildConfiguration.LoadAsync(guild.Id, true);
if (gc == null) return diag;
// Check if role settings are correct before continuing with further processing
SocketRole role = null;
@ -75,6 +78,7 @@ namespace BirthdayBot.BackgroundServices
if (diag.RoleCheck != null) return diag;
// Determine who's currently having a birthday
await guild.DownloadUsersAsync();
var users = await GuildUserConfiguration.LoadAllAsync(guild.Id);
var tz = gc.TimeZone;
var birthdays = GetGuildCurrentBirthdays(users, tz);

View file

@ -117,7 +117,7 @@ namespace BirthdayBot
if (!_dispatchCommands.TryGetValue(csplit[0].Substring(CommandPrefix.Length), out CommandHandler command)) return;
// Load guild information here
var gconf = await GuildConfiguration.LoadAsync(channel.Guild.Id);
var gconf = await GuildConfiguration.LoadAsync(channel.Guild.Id, false);
// Ban check
if (!gconf.IsBotModerator(author)) // skip check if user is a moderator

View file

@ -173,7 +173,11 @@ namespace BirthdayBot.Data
/// <summary>
/// Fetches guild settings from the database. If no corresponding entry exists, it will be created.
/// </summary>
public static async Task<GuildConfiguration> LoadAsync(ulong guildId)
/// <param name="nullIfUnknown">
/// If true, this method shall not create a new entry and will return null if the guild does
/// not exist in the database.
/// </param>
public static async Task<GuildConfiguration> LoadAsync(ulong guildId, bool nullIfUnknown)
{
using (var db = await Database.OpenConnectionAsync())
{
@ -188,6 +192,7 @@ namespace BirthdayBot.Data
using var r = await c.ExecuteReaderAsync();
if (await r.ReadAsync()) return new GuildConfiguration(r);
}
if (nullIfUnknown) return null;
// If we got here, no row exists. Create it with default values.
using (var c = db.CreateCommand())
@ -199,7 +204,7 @@ namespace BirthdayBot.Data
}
}
// With a new row created, try this again
return await LoadAsync(guildId);
return await LoadAsync(guildId, nullIfUnknown);
}
/// <summary>

View file

@ -21,8 +21,7 @@ namespace BirthdayBot
var dc = new DiscordSocketConfig()
{
AlwaysDownloadUsers = true,
DefaultRetryMode = Discord.RetryMode.RetryRatelimit,
DefaultRetryMode = RetryMode.RetryRatelimit,
MessageCacheSize = 0,
TotalShards = cfg.ShardCount,
ExclusiveBulkDelete = true