Skip to content

Commit

Permalink
Update DSharpPlus version, using new async listeners that don't requi…
Browse files Browse the repository at this point in the history
…re offloading
  • Loading branch information
Naamloos committed Mar 19, 2023
1 parent 509169f commit 653d013
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 96 deletions.
39 changes: 17 additions & 22 deletions ModCore/Commands/Interactive.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,32 +39,27 @@ public async Task PollAsync(InteractionContext ctx)

List<DiscordUser> members = new List<DiscordUser>();

Task collectorTask(DiscordClient sender, DSharpPlus.EventArgs.ComponentInteractionCreateEventArgs e)
async Task collectorTask(DiscordClient sender, DSharpPlus.EventArgs.ComponentInteractionCreateEventArgs e)
{
_ = Task.Run(async () =>
if(e.Message.Id == giveaway.Id && e.User.Id != ctx.User.Id)
{
if(e.Message.Id == giveaway.Id && e.User.Id != ctx.User.Id)
if(e.Interaction.Data.CustomId == "join" && !members.Any(x => x.Id == e.User.Id))
{
if(e.Interaction.Data.CustomId == "join" && !members.Any(x => x.Id == e.User.Id))
{
members.Add(e.User);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ You joined the raffle!").AsEphemeral());
}
else if(e.Interaction.Data.CustomId == "leave")
{
members.RemoveAll(x => x.Id == e.User.Id);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ You left the raffle.").AsEphemeral());
}
else
{
await e.Interaction.CreateResponseAsync(InteractionResponseType.Pong);
}
members.Add(e.User);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ You joined the raffle!").AsEphemeral());
}
});

return Task.CompletedTask;
else if(e.Interaction.Data.CustomId == "leave")
{
members.RemoveAll(x => x.Id == e.User.Id);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ You left the raffle.").AsEphemeral());
}
else
{
await e.Interaction.CreateResponseAsync(InteractionResponseType.Pong);
}
}
}

ctx.Client.ComponentInteractionCreated += collectorTask;
Expand Down
43 changes: 20 additions & 23 deletions ModCore/Extensions/Attributes/AsyncListenerAttribute.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using DSharpPlus;
using Emzi0767.Utilities;
using DSharpPlus.AsyncEvents;
using Microsoft.Extensions.Logging;
using ModCore.Extensions.Enums;
using System;
Expand All @@ -21,32 +21,29 @@ public AsyncListenerAttribute(EventType target)

public void Register(DiscordClient client, MethodInfo listener, IServiceProvider services)
{
Task onEvent(DiscordClient client, object e)
async Task onEvent(DiscordClient client, object e)
{
_ = Task.Run(async () =>
{
try
{
List<object> parameters = new List<object>();
foreach (var param in listener.GetParameters())
{
if (param.ParameterType == typeof(DiscordClient))
parameters.Add(client);
else if (param.ParameterType.IsAssignableTo(typeof(AsyncEventArgs)))
parameters.Add(e);
else
parameters.Add(services.GetService(param.ParameterType));
}

await (Task)listener.Invoke(null, parameters.ToArray());
}
catch (Exception ex)
try
{
List<object> parameters = new List<object>();
foreach (var param in listener.GetParameters())
{
client.Logger.LogError($"Uncaught error in event handler thread: {ex}");
client.Logger.LogError(ex.StackTrace);
if (param.ParameterType == typeof(DiscordClient))
parameters.Add(client);
else if (param.ParameterType.IsAssignableTo(typeof(AsyncEventArgs)))
parameters.Add(e);
else
parameters.Add(services.GetService(param.ParameterType));
}
});
return Task.CompletedTask;

await (Task)listener.Invoke(null, parameters.ToArray());
}
catch (Exception ex)
{
client.Logger.LogError($"Uncaught error in event handler thread: {ex}");
client.Logger.LogError(ex.StackTrace);
}
};

#region Registering correct events
Expand Down
12 changes: 2 additions & 10 deletions ModCore/Extensions/InteractionExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,7 @@ private void setupComponents(DiscordClient client)
registerComponentHandler(handler);
}

client.ComponentInteractionCreated += (sender, e) =>
{
_ = Task.Run(async () => await handleComponentAsync(sender, e));
return Task.CompletedTask;
};
client.ComponentInteractionCreated += handleComponentAsync;
}

private void registerComponentHandler(Type type)
Expand Down Expand Up @@ -116,11 +112,7 @@ private void setupModals(DiscordClient client)
registerModalHandler(handler);
}

client.ModalSubmitted += (sender, e) =>
{
_ = Task.Run(async () => await handleModalSubmission(sender, e));
return Task.CompletedTask;
};
client.ModalSubmitted += handleModalSubmission;
}

private ModalHandler registerModalHandler(Type type)
Expand Down
20 changes: 10 additions & 10 deletions ModCore/ModCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,23 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Chronic-netstandard" Version="0.3.2.4" />
<PackageReference Include="DSharpPlus" Version="4.4.0-nightly-01393" />
<PackageReference Include="DSharpPlus.CommandsNext" Version="4.4.0-nightly-01393" />
<PackageReference Include="DSharpPlus.Interactivity" Version="4.4.0-nightly-01393" />
<PackageReference Include="DSharpPlus.Rest" Version="4.4.0-nightly-01393" />
<PackageReference Include="DSharpPlus.SlashCommands" Version="4.4.0-nightly-01393" />
<PackageReference Include="DSharpPlus" Version="4.4.0-nightly-01429" />
<PackageReference Include="DSharpPlus.CommandsNext" Version="4.4.0-nightly-01429" />
<PackageReference Include="DSharpPlus.Interactivity" Version="4.4.0-nightly-01429" />
<PackageReference Include="DSharpPlus.Rest" Version="4.4.0-nightly-01429" />
<PackageReference Include="DSharpPlus.SlashCommands" Version="4.4.0-nightly-01429" />
<PackageReference Include="F23.StringSimilarity" Version="5.1.0" />
<PackageReference Include="Humanizer.Core" Version="2.14.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.4" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting" Version="4.5.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.3">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.4" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
Expand Down
57 changes: 26 additions & 31 deletions ModCore/Modals/PollModal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,42 +87,37 @@ await interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWith
var msg = await interaction.Channel.SendMessageAsync(message);

// Temporary event handler for this specific poll.
Task handlePoll(DiscordClient sender, ComponentInteractionCreateEventArgs e)
async Task handlePoll(DiscordClient sender, ComponentInteractionCreateEventArgs e)
{
_ = Task.Run(async () =>
// check message ID is correct
if (e.Message.Id == msg.Id)
{
// check message ID is correct
if (e.Message.Id == msg.Id)
if (e.Interaction.Data.CustomId == "x")
{
if (e.Interaction.Data.CustomId == "x")
{
responses.Remove(e.User.Id);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ Cleared your poll response (if any).").AsEphemeral());
return;
}
if (!int.TryParse(e.Interaction.Data.CustomId, out var index))
{
return;
}
if (responses.Any(x => x.Key == e.User.Id))
{
responses[e.User.Id] = index;
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent($"✅ Updated your poll vote to `{splitOptions[index]}`.").AsEphemeral());
}
else
{
responses.Add(e.User.Id, index);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent($"✅ Set your poll vote to `{splitOptions[index]}`.").AsEphemeral());
}
responses.Remove(e.User.Id);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent("✅ Cleared your poll response (if any).").AsEphemeral());
return;
}
});

return Task.CompletedTask;
if (!int.TryParse(e.Interaction.Data.CustomId, out var index))
{
return;
}

if (responses.Any(x => x.Key == e.User.Id))
{
responses[e.User.Id] = index;
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent($"✅ Updated your poll vote to `{splitOptions[index]}`.").AsEphemeral());
}
else
{
responses.Add(e.User.Id, index);
await e.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder()
.WithContent($"✅ Set your poll vote to `{splitOptions[index]}`.").AsEphemeral());
}
}
}

client.ComponentInteractionCreated += handlePoll;
Expand Down

0 comments on commit 653d013

Please sign in to comment.