diff --git a/PluralKit.Bot/CommandSystem/Context.cs b/PluralKit.Bot/CommandSystem/Context.cs index 0469deba..f42b1163 100644 --- a/PluralKit.Bot/CommandSystem/Context.cs +++ b/PluralKit.Bot/CommandSystem/Context.cs @@ -230,6 +230,8 @@ namespace PluralKit.Bot.CommandSystem public GuildPermissions GetGuildPermissions(IUser user) { + if (user is IGuildUser gu) + return gu.GuildPermissions; if (Channel is SocketGuildChannel gc) return gc.GetUser(user.Id).GuildPermissions; return GuildPermissions.None; @@ -237,6 +239,8 @@ namespace PluralKit.Bot.CommandSystem public ChannelPermissions GetChannelPermissions(IUser user) { + if (user is IGuildUser gu && Channel is IGuildChannel igc) + return gu.GetPermissions(igc); if (Channel is SocketGuildChannel gc) return gc.GetUser(user.Id).GetPermissions(gc); return ChannelPermissions.DM; diff --git a/PluralKit.Bot/Commands/CommandTree.cs b/PluralKit.Bot/Commands/CommandTree.cs index 8ff7c6a2..284c81f9 100644 --- a/PluralKit.Bot/Commands/CommandTree.cs +++ b/PluralKit.Bot/Commands/CommandTree.cs @@ -1,7 +1,7 @@ using System.Linq; using System.Threading.Tasks; -using Discord; +using Discord.WebSocket; using PluralKit.Bot.CommandSystem; @@ -73,9 +73,9 @@ namespace PluralKit.Bot.Commands public static Command[] LogCommands = {LogChannel, LogEnable, LogDisable}; - private IDiscordClient _client; + private DiscordShardedClient _client; - public CommandTree(IDiscordClient client) + public CommandTree(DiscordShardedClient client) { _client = client; } @@ -335,7 +335,7 @@ namespace PluralKit.Bot.Commands { // Try to resolve the user ID to find the associated account, // so we can print their username. - var user = await _client.GetUserAsync(id); + var user = await _client.Rest.GetUserAsync(id); // Print descriptive errors based on whether we found the user or not. if (user == null) diff --git a/PluralKit.Bot/Modules.cs b/PluralKit.Bot/Modules.cs index e73ef05e..7b80d5e0 100644 --- a/PluralKit.Bot/Modules.cs +++ b/PluralKit.Bot/Modules.cs @@ -27,6 +27,7 @@ namespace PluralKit.Bot ConnectionTimeout = 2 * 60 * 1000, ExclusiveBulkDelete = true, LargeThreshold = 50, + GuildSubscriptions = false, DefaultRetryMode = RetryMode.RetryTimeouts | RetryMode.RetryRatelimit // Commented this out since Debug actually sends, uh, quite a lot that's not necessary in production // but leaving it here in case I (or someone else) get[s] confused about why logging isn't working again :p diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index be914cf2..0a7b7544 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -12,9 +12,9 @@ namespace PluralKit.Bot { public class EmbedService { private IDataStore _data; - private IDiscordClient _client; + private DiscordShardedClient _client; - public EmbedService(IDiscordClient client, IDataStore data) + public EmbedService(DiscordShardedClient client, IDataStore data) { _client = client; _data = data; @@ -24,7 +24,7 @@ namespace PluralKit.Bot { var accounts = await _data.GetSystemAccounts(system); // Fetch/render info for all accounts simultaneously - var users = await Task.WhenAll(accounts.Select(async uid => (await _client.GetUserAsync(uid))?.NameAndMention() ?? $"(deleted account {uid})")); + var users = await Task.WhenAll(accounts.Select(async uid => (await _client.Rest.GetUserAsync(uid))?.NameAndMention() ?? $"(deleted account {uid})")); var memberCount = await _data.GetSystemMemberCount(system, false); var eb = new EmbedBuilder() @@ -126,7 +126,7 @@ namespace PluralKit.Bot { public async Task CreateMessageInfoEmbed(FullMessage msg) { - var channel = await _client.GetChannelAsync(msg.Message.Channel) as ITextChannel; + var channel = _client.GetChannel(msg.Message.Channel) as ITextChannel; var serverMsg = channel != null ? await channel.GetMessageAsync(msg.Message.Mid) : null; var memberStr = $"{msg.Member.Name} (`{msg.Member.Hid}`)"; @@ -139,7 +139,7 @@ namespace PluralKit.Bot { // Look up the user with the REST client // this ensures we'll still get the information even if the user's not cached, // even if this means an extra API request (meh, it'll be fine) - var shard = ((DiscordShardedClient) _client).GetShardFor(channel.Guild); + var shard = _client.GetShardFor(channel.Guild); var guildUser = await shard.Rest.GetGuildUserAsync(channel.Guild.Id, msg.Message.Sender); if (guildUser != null) { diff --git a/PluralKit.Bot/Services/ProxyService.cs b/PluralKit.Bot/Services/ProxyService.cs index 1fea6cbb..69221801 100644 --- a/PluralKit.Bot/Services/ProxyService.cs +++ b/PluralKit.Bot/Services/ProxyService.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Dapper; - using Discord; using Discord.Net; using Discord.WebSocket; @@ -26,24 +24,20 @@ namespace PluralKit.Bot } class ProxyService { - private IDiscordClient _client; + private DiscordShardedClient _client; private LogChannelService _logChannel; private IDataStore _data; - private DbConnectionFactory _conn; private EmbedService _embeds; private ILogger _logger; private WebhookExecutorService _webhookExecutor; - private ProxyCache _cache; - public ProxyService(IDiscordClient client, LogChannelService logChannel, IDataStore data, EmbedService embeds, ILogger logger, WebhookExecutorService webhookExecutor, DbConnectionFactory conn, ProxyCache cache) + public ProxyService(DiscordShardedClient client, LogChannelService logChannel, IDataStore data, EmbedService embeds, ILogger logger, WebhookExecutorService webhookExecutor) { _client = client; _logChannel = logChannel; _data = data; _embeds = embeds; _webhookExecutor = webhookExecutor; - _conn = conn; - _cache = cache; _logger = logger.ForContext(); } @@ -284,7 +278,7 @@ namespace PluralKit.Bot await channel.SendMessageAsync($"Psst, **{msg.Member.DisplayName ?? msg.Member.Name}** (<@{msg.Message.Sender}>), you have been pinged by <@{userWhoReacted}>.", embed: embed.Build()); // Finally remove the original reaction (if we can) - var user = await _client.GetUserAsync(userWhoReacted); + var user = await _client.Rest.GetUserAsync(userWhoReacted); if (user != null && await realMessage.Channel.HasPermission(ChannelPermission.ManageMessages)) await realMessage.RemoveReactionAsync(reactedEmote, user); } @@ -292,7 +286,7 @@ namespace PluralKit.Bot private async Task HandleMessageQueryByReaction(Cacheable message, ulong userWhoReacted, IEmote reactedEmote) { // Find the user who sent the reaction, so we can DM them - var user = await _client.GetUserAsync(userWhoReacted); + var user = await _client.Rest.GetUserAsync(userWhoReacted); if (user == null) return; // Find the message in the DB