diff --git a/Telegrator.Analyzers/GeneratedKeyboardMarkupGenerator.cs b/Telegrator.Analyzers/GeneratedKeyboardMarkupGenerator.cs index d7cf91a..e0e8284 100644 --- a/Telegrator.Analyzers/GeneratedKeyboardMarkupGenerator.cs +++ b/Telegrator.Analyzers/GeneratedKeyboardMarkupGenerator.cs @@ -9,9 +9,11 @@ namespace Telegrator.Analyzers [Generator(LanguageNames.CSharp)] public class GeneratedKeyboardMarkupGenerator : IIncrementalGenerator { + // Return types private const string InlineReturnType = "InlineKeyboardMarkup"; private const string ReplyReturnType = "ReplyKeyboardMarkup"; + // Attribute names private const string CallbackDataAttribute = "CallbackButton"; private const string CallbackGameAttribute = "GameButton"; private const string CopyTextAttribute = "CopyTextButton"; @@ -21,12 +23,21 @@ namespace Telegrator.Analyzers private const string QueryChosenAttribute = "QueryChosenButton"; private const string QueryCurrentAttribute = "QueryCurrentButton"; private const string UrlRedirectAttribute = "UrlRedirectButton"; + private const string RequestChatAttribute = "RequestChatButton"; + private const string RequestContactAttribute = "RequestContactButton"; + private const string RequestLocationAttribute = "RequestLocationButton"; + private const string RequestPoolAttribute = "RequestPoolButton"; + private const string RequestUsersAttribute = "RequestUsersButton"; private const string WebAppAttribute = "WebApp"; + // Markup lists private static readonly string[] InlineAttributes = [CallbackDataAttribute, CallbackGameAttribute, CopyTextAttribute, LoginRequestAttribute, PayRequestAttribute, UrlRedirectAttribute, WebAppAttribute, SwitchQueryAttribute, QueryChosenAttribute, QueryCurrentAttribute]; - private static readonly string[] ReplyAttributes = []; + private static readonly string[] ReplyAttributes = [RequestChatAttribute, RequestContactAttribute, RequestLocationAttribute, RequestPoolAttribute, RequestUsersAttribute, WebAppAttribute]; + + // Usings private static readonly string[] DefaultUsings = ["Telegram.Bot.Types.ReplyMarkups"]; + // Markup layouts private static readonly Dictionary InlineKeyboardLayout = new Dictionary() { { CallbackDataAttribute, AccessExpression("InlineKeyboardButton", "WithCallbackData") }, @@ -43,21 +54,29 @@ namespace Telegrator.Analyzers private static readonly Dictionary ReplyKeyboardLayout = new Dictionary() { - + { RequestChatAttribute, AccessExpression("KeyboardButton", "WithRequestChat") }, + { RequestContactAttribute, AccessExpression("KeyboardButton", "WithRequestContact") }, + { RequestLocationAttribute, AccessExpression("KeyboardButton", "WithRequestLocation") }, + { RequestPoolAttribute, AccessExpression("KeyboardButton", "WithRequestPoll") }, + { RequestUsersAttribute, AccessExpression("KeyboardButton", "WithRequestUsers") }, + { WebAppAttribute, AccessExpression("KeyboardButton", "WithWebApp") } }; + // Markup map private static readonly Dictionary> LayoutNames = new Dictionary>() { { InlineReturnType, InlineKeyboardLayout }, { ReplyReturnType, ReplyKeyboardLayout } }; + // Diagnostic descriptors private static readonly DiagnosticDescriptor WrongReturnType = new DiagnosticDescriptor("TG_1001", "Wrong return type", string.Empty, "Modelling", DiagnosticSeverity.Error, true); - private static readonly DiagnosticDescriptor UnsupportedAttribute = new DiagnosticDescriptor("TG_1002", "Unsupported attribute", string.Empty, "Modelling", DiagnosticSeverity.Error, true); + private static readonly DiagnosticDescriptor UnsupportedAttribute = new DiagnosticDescriptor("TG_1002", "Unsupported or invalid attribute", string.Empty, "Modelling", DiagnosticSeverity.Error, true); private static readonly DiagnosticDescriptor NotPartialMethod = new DiagnosticDescriptor("TG_1003", "Not a partial method", string.Empty, "Modelling", DiagnosticSeverity.Error, true); private static readonly DiagnosticDescriptor UseBodylessMethod = new DiagnosticDescriptor("TG_1004", "Use bodyless method", string.Empty, "Modelling", DiagnosticSeverity.Error, true); private static readonly DiagnosticDescriptor UseParametrlessMethod = new DiagnosticDescriptor("TG_1005", "Use parametrless method", string.Empty, "Modelling", DiagnosticSeverity.Error, true); + // Trivias private static SyntaxTrivia TabulationTrivia => SyntaxFactory.SyntaxTrivia(SyntaxKind.WhitespaceTrivia, "\t"); private static SyntaxTrivia WhitespaceTrivia => SyntaxFactory.SyntaxTrivia(SyntaxKind.WhitespaceTrivia, " "); private static SyntaxTrivia NewLineTrivia => SyntaxFactory.SyntaxTrivia(SyntaxKind.EndOfLineTrivia, "\n"); diff --git a/Telegrator.Hosting.Web/Telegrator.Hosting.Web.csproj b/Telegrator.Hosting.Web/Telegrator.Hosting.Web.csproj index 628d940..3999310 100644 --- a/Telegrator.Hosting.Web/Telegrator.Hosting.Web.csproj +++ b/Telegrator.Hosting.Web/Telegrator.Hosting.Web.csproj @@ -15,7 +15,7 @@ True LICENSE README.md - 1.15.0 + 1.15.1 diff --git a/Telegrator.Hosting/Telegrator.Hosting.csproj b/Telegrator.Hosting/Telegrator.Hosting.csproj index 3f6aa92..8c07210 100644 --- a/Telegrator.Hosting/Telegrator.Hosting.csproj +++ b/Telegrator.Hosting/Telegrator.Hosting.csproj @@ -16,7 +16,7 @@ True LICENSE README.md - 1.15.0 + 1.15.1 diff --git a/Telegrator.sln b/Telegrator.sln index 9ac3a7a..dec83f8 100644 --- a/Telegrator.sln +++ b/Telegrator.sln @@ -20,8 +20,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telegrator.Hosting.Web", "T EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telegrator.RoslynGenerators", "dev\Telegrator.RoslynGenerators\Telegrator.RoslynGenerators.csproj", "{93658B7F-C651-4C78-2CB1-2C0AE00C45B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SosalBot", "..\SosalBot\SosalBot\SosalBot.csproj", "{D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AnalyzersDebug|Any CPU = AnalyzersDebug|Any CPU @@ -65,12 +63,6 @@ Global {93658B7F-C651-4C78-2CB1-2C0AE00C45B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {93658B7F-C651-4C78-2CB1-2C0AE00C45B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {93658B7F-C651-4C78-2CB1-2C0AE00C45B5}.Release|Any CPU.Build.0 = Release|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.AnalyzersDebug|Any CPU.ActiveCfg = Release|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.AnalyzersDebug|Any CPU.Build.0 = Release|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D6AA4D47-0DCE-520E-5779-A14EA9CB1DEC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Telegrator/Markups/GeneratedReplyKeybooardMarkupAttributes.cs b/Telegrator/Markups/GeneratedReplyKeybooardMarkupAttributes.cs deleted file mode 100644 index 1a72633..0000000 --- a/Telegrator/Markups/GeneratedReplyKeybooardMarkupAttributes.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Telegrator.Markups -{ - internal class GeneratedReplyKeybooardMarkupAttributes - { - } -} diff --git a/Telegrator/Markups/KeyboardMapper.cs b/Telegrator/Markups/KeyboardMapper.cs new file mode 100644 index 0000000..33a6442 --- /dev/null +++ b/Telegrator/Markups/KeyboardMapper.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using Telegram.Bot.Types.ReplyMarkups; + +namespace Telegrator.Markups +{ + /* + internal static class KeyboardMapper + { + public static InlineKeyboardMarkup MapInline(MemberInfo member) + { + + } + + public static ReplyKeyboardMarkup MapReply() + { + + } + } + */ +} diff --git a/Telegrator/Markups/GeneratedInlineKeyboardMarkupAttributes.cs b/Telegrator/Markups/KeyboardMarkupButtonAttributes.cs similarity index 76% rename from Telegrator/Markups/GeneratedInlineKeyboardMarkupAttributes.cs rename to Telegrator/Markups/KeyboardMarkupButtonAttributes.cs index 9e726ff..152f0f9 100644 --- a/Telegrator/Markups/GeneratedInlineKeyboardMarkupAttributes.cs +++ b/Telegrator/Markups/KeyboardMarkupButtonAttributes.cs @@ -132,4 +132,44 @@ namespace Telegrator.Markups /// public string Query { get; } = switchInlineQueryCurrentChat; } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class RequestChatButtonAttribute(string name, int requestId, bool chatIsChannel) : Attribute + { + public string Name { get; } = name; + + public int RequestId { get; } = requestId; + + public bool ChatIsChannel { get; } = chatIsChannel; + } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class RequestContactButtonAttribute(string name) : Attribute + { + public string Name { get; } = name; + } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class RequestLocationButtonAttribute(string name) : Attribute + { + public string Name { get; } = name; + } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class RequestPoolButtonAttribute(string name, KeyboardButtonPollType requestPoll) : Attribute + { + public string Name { get; } = name; + + public KeyboardButtonPollType PollType { get; } = requestPoll; + } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class RequestUsersButtonAttribute(string name, int requestId, int? maxQuantity = null) : Attribute + { + public string Name { get; } = name; + + public int RequestId { get; } = requestId; + + public int? MaxQuantity { get; } = maxQuantity; + } } diff --git a/Telegrator/Telegrator.csproj b/Telegrator/Telegrator.csproj index bc93138..11434b9 100644 --- a/Telegrator/Telegrator.csproj +++ b/Telegrator/Telegrator.csproj @@ -17,7 +17,7 @@ telegram;bot;mediator;attributes;aspect;hosting;host;framework;easy;simple;handlers README.md LICENSE - 1.15.0 + 1.15.1