Adding Edited Features

- FormBase: adding Edited method
- MessageClient: adding MessageEdit event
- GroupForm: adding Edited method
- DeviceSession: adding ChatTitle
This commit is contained in:
FlorianDahn 2020-04-02 12:37:53 +07:00
parent 519a6fe41c
commit 6a62d73fe0
5 changed files with 125 additions and 8 deletions

View File

@ -191,6 +191,15 @@ namespace TelegramBotBase.Form
}
/// <summary>
/// Gets invoked, when a messages has been edited.
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public virtual async Task Edited(MessageResult message)
{
}
/// <summary>

View File

@ -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<MessageResult>)?.Invoke(this, result);
}
public event EventHandler<MessageResult> MessageEdit
{
add
{
this.__Events.AddHandler(__evOnMessageEdit, value);
}
remove
{
this.__Events.RemoveHandler(__evOnMessageEdit, value);
}
}
public void OnMessageEdit(MessageResult result)
{
(this.__Events[__evOnMessageEdit] as EventHandler<MessageResult>)?.Invoke(this, result);
}
public event EventHandler<MessageResult> Action
{
add

View File

@ -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<T>(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;

View File

@ -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)
{
}
}
}

View File

@ -29,6 +29,11 @@ namespace TelegramBotBase.Sessions
/// </summary>
public long DeviceId { get; set; }
/// <summary>
/// Username of user or group
/// </summary>
public String ChatTitle { get; set; }
/// <summary>
/// When did any last action happend (message received or button clicked)
/// </summary>