Update to D#+ 4.0.0-rc1

This commit is contained in:
Ske
2020-11-15 13:53:31 +01:00
parent 90b2fcfdd4
commit 634173e205
14 changed files with 73 additions and 87 deletions

View File

@@ -1,5 +1,6 @@
using System.Threading.Tasks;
using DSharpPlus;
using DSharpPlus.Entities;
using DSharpPlus.EventArgs;
@@ -7,7 +8,7 @@ namespace PluralKit.Bot
{
public interface IEventHandler<in T> where T: DiscordEventArgs
{
Task Handle(T evt);
Task Handle(DiscordClient shard, T evt);
DiscordChannel ErrorChannelFor(T evt) => null;
}

View File

@@ -48,7 +48,7 @@ namespace PluralKit.Bot
// We consider a message duplicate if it has the same ID as the previous message that hit the gateway
_lastMessageCache.GetLastMessage(evt.ChannelId) == evt.Id;
public async Task Handle(MessageCreateEventArgs evt)
public async Task Handle(DiscordClient shard, MessageCreateEventArgs evt)
{
if (evt.Author?.Id == _client.CurrentUser?.Id) return;
if (evt.Message.MessageType != MessageType.Default) return;
@@ -71,7 +71,7 @@ namespace PluralKit.Bot
// Only do command/proxy handling if it's a user account
if (evt.Message.Author.IsBot || evt.Message.WebhookMessage || evt.Message.Author.IsSystem == true)
return;
if (await TryHandleCommand(evt, ctx))
if (await TryHandleCommand(shard, evt, ctx))
return;
await TryHandleProxy(evt, ctx);
}
@@ -85,7 +85,7 @@ namespace PluralKit.Bot
return true;
}
private async ValueTask<bool> TryHandleCommand(MessageCreateEventArgs evt, MessageContext ctx)
private async ValueTask<bool> TryHandleCommand(DiscordClient shard, MessageCreateEventArgs evt, MessageContext ctx)
{
var content = evt.Message.Content;
if (content == null) return false;
@@ -102,7 +102,7 @@ namespace PluralKit.Bot
try
{
var system = ctx.SystemId != null ? await _db.Execute(c => _repo.GetSystem(c, ctx.SystemId.Value)) : null;
await _tree.ExecuteCommand(new Context(_services, evt.Client, evt.Message, cmdStart, system, ctx));
await _tree.ExecuteCommand(new Context(_services, shard, evt.Message, cmdStart, system, ctx));
}
catch (PKError)
{

View File

@@ -1,6 +1,7 @@
using System.Linq;
using System.Threading.Tasks;
using DSharpPlus;
using DSharpPlus.EventArgs;
using PluralKit.Core;
@@ -23,14 +24,14 @@ namespace PluralKit.Bot
_logger = logger.ForContext<MessageDeleted>();
}
public async Task Handle(MessageDeleteEventArgs evt)
public async Task Handle(DiscordClient shard, MessageDeleteEventArgs evt)
{
// Delete deleted webhook messages from the data store
// Most of the data in the given message is wrong/missing, so always delete just to be sure.
await _db.Execute(c => _repo.DeleteMessage(c, evt.Message.Id));
}
public async Task Handle(MessageBulkDeleteEventArgs evt)
public async Task Handle(DiscordClient shard, MessageBulkDeleteEventArgs evt)
{
// Same as above, but bulk
_logger.Information("Bulk deleting {Count} messages in channel {Channel}", evt.Messages.Count, evt.Channel.Id);

View File

@@ -29,7 +29,7 @@ namespace PluralKit.Bot
_client = client;
}
public async Task Handle(MessageUpdateEventArgs evt)
public async Task Handle(DiscordClient shard, MessageUpdateEventArgs evt)
{
if (evt.Author?.Id == _client.CurrentUser?.Id) return;

View File

@@ -1,4 +1,3 @@
using System;
using System.Threading.Tasks;
using DSharpPlus;
@@ -29,18 +28,18 @@ namespace PluralKit.Bot
_logger = logger.ForContext<ReactionAdded>();
}
public async Task Handle(MessageReactionAddEventArgs evt)
public async Task Handle(DiscordClient shard, MessageReactionAddEventArgs evt)
{
await TryHandleProxyMessageReactions(evt);
await TryHandleProxyMessageReactions(shard, evt);
}
private async ValueTask TryHandleProxyMessageReactions(MessageReactionAddEventArgs evt)
private async ValueTask TryHandleProxyMessageReactions(DiscordClient shard, MessageReactionAddEventArgs evt)
{
// Sometimes we get events from users that aren't in the user cache
// In that case we get a "broken" user object (where eg. calling IsBot throws an exception)
// We just ignore all of those for now, should be quite rare...
if (!evt.Client.TryGetCachedUser(evt.User.Id, out _)) return;
if (!shard.TryGetCachedUser(evt.User.Id, out _)) return;
// check if it's a command message first
// since this can happen in DMs as well
@@ -79,7 +78,7 @@ namespace PluralKit.Bot
await using var conn = await _db.Obtain();
var msg = await _repo.GetMessage(conn, evt.Message.Id);
if (msg != null)
await HandleQueryReaction(evt, msg);
await HandleQueryReaction(shard, evt, msg);
break;
}
@@ -139,14 +138,14 @@ namespace PluralKit.Bot
// No need to delete database row here, it'll get deleted by the once-per-minute scheduled task.
}
private async ValueTask HandleQueryReaction(MessageReactionAddEventArgs evt, FullMessage msg)
private async ValueTask HandleQueryReaction(DiscordClient shard, MessageReactionAddEventArgs evt, FullMessage msg)
{
// Try to DM the user info about the message
var member = await evt.Guild.GetMember(evt.User.Id);
try
{
await member.SendMessageAsync(embed: await _embeds.CreateMemberEmbed(msg.System, msg.Member, evt.Guild, LookupContext.ByNonOwner));
await member.SendMessageAsync(embed: await _embeds.CreateMessageInfoEmbed(evt.Client, msg));
await member.SendMessageAsync(embed: await _embeds.CreateMessageInfoEmbed(shard, msg));
}
catch (UnauthorizedException) { } // No permissions to DM, can't check for this :(