From b14af1c00866f8453d895e4f9521db2c6150a211 Mon Sep 17 00:00:00 2001 From: Armano den Boef <68127614+Rozen4334@users.noreply.github.com> Date: Thu, 27 Jan 2022 14:50:49 +0100 Subject: [PATCH] Adding Entity guides, flowcharts, better sample system. (#2054) * initial * Interaction glossary entry * Sharded Interaction sample * Renames into solution * Debugging samples * Modify target location for webhookclient * Finalizing docs work, resolving docfx errors. * Adding threaduser to user chart * Add branch info to readme. * Edits to user chart * Resolve format for glossary entries * Patch sln target * Issue with file naming fixed * Patch 1/x for builds * Appending suggestions --- Discord.Net.sln | 227 +++++++++++---------- README.md | 19 ++ docs/faq/basics/basic-operations.md | 2 +- docs/faq/misc/legacy.md | 2 +- docs/faq/toc.yml | 2 - docs/guides/entities/casting.md | 68 ++++++ docs/{faq/misc => guides/entities}/glossary.md | 78 ++++--- docs/guides/entities/images/IChannel.png | Bin 0 -> 59573 bytes docs/guides/entities/images/IInteraction.png | Bin 0 -> 37766 bytes docs/guides/entities/images/IMessage.png | Bin 0 -> 36939 bytes docs/guides/entities/images/IUser.png | Bin 0 -> 63210 bytes .../entities.md => entities/introduction.md} | 60 ++++-- docs/guides/entities/samples/casting.cs | 7 + docs/guides/entities/samples/restentities.cs | 8 + docs/guides/entities/samples/safety-cast-pass.cs | 10 + docs/guides/entities/samples/safety-cast-var.cs | 9 + docs/guides/entities/samples/safety-cast.cs | 8 + .../samples/socketentities.cs} | 0 docs/guides/entities/samples/unboxing.cs | 9 + docs/guides/toc.yml | 10 +- samples/01_basic_ping_bot/Program.cs | 77 ------- samples/04_interactions_framework/ExampleEnum.cs | 16 -- samples/BasicBot/Program.cs | 112 ++++++++++ .../_BasicBot.csproj} | 0 .../Attributes/DoUserCheckAttribute.cs | 37 ++++ .../Attributes}/RequireOwnerAttribute.cs | 2 +- .../CommandHandler.cs | 14 +- samples/InteractionFramework/ExampleEnum.cs | 10 + .../Modules/ComponentModule.cs | 18 ++ .../Modules/GeneralModule.cs} | 13 +- .../Modules/MessageCommandModule.cs | 30 +++ .../Modules/SlashCommandModule.cs | 51 +++++ .../Modules/UserCommandModule.cs | 17 ++ .../Program.cs | 10 +- .../_InteractionFramework.csproj} | 2 +- samples/ShardedClient/Modules/InteractionModule.cs | 18 ++ .../Modules/PublicModule.cs | 4 +- .../Program.cs | 24 ++- .../Services/CommandHandlingService.cs | 14 +- .../Services/InteractionHandlingService.cs | 57 ++++++ .../_ShardedClient.csproj} | 3 +- .../Modules/PublicModule.cs | 8 +- .../Program.cs | 12 +- .../Services/CommandHandlingService.cs | 21 +- .../Services/PictureService.cs | 2 +- .../_TextCommandFramework.csproj} | 1 + .../Program.cs | 2 +- .../_WebhookClient.csproj} | 4 +- samples/_idn/Inspector.cs | 74 +++++++ samples/_idn/Program.cs | 152 ++++++++++++++ samples/_idn/idn.csproj | 16 ++ samples/_idn/logview.ps1 | 1 + samples/idn/Program.cs | 16 +- .../Entities/Channels/IGuildChannel.Examples.cs | 14 +- .../Entities/Channels/IMessageChannel.Examples.cs | 9 +- .../Core/Entities/Users/IUser.Examples.cs | 2 +- .../WebSocket/BaseSocketClient.Events.Examples.cs | 15 +- 57 files changed, 1056 insertions(+), 341 deletions(-) create mode 100644 docs/guides/entities/casting.md rename docs/{faq/misc => guides/entities}/glossary.md (58%) create mode 100644 docs/guides/entities/images/IChannel.png create mode 100644 docs/guides/entities/images/IInteraction.png create mode 100644 docs/guides/entities/images/IMessage.png create mode 100644 docs/guides/entities/images/IUser.png rename docs/guides/{concepts/entities.md => entities/introduction.md} (60%) create mode 100644 docs/guides/entities/samples/casting.cs create mode 100644 docs/guides/entities/samples/restentities.cs create mode 100644 docs/guides/entities/samples/safety-cast-pass.cs create mode 100644 docs/guides/entities/samples/safety-cast-var.cs create mode 100644 docs/guides/entities/samples/safety-cast.cs rename docs/guides/{concepts/samples/entities.cs => entities/samples/socketentities.cs} (100%) create mode 100644 docs/guides/entities/samples/unboxing.cs delete mode 100644 samples/01_basic_ping_bot/Program.cs delete mode 100644 samples/04_interactions_framework/ExampleEnum.cs create mode 100644 samples/BasicBot/Program.cs rename samples/{01_basic_ping_bot/01_basic_ping_bot.csproj => BasicBot/_BasicBot.csproj} (100%) create mode 100644 samples/InteractionFramework/Attributes/DoUserCheckAttribute.cs rename samples/{04_interactions_framework => InteractionFramework/Attributes}/RequireOwnerAttribute.cs (96%) rename samples/{04_interactions_framework => InteractionFramework}/CommandHandler.cs (95%) create mode 100644 samples/InteractionFramework/ExampleEnum.cs create mode 100644 samples/InteractionFramework/Modules/ComponentModule.cs rename samples/{04_interactions_framework/Modules/UtilityModule.cs => InteractionFramework/Modules/GeneralModule.cs} (93%) create mode 100644 samples/InteractionFramework/Modules/MessageCommandModule.cs create mode 100644 samples/InteractionFramework/Modules/SlashCommandModule.cs create mode 100644 samples/InteractionFramework/Modules/UserCommandModule.cs rename samples/{04_interactions_framework => InteractionFramework}/Program.cs (96%) rename samples/{04_interactions_framework/04_interactions_framework.csproj => InteractionFramework/_InteractionFramework.csproj} (94%) create mode 100644 samples/ShardedClient/Modules/InteractionModule.cs rename samples/{03_sharded_client => ShardedClient}/Modules/PublicModule.cs (93%) rename samples/{03_sharded_client => ShardedClient}/Program.cs (83%) rename samples/{03_sharded_client => ShardedClient}/Services/CommandHandlingService.cs (95%) create mode 100644 samples/ShardedClient/Services/InteractionHandlingService.cs rename samples/{03_sharded_client/03_sharded_client.csproj => ShardedClient/_ShardedClient.csproj} (76%) rename samples/{02_commands_framework => TextCommandFramework}/Modules/PublicModule.cs (96%) rename samples/{02_commands_framework => TextCommandFramework}/Program.cs (97%) rename samples/{02_commands_framework => TextCommandFramework}/Services/CommandHandlingService.cs (92%) rename samples/{02_commands_framework => TextCommandFramework}/Services/PictureService.cs (91%) rename samples/{02_commands_framework/02_commands_framework.csproj => TextCommandFramework/_TextCommandFramework.csproj} (90%) rename samples/{04_webhook_client => WebhookClient}/Program.cs (97%) rename samples/{04_webhook_client/04_webhook_client.csproj => WebhookClient/_WebhookClient.csproj} (69%) create mode 100644 samples/_idn/Inspector.cs create mode 100644 samples/_idn/Program.cs create mode 100644 samples/_idn/idn.csproj create mode 100644 samples/_idn/logview.ps1 diff --git a/Discord.Net.sln b/Discord.Net.sln index c22d91e27..fc68eb71c 100644 --- a/Discord.Net.sln +++ b/Discord.Net.sln @@ -4,43 +4,45 @@ VisualStudioVersion = 17.1.31903.286 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Core", "src\Discord.Net.Core\Discord.Net.Core.csproj", "{91E9E7BD-75C9-4E98-84AA-2C271922E5C2}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impls", "Impls", "{288C363D-A636-4EAE-9AC1-4698B641B26E}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Rest", "src\Discord.Net.Rest\Discord.Net.Rest.csproj", "{BFC6DC28-0351-4573-926A-D4124244C04F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Commands", "src\Discord.Net.Commands\Discord.Net.Commands.csproj", "{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.WebSocket", "src\Discord.Net.WebSocket\Discord.Net.WebSocket.csproj", "{688FD1D8-7F01-4539-B2E9-F473C5D699C7}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Webhook", "src\Discord.Net.Webhook\Discord.Net.Webhook.csproj", "{9AFAB80E-D2D3-4EDB-B58C-BACA78D1EA30}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BB59D5B5-E7B0-4BF4-8F82-D14431B2799B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Examples", "src\Discord.Net.Examples\Discord.Net.Examples.csproj", "{47820065-3CFB-401C-ACEA-862BD564A404}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "01_basic_ping_bot", "samples\01_basic_ping_bot\01_basic_ping_bot.csproj", "{F2FF84FB-F6AD-47E5-9EE5-18206CAE136E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Interactions", "src\Discord.Net.Interactions\Discord.Net.Interactions.csproj", "{137DB209-B357-4EE8-A6EE-4B6127F6DEE9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "02_commands_framework", "samples\02_commands_framework\02_commands_framework.csproj", "{4E1F1F40-B1DD-40C9-A4B1-A2046A4C9C76}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers", "src\Discord.Net.Analyzers\Discord.Net.Analyzers.csproj", "{24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "03_sharded_client", "samples\03_sharded_client\03_sharded_client.csproj", "{9B4C4AFB-3D15-44C6-9E36-12ED625AAA26}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers.Tests", "test\Discord.Net.Analyzers.Tests\Discord.Net.Analyzers.Tests.csproj", "{FC67057C-E92F-4E1C-98BE-46F839C8AD71}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Tests.Unit", "test\Discord.Net.Tests.Unit\Discord.Net.Tests.Unit.csproj", "{DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Tests.Integration", "test\Discord.Net.Tests.Integration\Discord.Net.Tests.Integration.csproj", "{E169E15A-E82C-45BF-8C24-C2CADB7093AA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C7CF5621-7D36-433B-B337-5A2E3C101A71}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_BasicBot", "samples\BasicBot\_BasicBot.csproj", "{F2FF84FB-F6AD-47E5-9EE5-18206CAE136E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers.Tests", "test\Discord.Net.Analyzers.Tests\Discord.Net.Analyzers.Tests.csproj", "{FC67057C-E92F-4E1C-98BE-46F839C8AD71}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_TextCommandFramework", "samples\TextCommandFramework\_TextCommandFramework.csproj", "{4E1F1F40-B1DD-40C9-A4B1-A2046A4C9C76}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Examples", "src\Discord.Net.Examples\Discord.Net.Examples.csproj", "{47820065-3CFB-401C-ACEA-862BD564A404}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_ShardedClient", "samples\ShardedClient\_ShardedClient.csproj", "{9B4C4AFB-3D15-44C6-9E36-12ED625AAA26}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "idn", "samples\idn\idn.csproj", "{4A03840B-9EBE-47E3-89AB-E0914DF21AFB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_InteractionFramework", "samples\InteractionFramework\_InteractionFramework.csproj", "{A23E46D2-1610-4AE5-820F-422D34810887}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Interactions", "src\Discord.Net.Interactions\Discord.Net.Interactions.csproj", "{137DB209-B357-4EE8-A6EE-4B6127F6DEE9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_WebhookClient", "samples\WebhookClient\_WebhookClient.csproj", "{B61AAE66-15CC-40E4-873A-C23E697C3411}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04_interactions_framework", "samples\04_interactions_framework\04_interactions_framework.csproj", "{A23E46D2-1610-4AE5-820F-422D34810887}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IDN", "samples\idn\idn.csproj", "{4A03840B-9EBE-47E3-89AB-E0914DF21AFB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers", "src\Discord.Net.Analyzers\Discord.Net.Analyzers.csproj", "{24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C7CF5621-7D36-433B-B337-5A2E3C101A71}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impls", "Impls", "{288C363D-A636-4EAE-9AC1-4698B641B26E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BB59D5B5-E7B0-4BF4-8F82-D14431B2799B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -112,6 +114,78 @@ Global {9AFAB80E-D2D3-4EDB-B58C-BACA78D1EA30}.Release|x64.Build.0 = Release|Any CPU {9AFAB80E-D2D3-4EDB-B58C-BACA78D1EA30}.Release|x86.ActiveCfg = Release|Any CPU {9AFAB80E-D2D3-4EDB-B58C-BACA78D1EA30}.Release|x86.Build.0 = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.ActiveCfg = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.Build.0 = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.ActiveCfg = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.Build.0 = Debug|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.Build.0 = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.ActiveCfg = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.Build.0 = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.ActiveCfg = Release|Any CPU + {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.Build.0 = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x64.ActiveCfg = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x64.Build.0 = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x86.ActiveCfg = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x86.Build.0 = Debug|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|Any CPU.Build.0 = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x64.ActiveCfg = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x64.Build.0 = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x86.ActiveCfg = Release|Any CPU + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x86.Build.0 = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x64.ActiveCfg = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x64.Build.0 = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x86.ActiveCfg = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x86.Build.0 = Debug|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|Any CPU.Build.0 = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x64.ActiveCfg = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x64.Build.0 = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x86.ActiveCfg = Release|Any CPU + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x86.Build.0 = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x64.ActiveCfg = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x64.Build.0 = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x86.ActiveCfg = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x86.Build.0 = Debug|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|Any CPU.Build.0 = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.ActiveCfg = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.Build.0 = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.ActiveCfg = Release|Any CPU + {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.Build.0 = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x64.Build.0 = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x86.Build.0 = Debug|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|Any CPU.Build.0 = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x64.ActiveCfg = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x64.Build.0 = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x86.ActiveCfg = Release|Any CPU + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x86.Build.0 = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x64.Build.0 = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x86.ActiveCfg = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x86.Build.0 = Debug|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|Any CPU.Build.0 = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x64.ActiveCfg = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x64.Build.0 = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x86.ActiveCfg = Release|Any CPU + {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x86.Build.0 = Release|Any CPU {F2FF84FB-F6AD-47E5-9EE5-18206CAE136E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2FF84FB-F6AD-47E5-9EE5-18206CAE136E}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2FF84FB-F6AD-47E5-9EE5-18206CAE136E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -148,78 +222,6 @@ Global {9B4C4AFB-3D15-44C6-9E36-12ED625AAA26}.Release|x64.Build.0 = Release|Any CPU {9B4C4AFB-3D15-44C6-9E36-12ED625AAA26}.Release|x86.ActiveCfg = Release|Any CPU {9B4C4AFB-3D15-44C6-9E36-12ED625AAA26}.Release|x86.Build.0 = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x64.ActiveCfg = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x64.Build.0 = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x86.ActiveCfg = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Debug|x86.Build.0 = Debug|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|Any CPU.Build.0 = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x64.ActiveCfg = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x64.Build.0 = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x86.ActiveCfg = Release|Any CPU - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4}.Release|x86.Build.0 = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x64.ActiveCfg = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x64.Build.0 = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Debug|x86.Build.0 = Debug|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|Any CPU.Build.0 = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x64.ActiveCfg = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x64.Build.0 = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x86.ActiveCfg = Release|Any CPU - {E169E15A-E82C-45BF-8C24-C2CADB7093AA}.Release|x86.Build.0 = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x64.ActiveCfg = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x64.Build.0 = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x86.ActiveCfg = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Debug|x86.Build.0 = Debug|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|Any CPU.Build.0 = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.ActiveCfg = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.Build.0 = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.ActiveCfg = Release|Any CPU - {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.Build.0 = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.ActiveCfg = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.Build.0 = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.ActiveCfg = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.Build.0 = Debug|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.Build.0 = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.ActiveCfg = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.Build.0 = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.ActiveCfg = Release|Any CPU - {47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.Build.0 = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x64.ActiveCfg = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x64.Build.0 = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x86.ActiveCfg = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x86.Build.0 = Debug|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|Any CPU.Build.0 = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x64.ActiveCfg = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x64.Build.0 = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x86.ActiveCfg = Release|Any CPU - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x86.Build.0 = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x64.ActiveCfg = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x64.Build.0 = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x86.ActiveCfg = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Debug|x86.Build.0 = Debug|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|Any CPU.Build.0 = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x64.ActiveCfg = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x64.Build.0 = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x86.ActiveCfg = Release|Any CPU - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9}.Release|x86.Build.0 = Release|Any CPU {A23E46D2-1610-4AE5-820F-422D34810887}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A23E46D2-1610-4AE5-820F-422D34810887}.Debug|Any CPU.Build.0 = Debug|Any CPU {A23E46D2-1610-4AE5-820F-422D34810887}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -232,18 +234,30 @@ Global {A23E46D2-1610-4AE5-820F-422D34810887}.Release|x64.Build.0 = Release|Any CPU {A23E46D2-1610-4AE5-820F-422D34810887}.Release|x86.ActiveCfg = Release|Any CPU {A23E46D2-1610-4AE5-820F-422D34810887}.Release|x86.Build.0 = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x64.ActiveCfg = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x64.Build.0 = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x86.ActiveCfg = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Debug|x86.Build.0 = Debug|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|Any CPU.Build.0 = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x64.ActiveCfg = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x64.Build.0 = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x86.ActiveCfg = Release|Any CPU - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D}.Release|x86.Build.0 = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|x64.ActiveCfg = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|x64.Build.0 = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|x86.ActiveCfg = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Debug|x86.Build.0 = Debug|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|Any CPU.Build.0 = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|x64.ActiveCfg = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|x64.Build.0 = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|x86.ActiveCfg = Release|Any CPU + {B61AAE66-15CC-40E4-873A-C23E697C3411}.Release|x86.Build.0 = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x64.ActiveCfg = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x64.Build.0 = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x86.ActiveCfg = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Debug|x86.Build.0 = Debug|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|Any CPU.Build.0 = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x64.ActiveCfg = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x64.Build.0 = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x86.ActiveCfg = Release|Any CPU + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -253,17 +267,18 @@ Global {078DD7E6-943D-4D09-AFC2-D2BA58B76C9C} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} {688FD1D8-7F01-4539-B2E9-F473C5D699C7} = {288C363D-A636-4EAE-9AC1-4698B641B26E} {9AFAB80E-D2D3-4EDB-B58C-BACA78D1EA30} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} + {47820065-3CFB-401C-ACEA-862BD564A404} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} + {137DB209-B357-4EE8-A6EE-4B6127F6DEE9} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} + {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} + {FC67057C-E92F-4E1C-98BE-46F839C8AD71} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} + {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} + {E169E15A-E82C-45BF-8C24-C2CADB7093AA} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} {F2FF84FB-F6AD-47E5-9EE5-18206CAE136E} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} {4E1F1F40-B1DD-40C9-A4B1-A2046A4C9C76} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} {9B4C4AFB-3D15-44C6-9E36-12ED625AAA26} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} - {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} - {E169E15A-E82C-45BF-8C24-C2CADB7093AA} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} - {FC67057C-E92F-4E1C-98BE-46F839C8AD71} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} - {47820065-3CFB-401C-ACEA-862BD564A404} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} - {4A03840B-9EBE-47E3-89AB-E0914DF21AFB} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} - {137DB209-B357-4EE8-A6EE-4B6127F6DEE9} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} {A23E46D2-1610-4AE5-820F-422D34810887} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} - {24C231FD-8CF3-444A-9E7C-45C18BAD4A0D} = {CC3D4B1C-9DE0-448B-8AE7-F3F1F3EC5C3A} + {B61AAE66-15CC-40E4-873A-C23E697C3411} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} + {4A03840B-9EBE-47E3-89AB-E0914DF21AFB} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D2404771-EEC8-45F2-9D71-F3373F6C1495} diff --git a/README.md b/README.md index cf0293359..541948f4b 100644 --- a/README.md +++ b/README.md @@ -81,3 +81,22 @@ Due to the nature of the Discord API, we will oftentimes need to add a property Furthermore, while we will never break the API (outside of interface changes) on minor builds, we will occasionally need to break the ABI, by introducing parameters to a method to match changes upstream with Discord. As such, a minor version increment may require you to recompile your code, and dependencies, such as addons, may also need to be recompiled and republished on the newer version. When a binary breaking change is made, the change will be noted in the release notes. An increment of the MAJOR component indicates that breaking changes have been made to the library; consumers should check the release notes to determine what changes need to be made. + +## Branches + +### Release/X.X + +Release branch following Major.Minor. Upon release, patches will be pushed to these branches. +New NuGet releases will be tagged on these branches. + +### Dev + +Development branch, available on MyGet. This branch is what pull requests are targetted to. + +### Feature/X + +Branches that target Dev, adding new features. Feel free to explore these branches and give feedback where necessary. + +### Docs/X + +Usually targets Dev. These branches are used to update documentation with either new features or existing feature rework. diff --git a/docs/faq/basics/basic-operations.md b/docs/faq/basics/basic-operations.md index d6121dbb0..6adfa1f1f 100644 --- a/docs/faq/basics/basic-operations.md +++ b/docs/faq/basics/basic-operations.md @@ -53,7 +53,7 @@ able to message. You may check the message channel type. Visit [Glossary] to see the various types of channels. -[glossary]: xref:FAQ.Glossary#message-channels +[Glossary]: xref:Guides.Entities.Glossary#channels ## How can I get the guild from a message? diff --git a/docs/faq/misc/legacy.md b/docs/faq/misc/legacy.md index ddb2d03c6..fbfb41ac2 100644 --- a/docs/faq/misc/legacy.md +++ b/docs/faq/misc/legacy.md @@ -24,6 +24,6 @@ Visit the repo's [release tag] to see the latest public pre-release. The `DependencyMap` has been replaced with Microsoft's [DependencyInjection] Abstractions. An example usage can be seen -[here](https://github.com/foxbot/DiscordBotBase/blob/csharp/src/DiscordBot/Program.cs#L36). +[here](https://github.com/Discord-Net-Labs/Discord.Net-Labs/blob/release/3.x/samples/InteractionFramework/Program.cs#L66). [DependencyInjection]: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection diff --git a/docs/faq/toc.yml b/docs/faq/toc.yml index 5a7e7e7f2..2f04dc98c 100644 --- a/docs/faq/toc.yml +++ b/docs/faq/toc.yml @@ -16,7 +16,5 @@ topicUid: FAQ.Commands.Interactions - name: Dependency Injection topicUid: FAQ.Commands.DI -- name: Glossary - topicUid: FAQ.Glossary - name: Legacy or Upgrade topicUid: FAQ.Legacy diff --git a/docs/guides/entities/casting.md b/docs/guides/entities/casting.md new file mode 100644 index 000000000..3a314c67f --- /dev/null +++ b/docs/guides/entities/casting.md @@ -0,0 +1,68 @@ +--- +uid: Guides.Entities.Casting +title: Casting & Unboxing +--- + +# Casting + +Casting can be done in many ways, and is the only method to box and unbox types to/from their base definition. +Casting only works for types that inherit the base type that you want to unbox from. +`IUser` cannot be cast to `IMessage`. + +> [!NOTE] +> Interfaces **can** be cast to other interfaces, as long as they inherit each other. +> The same goes for reverse casting. As long as some entity can be simplified into what it inherits, your cast will pass. + +## Boxing + +A boxed object is the definition of an object that was simplified (or trimmed) by incoming traffic, +but still owns the data of the originally constructed type. Boxing is an implicit operation. + +Through casting, we can **unbox** this type, and access the properties that were unaccessible before. + +## Unboxing + +Unboxing is the most direct way to access the real definition of an object. +If we want to return a type from its interface, we can unbox it directly. + +[!code-csharp[Unboxing](samples/unboxing.cs)] + +## Regular casting + +In 'regular' casting, we use the `as` keyword to assign the given type to the object. +If the boxed type can indeed be cast into given type, +it will become said type, and its properties can be accessed. +[!code-csharp[Casting](samples/casting.cs)] + +> [!WARNING] +> If the type you're casting to is null, a `NullReferenceException` will be thrown when it's called. +> This makes safety casting much more interesting to use, as it prevents this exception from being thrown. + +## Safety casting + +Safety casting makes sure that the type you're trying to cast to can never be null, as it passes checks upon calling them. + +There are 3 different ways to safety cast an object: + +### Basic safety casting: + +To safety cast an object, all we need to do is check if it is of the member type in a statement. +If this check fails, it will continue below, making sure we don't try to access null. +[!code-csharp[Base](samples/safety-cast.cs)] + +### Object declaration: + +Here we declare the object we are casting to, +making it so that you can immediately work with its properties without reassigning through regular casting. +[!code-csharp[Declare](samples/safety-cast-var.cs)] + +### Reverse passage: + +In previous examples, we want to let code continue running after the check, or if the check fails. +In this example, the cast will return the entire method (ignoring the latter) upon failure, +and declare the variable for further use into the method: +[!code-csharp[Pass](samples/safety-cast-pass.cs)] + +> [!NOTE] +> Usage of `is`, `not` and `as` is required in cast assignment and/or type checks. `==`, `!=` and `=` are invalid assignment, +> as these operators only apply to initialized objects and not their types. diff --git a/docs/faq/misc/glossary.md b/docs/guides/entities/glossary.md similarity index 58% rename from docs/faq/misc/glossary.md rename to docs/guides/entities/glossary.md index 232690917..4ac6dd593 100644 --- a/docs/faq/misc/glossary.md +++ b/docs/guides/entities/glossary.md @@ -1,29 +1,19 @@ --- -uid: FAQ.Glossary -title: Common Terminologies / Glossary +uid: Guides.Entities.Glossary +title: Glossary & Flowcharts --- -# Glossary +# Entity Types -This is an additional chapter for quick references to various common -types that you may see within Discord.Net. To see more information -regarding each type of object, click on the object to navigate -to our API documentation page where you might find more explanation -about it. +A list of all Discord.Net entities, what they can be cast to and what their properties are. -## Common Types - -* A **Guild** ([IGuild]) is an isolated collection of users and -channels, and are often referred to as "servers". - - Example: [Discord API](https://discord.gg/jkrBmQR) -* A **Channel** ([IChannel]) represents a generic channel. - - Example: #dotnet_discord-net - - See [Channel Types](#channel-types) +> [!NOTE] +> All interfaces have the same inheritance tree for both `Socket` and `Rest` entities. +> Entities with that have been marked red are exclusive to the project they source from. -[IGuild]: xref:Discord.IGuild -[IChannel]: xref:Discord.IChannel +## Channels -## Channel Types +![IChannelChart](images/IChannel.png) ### Message Channels * A **Text Channel** ([ITextChannel]) is a message channel from a Guild. @@ -40,14 +30,11 @@ channels, and are often referred to as "servers". - This can be any channels that may exist in a guild. * A **Voice Channel** ([IVoiceChannel]) is a voice channel in a guild. * A **Stage Channel** ([IStageChannel]) is a stage channel in a guild. -* A **Category Channel** ([ICategoryChannel]) (2.0+) is a category that +* A **Category Channel** ([ICategoryChannel]) is a category that holds one or more sub-channels. -* A **Nested Channel** ([INestedChannel]) (2.0+) is a channel that can +* A **Nested Channel** ([INestedChannel]) is a channel that can exist under a category. -> [!NOTE] -> A Channel ([IChannel]) can be all types of channels. - [INestedChannel]: xref:Discord.INestedChannel [IGuildChannel]: xref:Discord.IGuildChannel [IMessageChannel]: xref:Discord.IMessageChannel @@ -62,17 +49,27 @@ exist under a category. [IStageChannel]: xref:Discord.IStageChannel [INewsChannel]: xref:Discord.INewsChannel -## Message Types +## Messages + +![IMessageChart](images/IMessage.png) +* A **Rest Followup Message** ([RestFollowupMessage]) is a message returned by followup on on an interaction. +* A **Rest Interaction Message** ([RestInteractionMessage]) is a message returned by the interaction's original response. +* A **Rest User Message** ([RestUserMessage]) is a message sent over rest; it can be any of the above. * An **User Message** ([IUserMessage]) is a message sent by a user. * A **System Message** ([ISystemMessage]) is a message sent by Discord itself. * A **Message** ([IMessage]) can be any of the above. +[RestFollowupMessage]: xref:Discord.Rest.RestFollowupMessage +[RestInteractionMessage]: xref:Discord.Rest.RestInteractionMessage +[RestUserMEssage]: xref:Discord.Rest.RestUserMessage [IUserMessage]: xref:Discord.IUserMessage [ISystemMessage]: xref:Discord.ISystemMessage [IMessage]: xref:Discord.IMessage -## User Types +## Users + +![IUserChart](images/IUser.png) * A **Guild User** ([IGuildUser]) is a user available inside a guild. * A **Group User** ([IGroupUser]) is a user available inside a group. @@ -85,7 +82,29 @@ exist under a category. [ISelfUser]: xref:Discord.ISelfUser [IUser]: xref:Discord.IUser -## Emoji Types +## Interactions + +![IInteractionChart](images/IInteraction.png) + +* A **Slash command** ([ISlashCommandInteraction]) is an application command executed in the text box, with provided parameters. +* A **Message Command** ([IMessageCommandInteraction]) is an application command targetting a message. +* An **User Command** ([IUserCommandInteraction]) is an application command targetting a user. +* An **Application Command** ([IApplicationCommandInteraction]) is any of the above. +* A **Message component** ([IMessageComponent]) is the interaction of a button being clicked/dropdown option(s) entered. +* An **Autocomplete Interaction** ([IAutocompleteinteraction]) is an interaction that has been automatically completed. +* An **Interaction** ([IDiscordInteraction]) is any of the above. + +[ISlashCommandInteraction]: xref:Discord.ISlashCommandInteraction +[IMessageCommandInteraction]: xref:Discord.IMessageCommandInteraction +[IUserCommandInteraction]: xref:Discord.IUserCommandInteraction +[IApplicationCommandInteraction]: xref:Discord.IApplicationCommandInteraction +[IMessageComponent]: xref:Discord.IMessageComponent +[IAutocompleteinteraction]: xref:Discord.IAutocompleteInteraction +[IDiscordInteraction]: xref:Discord.IDiscordInteraction + +## Other types: + +### Emoji * An **Emote** ([Emote]) is a custom emote from a guild. - Example: `<:dotnet:232902710280716288>` @@ -95,8 +114,7 @@ exist under a category. [Emote]: xref:Discord.Emote [Emoji]: xref:Discord.Emoji - -## Sticker Types +### Stickers * A **Sticker** ([ISticker]) is a standard Discord sticker. * A **Custom Sticker ([ICustomSticker]) is a Guild-unique sticker. @@ -104,7 +122,7 @@ exist under a category. [ISticker]: xref:Discord.ISticker [ICustomSticker]: xref:Discord.ICustomSticker -## Activity Types +### Activity * A **Game** ([Game]) refers to a user's game activity. * A **Rich Presence** ([RichGame]) refers to a user's detailed diff --git a/docs/guides/entities/images/IChannel.png b/docs/guides/entities/images/IChannel.png new file mode 100644 index 0000000000000000000000000000000000000000..e2cda78f347f066e1073c9214fe61368f58ac3f3 GIT binary patch literal 59573 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 literal 0 KcmV+b0RR6000031 diff --git a/docs/guides/entities/images/IInteraction.png b/docs/guides/entities/images/IInteraction.png new file mode 100644 index 0000000000000000000000000000000000000000..93ca7895d16b046860e64b277d68dda121e6696c GIT binary patch literal 37766 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 literal 0 KcmV+b0RR6000031 diff --git a/docs/guides/entities/images/IMessage.png b/docs/guides/entities/images/IMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..eff4b1dbed7a196a0dfe80952115c9ed4b94b9ee GIT binary patch literal 36939 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 literal 0 KcmV+b0RR6000031 diff --git a/docs/guides/entities/images/IUser.png b/docs/guides/entities/images/IUser.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4a969c88eacddae0bb89f5c68b3ffb8c1d72d6 GIT binary patch literal 63210 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 [!NOTE] -> This article is written with the Socket variants of entities in mind, -> not the general interfaces or Rest entities. - Discord.Net provides a versatile entity system for navigating the Discord API. +> [!TIP] +> It is **vital** that you use the proper IDs for an entity when using +> a `GetXXX` method. It is recommended that you enable Discord's +> _developer mode_ to allow easy access to entity IDs, found in +> Settings > Appearance > Advanced. Read more about it in the +> [FAQ](xref:FAQ.Basics.GetStarted) page. + ## Inheritance Due to the nature of the Discord API, some entities are designed with -multiple variants; for example, `SocketUser` and `SocketGuildUser`. +multiple variants; for example, `IUser` and `IGuildUser`. All models will contain the most detailed version of an entity possible, even if the type is less detailed. -For example, in the case of the `MessageReceived` event, a +## Socket & REST + +REST entities are retrieved over REST, and will be disposed after use. +It is suggested to limit the amount of REST calls as much as possible, +as calls over REST interact with the API, and are thus prone to rate-limits. + +- [Learn more about REST](https://restfulapi.net/) + +Socket entities are created through the gateway, +most commonly through `DiscordSocketClient` events. +These entities will enter the clients' global cache for later use. + +In the case of the `MessageReceived` event, a `SocketMessage` is passed in with a channel property of type `SocketMessageChannel`. All messages come from channels capable of messaging, so this is the only variant of a channel that can cover @@ -31,7 +46,9 @@ But that doesn't mean a message _can't_ come from a retrieve information about a guild from a message entity, you will need to cast its channel object to a `SocketTextChannel`. -You can find out various types of entities in the [Glossary page.](xref:FAQ.Glossary) +> [!NOTE] +> You can find out the inheritance tree & definitions of various entities +> [here](xref:Guides.Entities.Glossary) ## Navigation @@ -40,26 +57,31 @@ you to easily navigate to an entity's parent or children. As explained above, you will sometimes need to cast to a more detailed version of an entity to navigate to its parent. -## Accessing Entities +## Accessing Socket Entities The most basic forms of entities, `SocketGuild`, `SocketUser`, and `SocketChannel` can be pulled from the DiscordSocketClient's global cache, and can be retrieved using the respective `GetXXX` method on DiscordSocketClient. -> [!TIP] -> It is **vital** that you use the proper IDs for an entity when using -> a `GetXXX` method. It is recommended that you enable Discord's -> _developer mode_ to allow easy access to entity IDs, found in -> Settings > Appearance > Advanced. Read more about it in the -> [FAQ](xref:FAQ.Basics.GetStarted) page. - More detailed versions of entities can be pulled from the basic entities, e.g., `SocketGuild.GetUser`, which returns a `SocketGuildUser`, or `SocketGuild.GetChannel`, which returns a `SocketGuildChannel`. Again, you may need to cast these objects to get a variant of the type that you need. -## Sample +### Sample + +[!code-csharp[Socket Sample](samples/socketentities.cs)] + +## Accessing REST Entities + +REST entities work almost the same as Socket entities, but are much less frequently used. +To access REST entities, the `DiscordSocketClient`'s `Rest` property is required. +Another option here is to create your own [DiscordRestClient], independent of the Socket gateway. + +[DiscordRestClient]: xref:Discord.Rest.DiscordRestClient + +### Sample -[!code-csharp[Entity Sample](samples/entities.cs)] +[!code-csharp[Rest Sample](samples/restentities.cs)] diff --git a/docs/guides/entities/samples/casting.cs b/docs/guides/entities/samples/casting.cs new file mode 100644 index 000000000..0a7b9d16e --- /dev/null +++ b/docs/guides/entities/samples/casting.cs @@ -0,0 +1,7 @@ +// Say we have an entity; for the simplicity of this example, it will appear from thin air. +IChannel channel; + +// If we want this to be an ITextChannel so we can access the properties of a text channel inside of a guild, an approach would be: +ITextChannel textChannel = channel as ITextChannel; + +await textChannel.DoSomethingICantWithIChannelAsync(); diff --git a/docs/guides/entities/samples/restentities.cs b/docs/guides/entities/samples/restentities.cs new file mode 100644 index 000000000..36a817780 --- /dev/null +++ b/docs/guides/entities/samples/restentities.cs @@ -0,0 +1,8 @@ +// RestUser entities expose the accent color and banner of a user. +// This being one of the few use-cases for requesting a RestUser instead of depending on the Socket counterpart. +public static EmbedBuilder WithUserColor(this EmbedBuilder builder, IUser user) +{ + var restUser = await _client.Rest.GetUserAsync(user.Id); + return builder.WithColor(restUser.AccentColor ?? Color.Blue); + // The accent color can still be null, so a check for this needs to be done to prevent an exception to be thrown. +} diff --git a/docs/guides/entities/samples/safety-cast-pass.cs b/docs/guides/entities/samples/safety-cast-pass.cs new file mode 100644 index 000000000..03407746f --- /dev/null +++ b/docs/guides/entities/samples/safety-cast-pass.cs @@ -0,0 +1,10 @@ +private void MyFunction(IMessage message) +{ + // Here we do the reverse as in the previous examples, and let it continue the code below if it IS an IUserMessage + if (message is not IUserMessage userMessage) + return; + + // Because we do the above check inline (don't give the statement a body), + // the code will still declare `userMessage` as available outside of the above statement. + Console.WriteLine(userMessage.Author); +} diff --git a/docs/guides/entities/samples/safety-cast-var.cs b/docs/guides/entities/samples/safety-cast-var.cs new file mode 100644 index 000000000..bf62a2095 --- /dev/null +++ b/docs/guides/entities/samples/safety-cast-var.cs @@ -0,0 +1,9 @@ +IUser user; + +// Here we can pre-define the actual declaration of said IGuildUser object, +// so we don't need to cast additionally inside of the statement. +if (user is IGuildUser guildUser) +{ + Console.WriteLine(guildUser.JoinedAt); +} +// Check failed. diff --git a/docs/guides/entities/samples/safety-cast.cs b/docs/guides/entities/samples/safety-cast.cs new file mode 100644 index 000000000..684cff845 --- /dev/null +++ b/docs/guides/entities/samples/safety-cast.cs @@ -0,0 +1,8 @@ +IUser user; + +// Here we check if the user is an IGuildUser, if not, let it pass. This ensures its not null. +if (user is IGuildUser) +{ + Console.WriteLine("This user is in a guild!"); +} +// Check failed. diff --git a/docs/guides/concepts/samples/entities.cs b/docs/guides/entities/samples/socketentities.cs similarity index 100% rename from docs/guides/concepts/samples/entities.cs rename to docs/guides/entities/samples/socketentities.cs diff --git a/docs/guides/entities/samples/unboxing.cs b/docs/guides/entities/samples/unboxing.cs new file mode 100644 index 000000000..78dd7ea02 --- /dev/null +++ b/docs/guides/entities/samples/unboxing.cs @@ -0,0 +1,9 @@ +IUser user; + +// Here we use inline unboxing to make a call to its member (if available) only once. + +// Note that if the entity we're trying to cast to is null, this will throw a NullReferenceException. +Console.WriteLine(((IGuildUser)user).Nickname); + +// In case you are certain the entity IS said member, you can also use unboxing to declare variables. +IGuildUser guildUser = (IGuildUser)user; diff --git a/docs/guides/toc.yml b/docs/guides/toc.yml index cf4ea5516..d4f2984f8 100644 --- a/docs/guides/toc.yml +++ b/docs/guides/toc.yml @@ -21,8 +21,14 @@ topicUid: Guides.Concepts.Events - name: Managing Connections topicUid: Guides.Concepts.ManageConnections - - name: Entities - topicUid: Guides.Concepts.Entities +- name: Entities + items: + - name: Introduction + topicUid: Guides.Entities.Intro + - name: Casting + topicUid: Guides.Entities.Casting + - name: Glossary & Flowcharts + topicUid: Guides.Entities.Glossary - name: Working with Text-based Commands items: - name: Introduction diff --git a/samples/01_basic_ping_bot/Program.cs b/samples/01_basic_ping_bot/Program.cs deleted file mode 100644 index 7fbe04993..000000000 --- a/samples/01_basic_ping_bot/Program.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Discord; -using Discord.WebSocket; - -namespace _01_basic_ping_bot -{ - // This is a minimal, bare-bones example of using Discord.Net - // - // If writing a bot with commands, we recommend using the Discord.Net.Commands - // framework, rather than handling commands yourself, like we do in this sample. - // - // You can find samples of using the command framework: - // - Here, under the 02_commands_framework sample - // - https://github.com/foxbot/DiscordBotBase - a bare-bones bot template - // - https://github.com/foxbot/patek - a more feature-filled bot, utilizing more aspects of the library - class Program - { - private readonly DiscordSocketClient _client; - - // Discord.Net heavily utilizes TAP for async, so we create - // an asynchronous context from the beginning. - static void Main(string[] args) - { - new Program().MainAsync().GetAwaiter().GetResult(); - } - - public Program() - { - // It is recommended to Dispose of a client when you are finished - // using it, at the end of your app's lifetime. - _client = new DiscordSocketClient(); - - _client.Log += LogAsync; - _client.Ready += ReadyAsync; - _client.MessageReceived += MessageReceivedAsync; - } - - public async Task MainAsync() - { - // Tokens should be considered secret data, and never hard-coded. - await _client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("token")); - await _client.StartAsync(); - - // Block the program until it is closed. - await Task.Delay(Timeout.Infinite); - } - - private Task LogAsync(LogMessage log) - { - Console.WriteLine(log.ToString()); - return Task.CompletedTask; - } - - // The Ready event indicates that the client has opened a - // connection and it is now safe to access the cache. - private Task ReadyAsync() - { - Console.WriteLine($"{_client.CurrentUser} is connected!"); - - return Task.CompletedTask; - } - - // This is not the recommended way to write a bot - consider - // reading over the Commands Framework sample. - private async Task MessageReceivedAsync(SocketMessage message) - { - // The bot should never respond to itself. - if (message.Author.Id == _client.CurrentUser.Id) - return; - - if (message.Content == "!ping") - await message.Channel.SendMessageAsync("pong!"); - } - } -} diff --git a/samples/04_interactions_framework/ExampleEnum.cs b/samples/04_interactions_framework/ExampleEnum.cs deleted file mode 100644 index 2ea5733c0..000000000 --- a/samples/04_interactions_framework/ExampleEnum.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace _04_interactions_framework -{ - public enum ExampleEnum - { - First, - Second, - Third, - Fourth - } -} diff --git a/samples/BasicBot/Program.cs b/samples/BasicBot/Program.cs new file mode 100644 index 000000000..179dfce05 --- /dev/null +++ b/samples/BasicBot/Program.cs @@ -0,0 +1,112 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Discord; +using Discord.WebSocket; + +namespace BasicBot +{ + // This is a minimal, bare-bones example of using Discord.Net. + // + // If writing a bot with commands/interactions, we recommend using the Discord.Net.Commands/Discord.Net.Interactions + // framework, rather than handling them yourself, like we do in this sample. + // + // You can find samples of using the command framework: + // - Here, under the TextCommandFramework sample + // - At the guides: https://discordnet.dev/guides/text_commands/intro.html + // + // You can find samples of using the interaction framework: + // - Here, under the InteractionFramework sample + // - At the guides: https://discordnet.dev/guides/int_framework/intro.html + class Program + { + // Non-static readonly fields can only be assigned in a constructor. + // If you want to assign it elsewhere, consider removing the readonly keyword. + private readonly DiscordSocketClient _client; + + // Discord.Net heavily utilizes TAP for async, so we create + // an asynchronous context from the beginning. + static void Main(string[] args) + => new Program() + .MainAsync() + .GetAwaiter() + .GetResult(); + + public Program() + { + // It is recommended to Dispose of a client when you are finished + // using it, at the end of your app's lifetime. + _client = new DiscordSocketClient(); + + // Subscribing to client events, so that we may receive them whenever they're invoked. + _client.Log += LogAsync; + _client.Ready += ReadyAsync; + _client.MessageReceived += MessageReceivedAsync; + _client.InteractionCreated += InteractionCreatedAsync; + } + + public async Task MainAsync() + { + // Tokens should be considered secret data, and never hard-coded. + await _client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("token")); + // Different approaches to making your token a secret is by putting them in local .json, .yaml, .xml or .txt files, then reading them on startup. + + await _client.StartAsync(); + + // Block the program until it is closed. + await Task.Delay(Timeout.Infinite); + } + + private Task LogAsync(LogMessage log) + { + Console.WriteLine(log.ToString()); + return Task.CompletedTask; + } + + // The Ready event indicates that the client has opened a + // connection and it is now safe to access the cache. + private Task ReadyAsync() + { + Console.WriteLine($"{_client.CurrentUser} is connected!"); + + return Task.CompletedTask; + } + + // This is not the recommended way to write a bot - consider + // reading over the Commands Framework sample. + private async Task MessageReceivedAsync(SocketMessage message) + { + // The bot should never respond to itself. + if (message.Author.Id == _client.CurrentUser.Id) + return; + + + if (message.Content == "!ping") + { + // Create a new componentbuilder, in which dropdowns & buttons can be created. + var cb = new ComponentBuilder() + .WithButton("Click me!", "unique-id", ButtonStyle.Primary); + + // Send a message with content 'pong', including a button. + // This button needs to be build by calling .Build() before being passed into the call. + await message.Channel.SendMessageAsync("pong!", components: cb.Build()); + } + } + + // For better functionality & a more developer-friendly approach to handling any kind of interaction, refer to: + // https://discordnet.dev/guides/int_framework/intro.html + private async Task InteractionCreatedAsync(SocketInteraction interaction) + { + // safety-casting is the best way to prevent something being cast from being null. + // If this check does not pass, it could not be cast to said type. + if (interaction is SocketMessageComponent component) + { + // Check for the ID created in the button mentioned above. + if (component.Data.CustomId == "unique-id") + await interaction.RespondAsync("Thank you for clicking my button!"); + + else Console.WriteLine("An ID has been received that has no handler!"); + } + } + } +} diff --git a/samples/01_basic_ping_bot/01_basic_ping_bot.csproj b/samples/BasicBot/_BasicBot.csproj similarity index 100% rename from samples/01_basic_ping_bot/01_basic_ping_bot.csproj rename to samples/BasicBot/_BasicBot.csproj diff --git a/samples/InteractionFramework/Attributes/DoUserCheckAttribute.cs b/samples/InteractionFramework/Attributes/DoUserCheckAttribute.cs new file mode 100644 index 000000000..96266cdff --- /dev/null +++ b/samples/InteractionFramework/Attributes/DoUserCheckAttribute.cs @@ -0,0 +1,37 @@ +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using System; +using System.Threading.Tasks; + +namespace InteractionFramework.Attributes +{ + internal class DoUserCheck : PreconditionAttribute + { + public override Task CheckRequirementsAsync(IInteractionContext context, ICommandInfo commandInfo, IServiceProvider services) + { + // Check if the component matches the target properly. + if (context.Interaction is not SocketMessageComponent componentContext) + return Task.FromResult(PreconditionResult.FromError("Context unrecognized as component context.")); + + else + { + // The approach here entirely depends on how you construct your custom ID. In this case, the format is: + // unique-name:*,* + + // here the name and wildcards are split by ':' + var param = componentContext.Data.CustomId.Split(':'); + + // here we determine that we should always check for the first ',' present. + // This will deal with additional wildcards by always selecting the first wildcard present. + if (param.Length > 1 && ulong.TryParse(param[1].Split(',')[0], out ulong id)) + return (context.User.Id == id) + // If the user ID + ? Task.FromResult(PreconditionResult.FromSuccess()) + : Task.FromResult(PreconditionResult.FromError("User ID does not match component ID!")); + + else return Task.FromResult(PreconditionResult.FromError("Parse cannot be done if no userID exists.")); + } + } + } +} diff --git a/samples/04_interactions_framework/RequireOwnerAttribute.cs b/samples/InteractionFramework/Attributes/RequireOwnerAttribute.cs similarity index 96% rename from samples/04_interactions_framework/RequireOwnerAttribute.cs rename to samples/InteractionFramework/Attributes/RequireOwnerAttribute.cs index 2f2493838..7b0e57a46 100644 --- a/samples/04_interactions_framework/RequireOwnerAttribute.cs +++ b/samples/InteractionFramework/Attributes/RequireOwnerAttribute.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace _04_interactions_framework +namespace InteractionFramework.Attributes { public class RequireOwnerAttribute : PreconditionAttribute { diff --git a/samples/04_interactions_framework/CommandHandler.cs b/samples/InteractionFramework/CommandHandler.cs similarity index 95% rename from samples/04_interactions_framework/CommandHandler.cs rename to samples/InteractionFramework/CommandHandler.cs index 735557da5..9a505246f 100644 --- a/samples/04_interactions_framework/CommandHandler.cs +++ b/samples/InteractionFramework/CommandHandler.cs @@ -2,13 +2,10 @@ using Discord; using Discord.Interactions; using Discord.WebSocket; using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; using System.Threading.Tasks; -namespace _04_interactions_framework +namespace InteractionFramework { public class CommandHandler { @@ -27,6 +24,9 @@ namespace _04_interactions_framework { // Add the public modules that inherit InteractionModuleBase to the InteractionService await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services); + // Another approach to get the assembly of a specific type is: + // typeof(CommandHandler).Assembly + // Process the InteractionCreated payloads to execute Interactions commands _client.InteractionCreated += HandleInteraction; @@ -37,6 +37,8 @@ namespace _04_interactions_framework _commands.ComponentCommandExecuted += ComponentCommandExecuted; } + # region Error Handling + private Task ComponentCommandExecuted (ComponentCommandInfo arg1, Discord.IInteractionContext arg2, IResult arg3) { if (!arg3.IsSuccess) @@ -123,6 +125,9 @@ namespace _04_interactions_framework return Task.CompletedTask; } + # endregion + + # region Execution private async Task HandleInteraction (SocketInteraction arg) { @@ -142,5 +147,6 @@ namespace _04_interactions_framework await arg.GetOriginalResponseAsync().ContinueWith(async (msg) => await msg.Result.DeleteAsync()); } } + # endregion } } diff --git a/samples/InteractionFramework/ExampleEnum.cs b/samples/InteractionFramework/ExampleEnum.cs new file mode 100644 index 000000000..755f33d17 --- /dev/null +++ b/samples/InteractionFramework/ExampleEnum.cs @@ -0,0 +1,10 @@ +namespace InteractionFramework +{ + public enum ExampleEnum + { + First, + Second, + Third, + Fourth + } +} diff --git a/samples/InteractionFramework/Modules/ComponentModule.cs b/samples/InteractionFramework/Modules/ComponentModule.cs new file mode 100644 index 000000000..643004ded --- /dev/null +++ b/samples/InteractionFramework/Modules/ComponentModule.cs @@ -0,0 +1,18 @@ +using Discord.Interactions; +using Discord.WebSocket; +using InteractionFramework.Attributes; +using System.Threading.Tasks; + +namespace InteractionFramework +{ + // As with all other modules, we create the context by defining what type of interaction this module is supposed to target. + internal class ComponentModule : InteractionModuleBase> + { + // With the Attribute DoUserCheck you can make sure that only the user this button targets can click it. This is defined by the first wildcard: *. + // See Attributes/DoUserCheckAttribute.cs for elaboration. + [DoUserCheck] + [ComponentInteraction("myButton:*")] + public async Task ClickButtonAsync(string userId) + => await RespondAsync(text: ":thumbsup: Clicked!"); + } +} diff --git a/samples/04_interactions_framework/Modules/UtilityModule.cs b/samples/InteractionFramework/Modules/GeneralModule.cs similarity index 93% rename from samples/04_interactions_framework/Modules/UtilityModule.cs rename to samples/InteractionFramework/Modules/GeneralModule.cs index d6cbb1a9f..78740a960 100644 --- a/samples/04_interactions_framework/Modules/UtilityModule.cs +++ b/samples/InteractionFramework/Modules/GeneralModule.cs @@ -1,16 +1,11 @@ using Discord; using Discord.Interactions; -using Discord.WebSocket; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; -namespace _04_interactions_framework.Modules +namespace InteractionFramework.Modules { // Interation modules must be public and inherit from an IInterationModuleBase - public class UtilityModule : InteractionModuleBase + public class GeneralModule : InteractionModuleBase { // Dependencies can be accessed through Property injection, public properties with public setters will be set by the service provider public InteractionService Commands { get; set; } @@ -18,7 +13,7 @@ namespace _04_interactions_framework.Modules private CommandHandler _handler; // Constructor injection is also a valid way to access the dependecies - public UtilityModule ( CommandHandler handler ) + public GeneralModule(CommandHandler handler) { _handler = handler; } @@ -65,7 +60,7 @@ namespace _04_interactions_framework.Modules // Message Commands can only have one parameter, which must be a type of SocketMessage [MessageCommand("Delete")] - [RequireOwner] + [Attributes.RequireOwner] public async Task DeleteMesage(IMessage message) { await message.DeleteAsync(); diff --git a/samples/InteractionFramework/Modules/MessageCommandModule.cs b/samples/InteractionFramework/Modules/MessageCommandModule.cs new file mode 100644 index 000000000..d07d276f5 --- /dev/null +++ b/samples/InteractionFramework/Modules/MessageCommandModule.cs @@ -0,0 +1,30 @@ +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using System.Threading.Tasks; + +namespace InteractionFramework.Modules +{ + // A transient module for executing commands. This module will NOT keep any information after the command is executed. + internal class MessageCommandModule : InteractionModuleBase> + { + // Pins a message in the channel it is in. + [MessageCommand("pin")] + public async Task PinMessageAsync(IMessage message) + { + // make a safety cast to check if the message is ISystem- or IUserMessage + if (message is not IUserMessage userMessage) + await RespondAsync(text: ":x: You cant pin system messages!"); + + // if the pins in this channel are equal to or above 50, no more messages can be pinned. + else if ((await Context.Channel.GetPinnedMessagesAsync()).Count >= 50) + await RespondAsync(text: ":x: You cant pin any more messages, the max has already been reached in this channel!"); + + else + { + await userMessage.PinAsync(); + await RespondAsync(":white_check_mark: Successfully pinned message!"); + } + } + } +} diff --git a/samples/InteractionFramework/Modules/SlashCommandModule.cs b/samples/InteractionFramework/Modules/SlashCommandModule.cs new file mode 100644 index 000000000..a066ea18c --- /dev/null +++ b/samples/InteractionFramework/Modules/SlashCommandModule.cs @@ -0,0 +1,51 @@ +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using System; +using System.Threading.Tasks; + +namespace InteractionFramework.Modules +{ + public enum Hobby + { + Gaming, + + Art, + + Reading + } + + // A transient module for executing commands. This module will NOT keep any information after the command is executed. + class SlashCommandModule : InteractionModuleBase> + { + // Will be called before execution. Here you can populate several entities you may want to retrieve before executing a command. + // I.E. database objects + public override void BeforeExecute(ICommandInfo command) + { + // Anything + throw new NotImplementedException(); + } + + // Will be called after execution + public override void AfterExecute(ICommandInfo command) + { + // Anything + throw new NotImplementedException(); + } + + [SlashCommand("ping", "Pings the bot and returns its latency.")] + public async Task GreetUserAsync() + => await RespondAsync(text: $":ping_pong: It took me {Context.Client.Latency}ms to respond to you!", ephemeral: true); + + [SlashCommand("hobby", "Choose your hobby from the list!")] + public async Task ChooseAsync(Hobby hobby) + => await RespondAsync(text: $":thumbsup: Your hobby is: {hobby}."); + + [SlashCommand("bitrate", "Gets the bitrate of a specific voice channel.")] + public async Task GetBitrateAsync([ChannelTypes(ChannelType.Voice, ChannelType.Stage)] IChannel channel) + { + var voiceChannel = channel as IVoiceChannel; + await RespondAsync(text: $"This voice channel has a bitrate of {voiceChannel.Bitrate}"); + } + } +} diff --git a/samples/InteractionFramework/Modules/UserCommandModule.cs b/samples/InteractionFramework/Modules/UserCommandModule.cs new file mode 100644 index 000000000..60c5246ce --- /dev/null +++ b/samples/InteractionFramework/Modules/UserCommandModule.cs @@ -0,0 +1,17 @@ +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using System.Threading.Tasks; + +namespace InteractionFramework.Modules +{ + // A transient module for executing commands. This module will NOT keep any information after the command is executed. + class UserCommandModule : InteractionModuleBase> + { + // This command will greet target user in the channel this was executed in. + [UserCommand("greet")] + public async Task GreetUserAsync(IUser user) + => await RespondAsync(text: $":wave: {Context.User} said hi to you, <@{user.Id}>!"); + } +} + diff --git a/samples/04_interactions_framework/Program.cs b/samples/InteractionFramework/Program.cs similarity index 96% rename from samples/04_interactions_framework/Program.cs rename to samples/InteractionFramework/Program.cs index 5dedbfae9..49db29714 100644 --- a/samples/04_interactions_framework/Program.cs +++ b/samples/InteractionFramework/Program.cs @@ -4,14 +4,14 @@ using Discord.WebSocket; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; -using System.Reflection; using System.Threading; using System.Threading.Tasks; -namespace _04_interactions_framework +namespace InteractionFramework { class Program { + // Entry point of the program. static void Main ( string[] args ) { // One of the more flexable ways to access the configuration data is to use the Microsoft's Configuration model, @@ -24,7 +24,7 @@ namespace _04_interactions_framework RunAsync(config).GetAwaiter().GetResult(); } - static async Task RunAsync (IConfiguration configuration ) + static async Task RunAsync (IConfiguration configuration) { // Dependency injection is a key part of the Interactions framework but it needs to be disposed at the end of the app's lifetime. using var services = ConfigureServices(configuration); @@ -64,14 +64,12 @@ namespace _04_interactions_framework } static ServiceProvider ConfigureServices ( IConfiguration configuration ) - { - return new ServiceCollection() + => new ServiceCollection() .AddSingleton(configuration) .AddSingleton() .AddSingleton(x => new InteractionService(x.GetRequiredService())) .AddSingleton() .BuildServiceProvider(); - } static bool IsDebug ( ) { diff --git a/samples/04_interactions_framework/04_interactions_framework.csproj b/samples/InteractionFramework/_InteractionFramework.csproj similarity index 94% rename from samples/04_interactions_framework/04_interactions_framework.csproj rename to samples/InteractionFramework/_InteractionFramework.csproj index 780ab69bd..f11c2bd3d 100644 --- a/samples/04_interactions_framework/04_interactions_framework.csproj +++ b/samples/InteractionFramework/_InteractionFramework.csproj @@ -3,7 +3,7 @@ Exe net5.0 - _04_interactions_framework + InteractionFramework diff --git a/samples/ShardedClient/Modules/InteractionModule.cs b/samples/ShardedClient/Modules/InteractionModule.cs new file mode 100644 index 000000000..089328e7d --- /dev/null +++ b/samples/ShardedClient/Modules/InteractionModule.cs @@ -0,0 +1,18 @@ +using Discord.Interactions; +using Discord.WebSocket; +using System.Threading.Tasks; + +namespace ShardedClient.Modules +{ + // A display of portability, which shows how minimal the difference between the 2 frameworks is. + public class InteractionModule : InteractionModuleBase> + { + [SlashCommand("info", "Information about this shard.")] + public async Task InfoAsync() + { + var msg = $@"Hi {Context.User}! There are currently {Context.Client.Shards.Count} shards! + This guild is being served by shard number {Context.Client.GetShardFor(Context.Guild).ShardId}"; + await RespondAsync(msg); + } + } +} diff --git a/samples/03_sharded_client/Modules/PublicModule.cs b/samples/ShardedClient/Modules/PublicModule.cs similarity index 93% rename from samples/03_sharded_client/Modules/PublicModule.cs rename to samples/ShardedClient/Modules/PublicModule.cs index fad2ba98c..25aa88aaf 100644 --- a/samples/03_sharded_client/Modules/PublicModule.cs +++ b/samples/ShardedClient/Modules/PublicModule.cs @@ -1,7 +1,7 @@ -using System.Threading.Tasks; using Discord.Commands; +using System.Threading.Tasks; -namespace _03_sharded_client.Modules +namespace ShardedClient.Modules { // Remember to make your module reference the ShardedCommandContext public class PublicModule : ModuleBase diff --git a/samples/03_sharded_client/Program.cs b/samples/ShardedClient/Program.cs similarity index 83% rename from samples/03_sharded_client/Program.cs rename to samples/ShardedClient/Program.cs index 753f400a1..717ce1d80 100644 --- a/samples/03_sharded_client/Program.cs +++ b/samples/ShardedClient/Program.cs @@ -1,13 +1,14 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using _03_sharded_client.Services; using Discord; using Discord.Commands; +using Discord.Interactions; using Discord.WebSocket; using Microsoft.Extensions.DependencyInjection; +using ShardedClient.Services; +using System; +using System.Threading; +using System.Threading.Tasks; -namespace _03_sharded_client +namespace ShardedClient { // This is a minimal example of using Discord.Net's Sharded Client // The provided DiscordShardedClient class simplifies having multiple @@ -15,7 +16,11 @@ namespace _03_sharded_client class Program { static void Main(string[] args) - => new Program().MainAsync().GetAwaiter().GetResult(); + => new Program() + .MainAsync() + .GetAwaiter() + .GetResult(); + public async Task MainAsync() { // You specify the amount of shards you'd like to have with the @@ -40,6 +45,7 @@ namespace _03_sharded_client client.ShardReady += ReadyAsync; client.Log += LogAsync; + await services.GetRequiredService().InitializeAsync(); await services.GetRequiredService().InitializeAsync(); // Tokens should be considered secret data, and never hard-coded. @@ -51,13 +57,13 @@ namespace _03_sharded_client } private ServiceProvider ConfigureServices(DiscordSocketConfig config) - { - return new ServiceCollection() + => new ServiceCollection() .AddSingleton(new DiscordShardedClient(config)) .AddSingleton() + .AddSingleton(x => new InteractionService(x.GetRequiredService())) .AddSingleton() + .AddSingleton() .BuildServiceProvider(); - } private Task ReadyAsync(DiscordSocketClient shard) diff --git a/samples/03_sharded_client/Services/CommandHandlingService.cs b/samples/ShardedClient/Services/CommandHandlingService.cs similarity index 95% rename from samples/03_sharded_client/Services/CommandHandlingService.cs rename to samples/ShardedClient/Services/CommandHandlingService.cs index adc91b12c..796188050 100644 --- a/samples/03_sharded_client/Services/CommandHandlingService.cs +++ b/samples/ShardedClient/Services/CommandHandlingService.cs @@ -1,12 +1,12 @@ -using System; -using System.Reflection; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; using Discord; using Discord.Commands; using Discord.WebSocket; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Reflection; +using System.Threading.Tasks; -namespace _03_sharded_client.Services +namespace ShardedClient.Services { public class CommandHandlingService { @@ -33,7 +33,7 @@ namespace _03_sharded_client.Services public async Task MessageReceivedAsync(SocketMessage rawMessage) { // Ignore system messages, or messages from other bots - if (!(rawMessage is SocketUserMessage message)) + if (rawMessage is not SocketUserMessage message) return; if (message.Source != MessageSource.User) return; @@ -59,7 +59,7 @@ namespace _03_sharded_client.Services return; // the command failed, let's notify the user that something happened. - await context.Channel.SendMessageAsync($"error: {result.ToString()}"); + await context.Channel.SendMessageAsync($"error: {result}"); } private Task LogAsync(LogMessage log) diff --git a/samples/ShardedClient/Services/InteractionHandlingService.cs b/samples/ShardedClient/Services/InteractionHandlingService.cs new file mode 100644 index 000000000..59b479361 --- /dev/null +++ b/samples/ShardedClient/Services/InteractionHandlingService.cs @@ -0,0 +1,57 @@ +using Discord; +using Discord.Interactions; +using Discord.WebSocket; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace ShardedClient.Services +{ + public class InteractionHandlingService + { + private readonly InteractionService _service; + private readonly DiscordShardedClient _client; + private readonly IServiceProvider _provider; + + public InteractionHandlingService(IServiceProvider services) + { + _service = services.GetRequiredService(); + _client = services.GetRequiredService(); + _provider = services; + + _service.Log += LogAsync; + _client.InteractionCreated += OnInteractionAsync; + // For examples on how to handle post execution, + // see the InteractionFramework samples. + } + + // Register all modules, and add the commands from these modules to either guild or globally depending on the build state. + public async Task InitializeAsync() + { + await _service.AddModulesAsync(typeof(InteractionHandlingService).Assembly, _provider); +#if DEBUG + await _service.AddCommandsToGuildAsync(_client.Guilds.First(x => x.Id == 1)); +#else + await _service.AddCommandsGloballyAsync(); +#endif + } + + private async Task OnInteractionAsync(SocketInteraction interaction) + { + _ = Task.Run(async () => + { + var context = new ShardedInteractionContext(_client, interaction); + await _service.ExecuteCommandAsync(context, _provider); + }); + await Task.CompletedTask; + } + + private Task LogAsync(LogMessage log) + { + Console.WriteLine(log.ToString()); + + return Task.CompletedTask; + } + } +} diff --git a/samples/03_sharded_client/03_sharded_client.csproj b/samples/ShardedClient/_ShardedClient.csproj similarity index 76% rename from samples/03_sharded_client/03_sharded_client.csproj rename to samples/ShardedClient/_ShardedClient.csproj index c4c42516e..69576ea27 100644 --- a/samples/03_sharded_client/03_sharded_client.csproj +++ b/samples/ShardedClient/_ShardedClient.csproj @@ -3,7 +3,7 @@ Exe net5.0 - _03_sharded_client + ShardedClient @@ -12,6 +12,7 @@ + diff --git a/samples/02_commands_framework/Modules/PublicModule.cs b/samples/TextCommandFramework/Modules/PublicModule.cs similarity index 96% rename from samples/02_commands_framework/Modules/PublicModule.cs rename to samples/TextCommandFramework/Modules/PublicModule.cs index 18423f609..68534e826 100644 --- a/samples/02_commands_framework/Modules/PublicModule.cs +++ b/samples/TextCommandFramework/Modules/PublicModule.cs @@ -1,10 +1,10 @@ -using System.IO; -using System.Threading.Tasks; using Discord; using Discord.Commands; -using _02_commands_framework.Services; +using System.IO; +using System.Threading.Tasks; +using TextCommandFramework.Services; -namespace _02_commands_framework.Modules +namespace TextCommandFramework.Modules { // Modules must be public and inherit from an IModuleBase public class PublicModule : ModuleBase diff --git a/samples/02_commands_framework/Program.cs b/samples/TextCommandFramework/Program.cs similarity index 97% rename from samples/02_commands_framework/Program.cs rename to samples/TextCommandFramework/Program.cs index 8a2f37dce..8a18daf72 100644 --- a/samples/02_commands_framework/Program.cs +++ b/samples/TextCommandFramework/Program.cs @@ -1,14 +1,14 @@ +using Discord; +using Discord.Commands; +using Discord.WebSocket; +using Microsoft.Extensions.DependencyInjection; using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Discord; -using Discord.WebSocket; -using Discord.Commands; -using _02_commands_framework.Services; +using TextCommandFramework.Services; -namespace _02_commands_framework +namespace TextCommandFramework { // This is a minimal example of using Discord.Net's command // framework - by no means does it show everything the framework diff --git a/samples/02_commands_framework/Services/CommandHandlingService.cs b/samples/TextCommandFramework/Services/CommandHandlingService.cs similarity index 92% rename from samples/02_commands_framework/Services/CommandHandlingService.cs rename to samples/TextCommandFramework/Services/CommandHandlingService.cs index 5ec496f78..5dd480424 100644 --- a/samples/02_commands_framework/Services/CommandHandlingService.cs +++ b/samples/TextCommandFramework/Services/CommandHandlingService.cs @@ -1,12 +1,12 @@ -using System; -using System.Reflection; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; using Discord; using Discord.Commands; using Discord.WebSocket; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Reflection; +using System.Threading.Tasks; -namespace _02_commands_framework.Services +namespace TextCommandFramework.Services { public class CommandHandlingService { @@ -36,21 +36,24 @@ namespace _02_commands_framework.Services public async Task MessageReceivedAsync(SocketMessage rawMessage) { // Ignore system messages, or messages from other bots - if (!(rawMessage is SocketUserMessage message)) return; - if (message.Source != MessageSource.User) return; + if (!(rawMessage is SocketUserMessage message)) + return; + if (message.Source != MessageSource.User) + return; // This value holds the offset where the prefix ends var argPos = 0; // Perform prefix check. You may want to replace this with // (!message.HasCharPrefix('!', ref argPos)) // for a more traditional command format like !help. - if (!message.HasMentionPrefix(_discord.CurrentUser, ref argPos)) return; + if (!message.HasMentionPrefix(_discord.CurrentUser, ref argPos)) + return; var context = new SocketCommandContext(_discord, message); // Perform the execution of the command. In this method, // the command service will perform precondition and parsing check // then execute the command if one is matched. - await _commands.ExecuteAsync(context, argPos, _services); + await _commands.ExecuteAsync(context, argPos, _services); // Note that normally a result will be returned by this format, but here // we will handle the result in CommandExecutedAsync, } diff --git a/samples/02_commands_framework/Services/PictureService.cs b/samples/TextCommandFramework/Services/PictureService.cs similarity index 91% rename from samples/02_commands_framework/Services/PictureService.cs rename to samples/TextCommandFramework/Services/PictureService.cs index dda818cc3..5c8e1dd89 100644 --- a/samples/02_commands_framework/Services/PictureService.cs +++ b/samples/TextCommandFramework/Services/PictureService.cs @@ -2,7 +2,7 @@ using System.IO; using System.Net.Http; using System.Threading.Tasks; -namespace _02_commands_framework.Services +namespace TextCommandFramework.Services { public class PictureService { diff --git a/samples/02_commands_framework/02_commands_framework.csproj b/samples/TextCommandFramework/_TextCommandFramework.csproj similarity index 90% rename from samples/02_commands_framework/02_commands_framework.csproj rename to samples/TextCommandFramework/_TextCommandFramework.csproj index 30c25e846..ee64205f5 100644 --- a/samples/02_commands_framework/02_commands_framework.csproj +++ b/samples/TextCommandFramework/_TextCommandFramework.csproj @@ -3,6 +3,7 @@ Exe net5.0 + TextCommandFramework diff --git a/samples/04_webhook_client/Program.cs b/samples/WebhookClient/Program.cs similarity index 97% rename from samples/04_webhook_client/Program.cs rename to samples/WebhookClient/Program.cs index f3a50036c..7b2539302 100644 --- a/samples/04_webhook_client/Program.cs +++ b/samples/WebhookClient/Program.cs @@ -2,7 +2,7 @@ using Discord; using Discord.Webhook; using System.Threading.Tasks; -namespace _04_webhook_client +namespace WebHookClient { // This is a minimal example of using Discord.Net's Webhook Client // Webhooks are send-only components of Discord that allow you to make a POST request diff --git a/samples/04_webhook_client/04_webhook_client.csproj b/samples/WebhookClient/_WebhookClient.csproj similarity index 69% rename from samples/04_webhook_client/04_webhook_client.csproj rename to samples/WebhookClient/_WebhookClient.csproj index c8d0c9ad3..91131894d 100644 --- a/samples/04_webhook_client/04_webhook_client.csproj +++ b/samples/WebhookClient/_WebhookClient.csproj @@ -2,8 +2,8 @@ Exe - netcoreapp2.2 - _04_webhook_client + net5.0 + WebHookClient diff --git a/samples/_idn/Inspector.cs b/samples/_idn/Inspector.cs new file mode 100644 index 000000000..1544c8d07 --- /dev/null +++ b/samples/_idn/Inspector.cs @@ -0,0 +1,74 @@ +using System.Collections; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace Idn +{ + public static class Inspector + { + public static string Inspect(object value) + { + var builder = new StringBuilder(); + if (value != null) + { + var type = value.GetType().GetTypeInfo(); + builder.AppendLine($"[{type.Namespace}.{type.Name}]"); + builder.AppendLine($"{InspectProperty(value)}"); + + if (value is IEnumerable) + { + var items = (value as IEnumerable).Cast().ToArray(); + if (items.Length > 0) + { + builder.AppendLine(); + foreach (var item in items) + builder.AppendLine($"- {InspectProperty(item)}"); + } + } + else + { + var groups = type.GetProperties(BindingFlags.Instance | BindingFlags.Public) + .Where(x => x.GetIndexParameters().Length == 0) + .GroupBy(x => x.Name) + .OrderBy(x => x.Key) + .ToArray(); + if (groups.Length > 0) + { + builder.AppendLine(); + int pad = groups.Max(x => x.Key.Length) + 1; + foreach (var group in groups) + builder.AppendLine($"{group.Key.PadRight(pad, ' ')}{InspectProperty(group.First().GetValue(value))}"); + } + } + } + else + builder.AppendLine("null"); + return builder.ToString(); + } + + private static string InspectProperty(object obj) + { + if (obj == null) + return "null"; + + var type = obj.GetType(); + + var debuggerDisplay = type.GetProperty("DebuggerDisplay", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (debuggerDisplay != null) + return debuggerDisplay.GetValue(obj).ToString(); + + var toString = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Where(x => x.Name == "ToString" && x.DeclaringType != typeof(object)) + .FirstOrDefault(); + if (toString != null) + return obj.ToString(); + + var count = type.GetProperty("Count", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (count != null) + return $"[{count.GetValue(obj)} Items]"; + + return obj.ToString(); + } + } +} diff --git a/samples/_idn/Program.cs b/samples/_idn/Program.cs new file mode 100644 index 000000000..aab9924f9 --- /dev/null +++ b/samples/_idn/Program.cs @@ -0,0 +1,152 @@ +using Discord; +using Discord.WebSocket; +using Microsoft.CodeAnalysis.CSharp.Scripting; +using Microsoft.CodeAnalysis.Scripting; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Idn +{ + public class Program + { + public static readonly string[] Imports = + { + "System", + "System.Collections.Generic", + "System.Linq", + "System.Threading.Tasks", + "System.Diagnostics", + "System.IO", + "Discord", + "Discord.Rest", + "Discord.WebSocket", + "idn" + }; + + static async Task Main(string[] args) + { + var token = File.ReadAllText("token.ignore"); + var client = new DiscordSocketClient(new DiscordSocketConfig { LogLevel = LogSeverity.Debug }); + var logQueue = new ConcurrentQueue(); + var logCancelToken = new CancellationTokenSource(); + int presenceUpdates = 0; + + client.Log += msg => + { + logQueue.Enqueue(msg); + return Task.CompletedTask; + }; + Console.CancelKeyPress += (_ev, _s) => + { + logCancelToken.Cancel(); + }; + + var logTask = Task.Run(async () => + { + var fs = new FileStream("idn.log", FileMode.Append); + var logStringBuilder = new StringBuilder(200); + string logString = ""; + + byte[] helloBytes = Encoding.UTF8.GetBytes($"### new log session: {DateTime.Now} ###\n\n"); + await fs.WriteAsync(helloBytes); + + while (!logCancelToken.IsCancellationRequested) + { + if (logQueue.TryDequeue(out var msg)) + { + if (msg.Message?.IndexOf("PRESENCE_UPDATE)") > 0) + { + presenceUpdates++; + continue; + } + + _ = msg.ToString(builder: logStringBuilder); + logStringBuilder.AppendLine(); + logString = logStringBuilder.ToString(); + + Debug.Write(logString, "DNET"); + await fs.WriteAsync(Encoding.UTF8.GetBytes(logString)); + } + await fs.FlushAsync(); + try + { + await Task.Delay(100, logCancelToken.Token); + } + finally { } + } + + byte[] goodbyeBytes = Encoding.UTF8.GetBytes($"#!! end log session: {DateTime.Now} !!#\n\n\n"); + await fs.WriteAsync(goodbyeBytes); + await fs.DisposeAsync(); + }); + + await client.LoginAsync(TokenType.Bot, token); + await client.StartAsync(); + + var options = ScriptOptions.Default + .AddReferences(GetAssemblies().ToArray()) + .AddImports(Imports); + + var globals = new ScriptGlobals + { + Client = client, + PUCount = -1, + }; + + while (true) + { + Console.Write("> "); + string input = Console.ReadLine(); + + if (input == "quit!") + { + break; + } + + object eval; + try + { + globals.PUCount = presenceUpdates; + eval = await CSharpScript.EvaluateAsync(input, options, globals); + } + catch (Exception e) + { + eval = e; + } + Console.WriteLine(Inspector.Inspect(eval)); + } + + await client.StopAsync(); + client.Dispose(); + logCancelToken.Cancel(); + try + { await logTask; } + finally { Console.WriteLine("goodbye!"); } + } + + static IEnumerable GetAssemblies() + { + var Assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies(); + foreach (var a in Assemblies) + { + var asm = Assembly.Load(a); + yield return asm; + } + yield return Assembly.GetEntryAssembly(); + } + + public class ScriptGlobals + { + public DiscordSocketClient Client { get; set; } + public int PUCount { get; set; } + } + } +} diff --git a/samples/_idn/idn.csproj b/samples/_idn/idn.csproj new file mode 100644 index 000000000..fafb3df3f --- /dev/null +++ b/samples/_idn/idn.csproj @@ -0,0 +1,16 @@ + + + + Exe + net5.0 + + + + + + + + + + + diff --git a/samples/_idn/logview.ps1 b/samples/_idn/logview.ps1 new file mode 100644 index 000000000..0857475f5 --- /dev/null +++ b/samples/_idn/logview.ps1 @@ -0,0 +1 @@ +Get-Content .\bin\Debug\netcoreapp3.1\idn.log -Tail 3 -Wait \ No newline at end of file diff --git a/samples/idn/Program.cs b/samples/idn/Program.cs index abc315a2d..aab9924f9 100644 --- a/samples/idn/Program.cs +++ b/samples/idn/Program.cs @@ -1,17 +1,17 @@ +using Discord; +using Discord.WebSocket; +using Microsoft.CodeAnalysis.CSharp.Scripting; +using Microsoft.CodeAnalysis.Scripting; using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CSharp.Scripting; -using Microsoft.CodeAnalysis.Scripting; -using Discord; -using Discord.WebSocket; -using System.Collections.Concurrent; -using System.Threading; using System.Text; -using System.Diagnostics; +using System.Threading; +using System.Threading.Tasks; namespace Idn { diff --git a/src/Discord.Net.Examples/Core/Entities/Channels/IGuildChannel.Examples.cs b/src/Discord.Net.Examples/Core/Entities/Channels/IGuildChannel.Examples.cs index d382ddbf3..8205ad50f 100644 --- a/src/Discord.Net.Examples/Core/Entities/Channels/IGuildChannel.Examples.cs +++ b/src/Discord.Net.Examples/Core/Entities/Channels/IGuildChannel.Examples.cs @@ -1,6 +1,6 @@ +using JetBrains.Annotations; using System; using System.Threading.Tasks; -using JetBrains.Annotations; namespace Discord.Net.Examples.Core.Entities.Channels { @@ -11,8 +11,10 @@ namespace Discord.Net.Examples.Core.Entities.Channels public async Task MuteRoleAsync(IRole role, IGuildChannel channel) { - if (role == null) throw new ArgumentNullException(nameof(role)); - if (channel == null) throw new ArgumentNullException(nameof(channel)); + if (role == null) + throw new ArgumentNullException(nameof(role)); + if (channel == null) + throw new ArgumentNullException(nameof(channel)); // Fetches the previous overwrite and bail if one is found var previousOverwrite = channel.GetPermissionOverwrite(role); @@ -29,8 +31,10 @@ namespace Discord.Net.Examples.Core.Entities.Channels public async Task MuteUserAsync(IGuildUser user, IGuildChannel channel) { - if (user == null) throw new ArgumentNullException(nameof(user)); - if (channel == null) throw new ArgumentNullException(nameof(channel)); + if (user == null) + throw new ArgumentNullException(nameof(user)); + if (channel == null) + throw new ArgumentNullException(nameof(channel)); // Fetches the previous overwrite and bail if one is found var previousOverwrite = channel.GetPermissionOverwrite(user); diff --git a/src/Discord.Net.Examples/Core/Entities/Channels/IMessageChannel.Examples.cs b/src/Discord.Net.Examples/Core/Entities/Channels/IMessageChannel.Examples.cs index d920e9710..9b4aee53c 100644 --- a/src/Discord.Net.Examples/Core/Entities/Channels/IMessageChannel.Examples.cs +++ b/src/Discord.Net.Examples/Core/Entities/Channels/IMessageChannel.Examples.cs @@ -1,8 +1,8 @@ +using JetBrains.Annotations; using System; using System.Linq; using System.Net.Http; using System.Threading.Tasks; -using JetBrains.Annotations; namespace Discord.Net.Examples.Core.Entities.Channels { @@ -90,7 +90,7 @@ namespace Discord.Net.Examples.Core.Entities.Channels #region SendFileAsync.FilePath.EmbeddedImage await channel.SendFileAsync("b1nzy.jpg", - embed: new EmbedBuilder {ImageUrl = "attachment://b1nzy.jpg"}.Build()); + embed: new EmbedBuilder { ImageUrl = "attachment://b1nzy.jpg" }.Build()); #endregion @@ -99,13 +99,14 @@ namespace Discord.Net.Examples.Core.Entities.Channels using (var b1nzyStream = await httpClient.GetStreamAsync("https://example.com/b1nzy")) await channel.SendFileAsync(b1nzyStream, "b1nzy.jpg", - embed: new EmbedBuilder {ImageUrl = "attachment://b1nzy.jpg"}.Build()); + embed: new EmbedBuilder { ImageUrl = "attachment://b1nzy.jpg" }.Build()); #endregion #region EnterTypingState - using (channel.EnterTypingState()) await LongRunningAsync(); + using (channel.EnterTypingState()) + await LongRunningAsync(); #endregion } diff --git a/src/Discord.Net.Examples/Core/Entities/Users/IUser.Examples.cs b/src/Discord.Net.Examples/Core/Entities/Users/IUser.Examples.cs index 83daedaa0..5a6712901 100644 --- a/src/Discord.Net.Examples/Core/Entities/Users/IUser.Examples.cs +++ b/src/Discord.Net.Examples/Core/Entities/Users/IUser.Examples.cs @@ -1,7 +1,7 @@ +using JetBrains.Annotations; using System; using System.Net; using System.Threading.Tasks; -using JetBrains.Annotations; namespace Discord.Net.Examples.Core.Entities.Users { diff --git a/src/Discord.Net.Examples/WebSocket/BaseSocketClient.Events.Examples.cs b/src/Discord.Net.Examples/WebSocket/BaseSocketClient.Events.Examples.cs index 27d393c07..57c9dcd04 100644 --- a/src/Discord.Net.Examples/WebSocket/BaseSocketClient.Events.Examples.cs +++ b/src/Discord.Net.Examples/WebSocket/BaseSocketClient.Events.Examples.cs @@ -1,8 +1,8 @@ +using Discord.WebSocket; +using JetBrains.Annotations; using System; using System.Linq; using System.Threading.Tasks; -using Discord.WebSocket; -using JetBrains.Annotations; namespace Discord.Net.Examples.WebSocket { @@ -74,7 +74,7 @@ namespace Discord.Net.Examples.WebSocket #region MessageReceived - private readonly ulong[] _targetUserIds = {168693960628371456, 53905483156684800}; + private readonly ulong[] _targetUserIds = { 168693960628371456, 53905483156684800 }; public void HookMessageReceived(BaseSocketClient client) => client.MessageReceived += HandleMessageReceived; @@ -82,9 +82,11 @@ namespace Discord.Net.Examples.WebSocket public Task HandleMessageReceived(SocketMessage message) { // check if the message is a user message as opposed to a system message (e.g. Clyde, pins, etc.) - if (!(message is SocketUserMessage userMessage)) return Task.CompletedTask; + if (!(message is SocketUserMessage userMessage)) + return Task.CompletedTask; // check if the message origin is a guild message channel - if (!(userMessage.Channel is SocketTextChannel textChannel)) return Task.CompletedTask; + if (!(userMessage.Channel is SocketTextChannel textChannel)) + return Task.CompletedTask; // check if the target user was mentioned var targetUsers = userMessage.MentionedUsers.Where(x => _targetUserIds.Contains(x.Id)); foreach (var targetUser in targetUsers) @@ -103,7 +105,8 @@ namespace Discord.Net.Examples.WebSocket public async Task HandleMessageDelete(Cacheable cachedMessage, Cacheable cachedChannel) { // check if the message exists in cache; if not, we cannot report what was removed - if (!cachedMessage.HasValue) return; + if (!cachedMessage.HasValue) + return; // gets or downloads the channel if it's not in the cache IMessageChannel channel = await cachedChannel.GetOrDownloadAsync(); var message = cachedMessage.Value;