Update to D#+ 4.0.0-rc1
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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 :(
|
||||
|
||||
|
Reference in New Issue
Block a user