diff --git a/TelegramBotBase/Base/FormBase.cs b/TelegramBotBase/Base/FormBase.cs
index 093aa5a..efa1a71 100644
--- a/TelegramBotBase/Base/FormBase.cs
+++ b/TelegramBotBase/Base/FormBase.cs
@@ -191,6 +191,15 @@ namespace TelegramBotBase.Form
}
+ ///
+ /// Gets invoked, when a messages has been edited.
+ ///
+ ///
+ ///
+ public virtual async Task Edited(MessageResult message)
+ {
+
+ }
///
diff --git a/TelegramBotBase/Base/MessageClient.cs b/TelegramBotBase/Base/MessageClient.cs
index 69e7974..d57d480 100644
--- a/TelegramBotBase/Base/MessageClient.cs
+++ b/TelegramBotBase/Base/MessageClient.cs
@@ -23,6 +23,8 @@ namespace TelegramBotBase.Base
private static object __evOnMessage = new object();
+ private static object __evOnMessageEdit = new object();
+
private static object __evCallbackQuery = new object();
@@ -84,13 +86,11 @@ namespace TelegramBotBase.Base
{
this.TelegramClient.Timeout = new TimeSpan(0, 0, 30);
-
this.TelegramClient.OnMessage += TelegramClient_OnMessage;
+ this.TelegramClient.OnMessageEdited += TelegramClient_OnMessageEdited;
this.TelegramClient.OnCallbackQuery += TelegramClient_OnCallbackQuery;
-
}
-
private async void TelegramClient_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
{
//Skip empty messages by default
@@ -109,6 +109,25 @@ namespace TelegramBotBase.Base
}
}
+
+ private async void TelegramClient_OnMessageEdited(object sender, Telegram.Bot.Args.MessageEventArgs e)
+ {
+ //Skip empty messages by default
+ if (e.Message == null)
+ return;
+
+ try
+ {
+ var mr = new MessageResult(e);
+ mr.Client = this;
+ OnMessageEdit(mr);
+ }
+ catch
+ {
+
+ }
+ }
+
private async void TelegramClient_OnCallbackQuery(object sender, Telegram.Bot.Args.CallbackQueryEventArgs e)
{
try
@@ -143,6 +162,23 @@ namespace TelegramBotBase.Base
(this.__Events[__evOnMessage] as EventHandler)?.Invoke(this, result);
}
+ public event EventHandler MessageEdit
+ {
+ add
+ {
+ this.__Events.AddHandler(__evOnMessageEdit, value);
+ }
+ remove
+ {
+ this.__Events.RemoveHandler(__evOnMessageEdit, value);
+ }
+ }
+
+ public void OnMessageEdit(MessageResult result)
+ {
+ (this.__Events[__evOnMessageEdit] as EventHandler)?.Invoke(this, result);
+ }
+
public event EventHandler Action
{
add
diff --git a/TelegramBotBase/BotBase.cs b/TelegramBotBase/BotBase.cs
index 6069582..668338b 100644
--- a/TelegramBotBase/BotBase.cs
+++ b/TelegramBotBase/BotBase.cs
@@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using Telegram.Bot;
using TelegramBotBase.Args;
+using TelegramBotBase.Attributes;
using TelegramBotBase.Base;
using TelegramBotBase.Form;
using TelegramBotBase.Interfaces;
@@ -165,6 +166,7 @@ namespace TelegramBotBase
return;
this.Client.Message += Client_Message;
+ this.Client.MessageEdit += Client_MessageEdit;
this.Client.Action += Client_Action;
@@ -202,7 +204,7 @@ namespace TelegramBotBase
}
}
- private void Client_Message(object sender, MessageResult e)
+ private async void Client_Message(object sender, MessageResult e)
{
if (this.SkipAllMessages)
return;
@@ -219,7 +221,7 @@ namespace TelegramBotBase
ds?.OnMessageReceived(new MessageReceivedEventArgs(e.Message));
- Client_TryMessage(sender, e);
+ await Client_TryMessage(sender, e);
}
catch (Telegram.Bot.Exceptions.ApiRequestException ex)
{
@@ -232,7 +234,7 @@ namespace TelegramBotBase
}
}
- private async void Client_TryMessage(object sender, MessageResult e)
+ private async Task Client_TryMessage(object sender, MessageResult e)
{
DeviceSession ds = e.Device;
if (ds == null)
@@ -245,6 +247,7 @@ namespace TelegramBotBase
OnSessionBegins(new SessionBeginEventArgs(e.DeviceId, ds));
}
+ ds.ChatTitle = e.Message.Chat.Username ?? e.Message.Chat.Title;
ds.LastAction = DateTime.Now;
ds.LastMessage = e.Message;
@@ -303,6 +306,61 @@ namespace TelegramBotBase
}
+ private async void Client_MessageEdit(object sender, MessageResult e)
+ {
+ if (this.SkipAllMessages)
+ return;
+
+ try
+ {
+ DeviceSession ds = this.Sessions.GetSession(e.DeviceId);
+ e.Device = ds;
+
+ if (LogAllMessages)
+ {
+ OnMessage(new MessageIncomeEventArgs(e.DeviceId, ds, e));
+ }
+
+ //Call same, to handle received liked edited
+ ds?.OnMessageReceived(new MessageReceivedEventArgs(e.Message));
+
+ await Client_TryMessageEdit(sender, e);
+ }
+ catch (Telegram.Bot.Exceptions.ApiRequestException ex)
+ {
+
+ }
+ catch (Exception ex)
+ {
+ DeviceSession ds = this.Sessions.GetSession(e.DeviceId);
+ OnException(new SystemExceptionEventArgs(e.Message.Text, ds?.DeviceId ?? -1, ds, ex));
+ }
+ }
+
+ private async Task Client_TryMessageEdit(object sender, MessageResult e)
+ {
+ DeviceSession ds = e.Device;
+ if (ds == null)
+ {
+ ds = await this.Sessions.StartSession(e.DeviceId);
+ e.Device = ds;
+ }
+
+ ds.ChatTitle = e.Message.Chat.Username ?? e.Message.Chat.Title;
+ ds.LastAction = DateTime.Now;
+ ds.LastMessage = e.Message;
+
+ //Pre Loading Event
+ await ds.ActiveForm.Edited(e);
+
+ //When form has been switched due navigation within the edit method, reopen Client_Message
+ if (ds.FormSwitched)
+ {
+ await Client_TryMessage(sender, e);
+ }
+
+ }
+
private void Client_Action(object sender, MessageResult e)
{
try
@@ -333,7 +391,7 @@ namespace TelegramBotBase
e.Device = ds;
}
-
+ ds.ChatTitle = e.Message.Chat.Username ?? e.Message.Chat.Title;
ds.LastAction = DateTime.Now;
ds.LastMessage = e.Message;
diff --git a/TelegramBotBase/Form/GroupForm.cs b/TelegramBotBase/Form/GroupForm.cs
index 3d7e115..b610de1 100644
--- a/TelegramBotBase/Form/GroupForm.cs
+++ b/TelegramBotBase/Form/GroupForm.cs
@@ -49,12 +49,16 @@ namespace TelegramBotBase.Form
default:
- OnMessage(message);
+ await OnMessage(message);
break;
}
+ }
+ public override async Task Edited(MessageResult message)
+ {
+ await OnMessageEdit(message);
}
public virtual async Task OnMemberChanges(MemberChangeEventArgs e)
@@ -73,5 +77,10 @@ namespace TelegramBotBase.Form
{
}
+
+ public virtual async Task OnMessageEdit(MessageResult e)
+ {
+
+ }
}
}
diff --git a/TelegramBotBase/Sessions/DeviceSession.cs b/TelegramBotBase/Sessions/DeviceSession.cs
index 3c4c190..b86125f 100644
--- a/TelegramBotBase/Sessions/DeviceSession.cs
+++ b/TelegramBotBase/Sessions/DeviceSession.cs
@@ -29,6 +29,11 @@ namespace TelegramBotBase.Sessions
///
public long DeviceId { get; set; }
+ ///
+ /// Username of user or group
+ ///
+ public String ChatTitle { get; set; }
+
///
/// When did any last action happend (message received or button clicked)
///