diff --git a/TelegramBotBase.SourceGenerators/TelegramDeviceExtensionGenerator.cs b/TelegramBotBase.SourceGenerators/TelegramDeviceExtensionGenerator.cs index 39ea14f..ec63728 100644 --- a/TelegramBotBase.SourceGenerators/TelegramDeviceExtensionGenerator.cs +++ b/TelegramBotBase.SourceGenerators/TelegramDeviceExtensionGenerator.cs @@ -187,6 +187,7 @@ namespace TelegramBotBase var sourceCode = $$""" using System; using System.Threading.Tasks; + using TelegramBotBase.Interfaces; using TelegramBotBase.Sessions; using Telegram.Bot; using Telegram.Bot.Extensions; @@ -232,7 +233,7 @@ namespace TelegramBotBase sb.AppendLine(xml_comments); - sb.AppendLine($" public static async {method.ReturnType.ToDisplayString()} {method.Name}(this DeviceSession device, {parameters})"); + sb.AppendLine($" public static async {method.ReturnType.ToDisplayString()} {method.Name}(this IDeviceSession device, {parameters})"); sb.AppendLine($" {{"); diff --git a/TelegramBotBase/Args/BotCommandEventArgs.cs b/TelegramBotBase/Args/BotCommandEventArgs.cs index 02ec9d8..0b9f4d9 100644 --- a/TelegramBotBase/Args/BotCommandEventArgs.cs +++ b/TelegramBotBase/Args/BotCommandEventArgs.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using Telegram.Bot.Types; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Args; @@ -15,7 +15,7 @@ public class BotCommandEventArgs : EventArgs } public BotCommandEventArgs(string command, List parameters, Message message, long deviceId, - DeviceSession device) + IDeviceSession device) { Command = command; Parameters = parameters; @@ -30,7 +30,7 @@ public class BotCommandEventArgs : EventArgs public long DeviceId { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public bool Handled { get; set; } = false; diff --git a/TelegramBotBase/Args/MessageIncomeEventArgs.cs b/TelegramBotBase/Args/MessageIncomeEventArgs.cs index ddc0ac8..224cf67 100644 --- a/TelegramBotBase/Args/MessageIncomeEventArgs.cs +++ b/TelegramBotBase/Args/MessageIncomeEventArgs.cs @@ -1,11 +1,11 @@ using System; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Base; public class MessageIncomeEventArgs : EventArgs { - public MessageIncomeEventArgs(long deviceId, DeviceSession device, MessageResult message) + public MessageIncomeEventArgs(long deviceId, IDeviceSession device, MessageResult message) { DeviceId = deviceId; Device = device; @@ -14,7 +14,7 @@ public class MessageIncomeEventArgs : EventArgs public long DeviceId { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public MessageResult Message { get; set; } } \ No newline at end of file diff --git a/TelegramBotBase/Args/SessionBeginEventArgs.cs b/TelegramBotBase/Args/SessionBeginEventArgs.cs index 53a54b9..05ed68a 100644 --- a/TelegramBotBase/Args/SessionBeginEventArgs.cs +++ b/TelegramBotBase/Args/SessionBeginEventArgs.cs @@ -1,11 +1,11 @@ using System; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Base; public class SessionBeginEventArgs : EventArgs { - public SessionBeginEventArgs(long deviceId, DeviceSession device) + public SessionBeginEventArgs(long deviceId, IDeviceSession device) { DeviceId = deviceId; Device = device; @@ -13,5 +13,5 @@ public class SessionBeginEventArgs : EventArgs public long DeviceId { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } } \ No newline at end of file diff --git a/TelegramBotBase/Args/SystemExceptionEventArgs.cs b/TelegramBotBase/Args/SystemExceptionEventArgs.cs index 5fbaf69..7b95290 100644 --- a/TelegramBotBase/Args/SystemExceptionEventArgs.cs +++ b/TelegramBotBase/Args/SystemExceptionEventArgs.cs @@ -1,5 +1,5 @@ using System; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Args; @@ -9,7 +9,7 @@ public class SystemExceptionEventArgs : EventArgs { } - public SystemExceptionEventArgs(string command, long deviceId, DeviceSession device, Exception error) + public SystemExceptionEventArgs(string command, long deviceId, IDeviceSession device, Exception error) { Command = command; DeviceId = deviceId; @@ -21,7 +21,7 @@ public class SystemExceptionEventArgs : EventArgs public long DeviceId { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public Exception Error { get; set; } } \ No newline at end of file diff --git a/TelegramBotBase/Args/UnhandledCallEventArgs.cs b/TelegramBotBase/Args/UnhandledCallEventArgs.cs index 844bc43..8b60703 100644 --- a/TelegramBotBase/Args/UnhandledCallEventArgs.cs +++ b/TelegramBotBase/Args/UnhandledCallEventArgs.cs @@ -1,6 +1,6 @@ using System; using Telegram.Bot.Types; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Args; @@ -12,7 +12,7 @@ public class UnhandledCallEventArgs : EventArgs } public UnhandledCallEventArgs(string command, string rawData, long deviceId, int messageId, Message message, - DeviceSession device) : this() + IDeviceSession device) : this() { Command = command; RawData = rawData; @@ -26,7 +26,7 @@ public class UnhandledCallEventArgs : EventArgs public long DeviceId { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public string RawData { get; set; } diff --git a/TelegramBotBase/Base/ControlBase.cs b/TelegramBotBase/Base/ControlBase.cs index 4c25177..3e604aa 100644 --- a/TelegramBotBase/Base/ControlBase.cs +++ b/TelegramBotBase/Base/ControlBase.cs @@ -1,5 +1,5 @@ using System.Threading.Tasks; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Base; @@ -8,7 +8,7 @@ namespace TelegramBotBase.Base; /// public class ControlBase { - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public int Id { get; set; } diff --git a/TelegramBotBase/Base/FormBase.cs b/TelegramBotBase/Base/FormBase.cs index 160952f..823e1b7 100644 --- a/TelegramBotBase/Base/FormBase.cs +++ b/TelegramBotBase/Base/FormBase.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Form.Navigation; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; using static TelegramBotBase.Base.Async; namespace TelegramBotBase.Form; @@ -28,7 +28,7 @@ public class FormBase : IDisposable public NavigationController NavigationController { get; set; } - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public MessageClient Client { get; set; } diff --git a/TelegramBotBase/Base/ResultBase.cs b/TelegramBotBase/Base/ResultBase.cs index 69a4f74..1df1859 100644 --- a/TelegramBotBase/Base/ResultBase.cs +++ b/TelegramBotBase/Base/ResultBase.cs @@ -2,13 +2,13 @@ using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Types; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Base; public class ResultBase : EventArgs { - public DeviceSession Device { get; set; } + public IDeviceSession Device { get; set; } public virtual long DeviceId { get; set; } diff --git a/TelegramBotBase/Base/UpdateResult.cs b/TelegramBotBase/Base/UpdateResult.cs index de41c0a..ab172d5 100644 --- a/TelegramBotBase/Base/UpdateResult.cs +++ b/TelegramBotBase/Base/UpdateResult.cs @@ -1,11 +1,11 @@ using Telegram.Bot.Types; -using TelegramBotBase.Sessions; +using TelegramBotBase.Interfaces; namespace TelegramBotBase.Base; public class UpdateResult : ResultBase { - public UpdateResult(Update rawData, DeviceSession device) + public UpdateResult(Update rawData, IDeviceSession device) { RawData = rawData; Device = device; diff --git a/TelegramBotBase/Interfaces/IDeviceSession.cs b/TelegramBotBase/Interfaces/IDeviceSession.cs index 8e0d95a..3b3b2d0 100644 --- a/TelegramBotBase/Interfaces/IDeviceSession.cs +++ b/TelegramBotBase/Interfaces/IDeviceSession.cs @@ -1,10 +1,24 @@ using System; +using System.Threading.Tasks; +using Telegram.Bot.Types.Enums; +using Telegram.Bot.Types; using TelegramBotBase.Form; +using Telegram.Bot.Types.ReplyMarkups; +using TelegramBotBase.Args; +using TelegramBotBase.Base; +using Telegram.Bot; +using TelegramBotBase.Sessions; namespace TelegramBotBase.Interfaces; -internal interface IDeviceSession +public interface IDeviceSession : IDeviceSessionMethods { + MessageClient Client => ActiveForm.Client; + + int LastMessageId => LastMessage?.MessageId ?? -1; + + Message LastMessage { get; set; } + /// /// Device or chat id /// @@ -35,4 +49,6 @@ internal interface IDeviceSession /// contains if the form has been switched (navigated) /// bool FormSwitched { get; set; } + + } \ No newline at end of file diff --git a/TelegramBotBase/Interfaces/IDeviceSessionMethods.cs b/TelegramBotBase/Interfaces/IDeviceSessionMethods.cs new file mode 100644 index 0000000..8b68911 --- /dev/null +++ b/TelegramBotBase/Interfaces/IDeviceSessionMethods.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Telegram.Bot.Types.Enums; +using Telegram.Bot.Types.ReplyMarkups; +using Telegram.Bot.Types; +using TelegramBotBase.Form; +using Telegram.Bot; +using TelegramBotBase.Base; +using TelegramBotBase.Args; + +namespace TelegramBotBase.Interfaces +{ + public interface IDeviceSessionMethods + { + + string GetChatTitle(); + + Task BanUser(long userId, DateTime until = default); + + Task UnbanUser(long userId); + + Task ChangeChatPermissions(ChatPermissions permissions); + + Task RestrictUser(long userId, ChatPermissions permissions, bool? useIndependentGroupPermission = null, DateTime until = default); + + Task ConfirmAction(string callbackQueryId, string message = "", bool showAlert = false, + string urlToOpen = null); + + Task DeleteMessage(int messageId = -1); + + Task DeleteMessage(Message message); + + Task HideReplyKeyboard(string closedMsg = "Closed", bool autoDeleteResponse = true); + + Task Send(string text, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false, ParseMode parseMode = ParseMode.Markdown, + bool markdownV2AutoEscape = true); + + Task Send(string text, IReplyMarkup markup, int replyTo = 0, + bool disableNotification = false, ParseMode parseMode = ParseMode.Markdown, + bool markdownV2AutoEscape = true); + + Task Send(string text, InlineKeyboardMarkup markup, int replyTo = 0, + bool disableNotification = false, ParseMode parseMode = ParseMode.Markdown, + bool markdownV2AutoEscape = true); + + Task SetAction(ChatAction action); + + Task SendTextFile(string filename, string textcontent, Encoding encoding = null, + string caption = "", ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false); + + Task SendDocument(InputFile document, string caption = "", + ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false); + + + Task SendPhoto(InputFile file, string caption = null, ButtonForm buttons = null, + int replyTo = 0, bool disableNotification = false, + ParseMode parseMode = ParseMode.Markdown); + + Task SendVideo(InputFile file, string caption = null, ButtonForm buttons = null, + int replyTo = 0, bool disableNotification = false, + ParseMode parseMode = ParseMode.Markdown); + + + Task SendVideo(string url, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false, ParseMode parseMode = ParseMode.Markdown); + + Task SendVideo(string filename, byte[] video, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false, ParseMode parseMode = ParseMode.Markdown); + + Task SendLocalVideo(string filepath, ButtonForm buttons = null, int replyTo = 0, + bool disableNotification = false, + ParseMode parseMode = ParseMode.Markdown); + + Task Edit(int messageId, string text, ButtonForm buttons = null, + ParseMode parseMode = ParseMode.Markdown); + + + + Task Edit(int messageId, string text, InlineKeyboardMarkup markup, + ParseMode parseMode = ParseMode.Markdown); + + Task Edit(Message message, ButtonForm buttons = null, + ParseMode parseMode = ParseMode.Markdown); + + Task EditReplyMarkup(int messageId, ButtonForm bf); + + Task RequestContact(string buttonText = "Send your contact", + string requestMessage = "Give me your phone number!", + bool oneTimeOnly = true); + + Task RequestLocation(string buttonText = "Send your location", + string requestMessage = "Give me your location!", + bool oneTimeOnly = true); + + + Task GetChatUser(long userId); + + + event Async.AsyncEventHandler MessageSent; + + event EventHandler MessageReceived; + + event EventHandler MessageDeleted; + + Task Api(Func call); + + Task Api(Func> call); + + T Raw(Func call); + + } +} diff --git a/TelegramBotBase/Interfaces/IMessageLoopFactory.cs b/TelegramBotBase/Interfaces/IMessageLoopFactory.cs index 951b7fa..b2b9eac 100644 --- a/TelegramBotBase/Interfaces/IMessageLoopFactory.cs +++ b/TelegramBotBase/Interfaces/IMessageLoopFactory.cs @@ -2,13 +2,12 @@ using System.Threading.Tasks; using TelegramBotBase.Args; using TelegramBotBase.Base; -using TelegramBotBase.Sessions; namespace TelegramBotBase.Interfaces; public interface IMessageLoopFactory { - Task MessageLoop(BotBase bot, DeviceSession session, UpdateResult ur, MessageResult e); + Task MessageLoop(BotBase bot, IDeviceSession session, UpdateResult ur, MessageResult e); event EventHandler UnhandledCall; } \ No newline at end of file diff --git a/TelegramBotBase/MessageLoops/FormBaseMessageLoop.cs b/TelegramBotBase/MessageLoops/FormBaseMessageLoop.cs index bdc6374..d60f7bd 100644 --- a/TelegramBotBase/MessageLoops/FormBaseMessageLoop.cs +++ b/TelegramBotBase/MessageLoops/FormBaseMessageLoop.cs @@ -5,7 +5,6 @@ using Telegram.Bot.Types.Enums; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Interfaces; -using TelegramBotBase.Sessions; namespace TelegramBotBase.MessageLoops; @@ -18,7 +17,7 @@ public class FormBaseMessageLoop : IMessageLoopFactory private readonly EventHandlerList _events = new(); - public async Task MessageLoop(BotBase bot, DeviceSession session, UpdateResult ur, MessageResult mr) + public async Task MessageLoop(BotBase bot, IDeviceSession session, UpdateResult ur, MessageResult mr) { var update = ur.RawData; diff --git a/TelegramBotBase/MessageLoops/FullMessageLoop.cs b/TelegramBotBase/MessageLoops/FullMessageLoop.cs index a0c1c51..22a390f 100644 --- a/TelegramBotBase/MessageLoops/FullMessageLoop.cs +++ b/TelegramBotBase/MessageLoops/FullMessageLoop.cs @@ -5,7 +5,6 @@ using Telegram.Bot.Types.Enums; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Interfaces; -using TelegramBotBase.Sessions; namespace TelegramBotBase.MessageLoops; @@ -18,7 +17,7 @@ public class FullMessageLoop : IMessageLoopFactory private readonly EventHandlerList _events = new(); - public async Task MessageLoop(BotBase bot, DeviceSession session, UpdateResult ur, MessageResult mr) + public async Task MessageLoop(BotBase bot, IDeviceSession session, UpdateResult ur, MessageResult mr) { var update = ur.RawData; diff --git a/TelegramBotBase/MessageLoops/MinimalMessageLoop.cs b/TelegramBotBase/MessageLoops/MinimalMessageLoop.cs index 8f72f15..c87b393 100644 --- a/TelegramBotBase/MessageLoops/MinimalMessageLoop.cs +++ b/TelegramBotBase/MessageLoops/MinimalMessageLoop.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Interfaces; -using TelegramBotBase.Sessions; namespace TelegramBotBase.MessageLoops; @@ -17,7 +16,7 @@ public class MinimalMessageLoop : IMessageLoopFactory private readonly EventHandlerList _events = new(); - public async Task MessageLoop(BotBase bot, DeviceSession session, UpdateResult ur, MessageResult mr) + public async Task MessageLoop(BotBase bot, IDeviceSession session, UpdateResult ur, MessageResult mr) { var update = ur.RawData; diff --git a/TelegramBotBase/SessionManager.cs b/TelegramBotBase/SessionManager.cs index 7e9d257..5e6975e 100644 --- a/TelegramBotBase/SessionManager.cs +++ b/TelegramBotBase/SessionManager.cs @@ -21,7 +21,7 @@ public class SessionManager public SessionManager(BotBase botBase) { BotBase = botBase; - SessionList = new Dictionary(); + SessionList = new Dictionary(); } /// @@ -32,7 +32,7 @@ public class SessionManager /// /// A list of all active sessions. /// - public Dictionary SessionList { get; set; } + public Dictionary SessionList { get; set; } /// @@ -45,7 +45,7 @@ public class SessionManager /// /// /// - public DeviceSession GetSession(long deviceId) + public IDeviceSession GetSession(long deviceId) { var ds = SessionList.FirstOrDefault(a => a.Key == deviceId).Value ?? null; return ds; @@ -57,7 +57,7 @@ public class SessionManager /// /// /// - public async Task StartSession(long deviceId) + public async Task StartSession(long deviceId) { var start = BotBase.StartFormFactory.CreateForm(); @@ -91,7 +91,7 @@ public class SessionManager /// Returns all active User Sessions. /// /// - public List GetUserSessions() + public List GetUserSessions() { return SessionList.Where(a => a.Key > 0).Select(a => a.Value).ToList(); } @@ -100,7 +100,7 @@ public class SessionManager /// Returns all active Group Sessions. /// /// - public List GetGroupSessions() + public List GetGroupSessions() { return SessionList.Where(a => a.Key < 0).Select(a => a.Value).ToList(); }