TelegramByLeo/Src/Events.mqh

1002 строки
43 КиБ
MQL5
ИсходныйПостоянная ссылкаОбычный видИстория

2026-09-23 15:26:06 -05:00
//+------------------------------------------------------------------+
//| Events.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com"
#property strict
#ifndef TELEGRAMBYLEO_SRC_EVENTS_MQH
#define TELEGRAMBYLEO_SRC_EVENTS_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-09-23 21:33:46 -05:00
#include "TlgHandler.mqh"
2026-09-23 15:26:06 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-09-24 08:24:12 -05:00
#define TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE (1<<(TELEGRAMBYLEO_GETUPT_K_MESSAGE-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_EDITED_MESSAGE (1<<(TELEGRAMBYLEO_GETUPT_K_EDITED_MESSAGE-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CHANNEL_POST (1<<(TELEGRAMBYLEO_GETUPT_K_CHANNEL_POST-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_EDITED_CHANNEL_POST (1<<(TELEGRAMBYLEO_GETUPT_K_EDITED_CHANNEL_POST-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_CONNECTION (1<<(TELEGRAMBYLEO_GETUPT_K_BUSINESS_CONNECTION-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_MESSAGE (1<<(TELEGRAMBYLEO_GETUPT_K_BUSINESS_MESSAGE-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_EDITED_BUSINESS_MESSAGE (1<<(TELEGRAMBYLEO_GETUPT_K_EDITED_BUSINESS_MESSAGE-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_DELETED_BUSINESS_MESSAGES (1<<(TELEGRAMBYLEO_GETUPT_K_DELETED_BUSINESS_MESSAGES-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_GUEST_MESSAGE (1<<(TELEGRAMBYLEO_GETUPT_K_GUEST_MESSAGE-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION (1<<(TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION_COUNT (1<<(TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION_COUNT-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_INLINE_QUERY (1<<(TELEGRAMBYLEO_GETUPT_K_INLINE_QUERY-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CHOSEN_INLINE_RESULT (1<<(TELEGRAMBYLEO_GETUPT_K_CHOSEN_INLINE_RESULT-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CALLBACK_QUERY (1<<(TELEGRAMBYLEO_GETUPT_K_CALLBACK_QUERY-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_SHIPPING_QUERY (1<<(TELEGRAMBYLEO_GETUPT_K_SHIPPING_QUERY-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_PRE_CHECKOUT_QUERY (1<<(TELEGRAMBYLEO_GETUPT_K_PRE_CHECKOUT_QUERY-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_PURCHASED_PAID_MEDIA (1<<(TELEGRAMBYLEO_GETUPT_K_PURCHASED_PAID_MEDIA-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_POLL (1<<(TELEGRAMBYLEO_GETUPT_K_POLL-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_POLL_ANSWER (1<<(TELEGRAMBYLEO_GETUPT_K_POLL_ANSWER-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_MY_CHAT_MEMBER (1<<(TELEGRAMBYLEO_GETUPT_K_MY_CHAT_MEMBER-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CHAT_MEMBER (1<<(TELEGRAMBYLEO_GETUPT_K_CHAT_MEMBER-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CHAT_JOIN_REQUEST (1<<(TELEGRAMBYLEO_GETUPT_K_CHAT_JOIN_REQUEST-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_CHAT_BOOST (1<<(TELEGRAMBYLEO_GETUPT_K_CHAT_BOOST-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_REMOVED_CHAT_BOOST (1<<(TELEGRAMBYLEO_GETUPT_K_REMOVED_CHAT_BOOST-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_MANAGED_BOT (1<<(TELEGRAMBYLEO_GETUPT_K_MANAGED_BOT-1))
#define TELEGRAMBYLEO_REG_FLAG_ON_SUBSCRIPTION (1<<(TELEGRAMBYLEO_GETUPT_K_SUBSCRIPTION-1))
2026-09-23 21:33:46 -05:00
#define TELEGRAMBYLEO_REG_FLAG_ON_STOPPED_MESSAGE_GENERATION (1<<(TELEGRAMBYLEO_GETUPT_K_STOPPED_MESSAGE_GENERATION-1))
//--- Todos
#define TELEGRAMBYLEO_REG_FLAG_ALL (TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE | TELEGRAMBYLEO_REG_FLAG_ON_EDITED_MESSAGE | \
TELEGRAMBYLEO_REG_FLAG_ON_CHANNEL_POST | TELEGRAMBYLEO_REG_FLAG_ON_EDITED_CHANNEL_POST | \
TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_CONNECTION | TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_MESSAGE | \
TELEGRAMBYLEO_REG_FLAG_ON_EDITED_BUSINESS_MESSAGE | TELEGRAMBYLEO_REG_FLAG_ON_DELETED_BUSINESS_MESSAGES | \
TELEGRAMBYLEO_REG_FLAG_ON_GUEST_MESSAGE | TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION | \
TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION_COUNT | TELEGRAMBYLEO_REG_FLAG_ON_INLINE_QUERY | \
TELEGRAMBYLEO_REG_FLAG_ON_CHOSEN_INLINE_RESULT | TELEGRAMBYLEO_REG_FLAG_ON_CALLBACK_QUERY | \
TELEGRAMBYLEO_REG_FLAG_ON_SHIPPING_QUERY | TELEGRAMBYLEO_REG_FLAG_ON_PRE_CHECKOUT_QUERY | \
TELEGRAMBYLEO_REG_FLAG_ON_PURCHASED_PAID_MEDIA | TELEGRAMBYLEO_REG_FLAG_ON_POLL | \
TELEGRAMBYLEO_REG_FLAG_ON_POLL_ANSWER | TELEGRAMBYLEO_REG_FLAG_ON_MY_CHAT_MEMBER | \
TELEGRAMBYLEO_REG_FLAG_ON_CHAT_MEMBER | TELEGRAMBYLEO_REG_FLAG_ON_CHAT_JOIN_REQUEST | \
TELEGRAMBYLEO_REG_FLAG_ON_CHAT_BOOST | TELEGRAMBYLEO_REG_FLAG_ON_REMOVED_CHAT_BOOST | \
TELEGRAMBYLEO_REG_FLAG_ON_MANAGED_BOT | TELEGRAMBYLEO_REG_FLAG_ON_SUBSCRIPTION | \
TELEGRAMBYLEO_REG_FLAG_ON_STOPPED_MESSAGE_GENERATION)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define TELEGRAMBYLEO_NOTIFY(arr, arr_size, method, node) \
for(int __i = 0; __i < arr_size; __i++) \
arr[__i].method(node);
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTelegramBotUpdater
2026-09-23 15:26:06 -05:00
{
private:
2026-09-24 12:18:36 -05:00
//---
2026-09-23 21:33:46 -05:00
CJsonBuilder m_js_builder;
CJsonParser m_json;
//--- token/url propios (independiente de CTelegramBot)
string m_token;
string m_url_method;
2026-09-23 15:26:06 -05:00
//---
2026-09-23 21:33:46 -05:00
int m_timeout;
2026-09-23 15:26:06 -05:00
long m_update_id;
2026-09-23 21:33:46 -05:00
//---
int m_last_res_web;
ENUM_TELEGRAMBYLEO_ERR m_last_err;
2026-09-23 15:26:06 -05:00
//---
JsonBuilderSnapshot m_update_snap;
2026-09-23 21:33:46 -05:00
//--- Handlers: array de punteros + size explicito, uno por evento
CTelegramHandler* m_on_message[];
int m_on_message_size;
CTelegramHandler* m_on_edited_message[];
int m_on_edited_message_size;
CTelegramHandler* m_on_channel_post[];
int m_on_channel_post_size;
CTelegramHandler* m_on_edited_channel_post[];
int m_on_edited_channel_post_size;
CTelegramHandler* m_on_business_connection[];
int m_on_business_connection_size;
CTelegramHandler* m_on_business_message[];
int m_on_business_message_size;
CTelegramHandler* m_on_edited_business_message[];
int m_on_edited_business_message_size;
CTelegramHandler* m_on_deleted_business_messages[];
int m_on_deleted_business_messages_size;
CTelegramHandler* m_on_guest_message[];
int m_on_guest_message_size;
CTelegramHandler* m_on_message_reaction[];
int m_on_message_reaction_size;
CTelegramHandler* m_on_message_reaction_count[];
int m_on_message_reaction_count_size;
CTelegramHandler* m_on_inline_query[];
int m_on_inline_query_size;
CTelegramHandler* m_on_chosen_inline_result[];
int m_on_chosen_inline_result_size;
CTelegramHandler* m_on_callback_query[];
int m_on_callback_query_size;
CTelegramHandler* m_on_shipping_query[];
int m_on_shipping_query_size;
CTelegramHandler* m_on_pre_checkout_query[];
int m_on_pre_checkout_query_size;
CTelegramHandler* m_on_purchased_paid_media[];
int m_on_purchased_paid_media_size;
CTelegramHandler* m_on_poll[];
int m_on_poll_size;
CTelegramHandler* m_on_poll_answer[];
int m_on_poll_answer_size;
CTelegramHandler* m_on_my_chat_member[];
int m_on_my_chat_member_size;
CTelegramHandler* m_on_chat_member[];
int m_on_chat_member_size;
CTelegramHandler* m_on_chat_join_request[];
int m_on_chat_join_request_size;
CTelegramHandler* m_on_chat_boost[];
int m_on_chat_boost_size;
CTelegramHandler* m_on_removed_chat_boost[];
int m_on_removed_chat_boost_size;
CTelegramHandler* m_on_managed_bot[];
int m_on_managed_bot_size;
CTelegramHandler* m_on_subscription[];
int m_on_subscription_size;
2026-09-23 15:26:06 -05:00
2026-09-23 21:33:46 -05:00
CTelegramHandler* m_on_stopped_message_generation[];
int m_on_stopped_message_generation_size;
//--- Helper compartido por Unregister*
void RemoveFromArrayFast(CTelegramHandler* &array[], int &size, CTelegramHandler* &ptr);
2026-09-23 15:26:06 -05:00
2026-09-24 12:18:36 -05:00
//---
ulong m_next_events_f;
void ApplyFlags();
2026-09-26 11:29:53 -05:00
//---
int m_timeout_long;
2026-09-23 15:26:06 -05:00
public:
CTelegramBotUpdater(void);
~CTelegramBotUpdater(void) {}
2026-09-23 21:33:46 -05:00
//--- token
bool Token(string _token);
__forceinline string Token() const { return m_token; }
2026-09-23 15:26:06 -05:00
2026-09-23 21:33:46 -05:00
//--- Init
2026-09-24 12:18:36 -05:00
// 0 quiere decir auto
__forceinline void AllowedUpdates(ulong flags = 0);
2026-09-26 11:29:53 -05:00
void Init(int timeout_long = -1, bool start_with_clean_chat = true);
2026-09-23 15:26:06 -05:00
2026-09-23 21:33:46 -05:00
//--- Last
__forceinline ENUM_TELEGRAMBYLEO_ERR LastErr() const { return m_last_err; }
int LastResHttp() const { return m_last_res_web; }
//--- Timeout
__forceinline int Timeout() const { return m_timeout; }
void Timeout(int v) { m_timeout = v; }
//--- Registro / de-registro
void RegisterEvents(CTelegramHandler* ptr, const int flags);
void UnregisterEvents(CTelegramHandler* ptr, const int flags);
void RegisterEvent(CTelegramHandler* ptr, const ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE event);
void UnregisterEvent(CTelegramHandler* ptr, const ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE event);
2026-09-23 15:26:06 -05:00
//--- polling
bool GetUpdates();
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTelegramBotUpdater::CTelegramBotUpdater()
// reservamos solo 48 chars mas que sufiente no hace falta 1000+ defualt que noramlte se ahce..
2026-09-26 11:29:53 -05:00
: m_token(NULL), m_js_builder(48), m_update_id(-1), m_timeout(5000), m_last_err(TELEGRAMBYLEO_ERR_NOT), m_timeout_long(-1),
2026-09-23 21:33:46 -05:00
//--- ahora los size
m_on_message_size(0), m_on_edited_message_size(0), m_on_channel_post_size(0), m_on_edited_channel_post_size(0),
m_on_business_connection_size(0), m_on_business_message_size(0), m_on_edited_business_message_size(0),
m_on_deleted_business_messages_size(0), m_on_guest_message_size(0), m_on_message_reaction_size(0),
m_on_message_reaction_count_size(0), m_on_inline_query_size(0), m_on_chosen_inline_result_size(0),
m_on_callback_query_size(0), m_on_shipping_query_size(0), m_on_pre_checkout_query_size(0),
m_on_purchased_paid_media_size(0), m_on_poll_size(0), m_on_poll_answer_size(0), m_on_my_chat_member_size(0),
m_on_chat_member_size(0), m_on_chat_join_request_size(0), m_on_chat_boost_size(0), m_on_removed_chat_boost_size(0),
m_on_managed_bot_size(0), m_on_subscription_size(0), m_on_stopped_message_generation_size(0)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTelegramBotUpdater::Token(string _token)
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
//---
StringTrimRight(_token);
StringTrimLeft(_token);
if(_token == "")
{
m_last_err = TELEGRAMBYLEO_ERR_TOKEN_EMPTY;
return false;
}
2026-09-23 15:26:06 -05:00
2026-09-23 21:33:46 -05:00
//---
m_token = _token;
m_url_method = TELEGRAMBYLEO_BASE_URL + "/bot" + m_token + "/" + TELEGRAMBYLEO_ENDPOINT_GETUPDATES;
return true;
2026-09-23 15:26:06 -05:00
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-09-26 11:29:53 -05:00
void CTelegramBotUpdater::Init(int timeout_long = -1, bool start_with_clean_chat = true)
2026-09-23 15:26:06 -05:00
{
2026-09-26 11:29:53 -05:00
//--- long poll por ahora no inicialemnte.. solo llenamos
m_timeout_long = timeout_long;
2026-09-23 15:26:06 -05:00
//---
2026-09-25 09:59:13 -05:00
m_update_id = -1;
2026-09-23 15:26:06 -05:00
//---
2026-09-23 21:33:46 -05:00
m_js_builder.Clear();
m_js_builder.Obj();
2026-09-23 15:26:06 -05:00
//--
if(start_with_clean_chat)
{
2026-09-23 21:33:46 -05:00
m_js_builder.KeyWV("offset").Val(-1);
m_js_builder.KeyWV("limit").Val(1);
2026-09-23 15:26:06 -05:00
}
else
{
2026-09-23 21:33:46 -05:00
m_js_builder.KeyWV("offset").Val(0);
}
//---
m_js_builder.EndObj();
m_js_builder.Truncate();
}
2026-09-24 12:18:36 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTelegramBotUpdater::ApplyFlags(void)
{
2026-09-26 11:29:53 -05:00
//---
2026-09-24 12:18:36 -05:00
m_js_builder.Clear();
m_js_builder.Obj();
2026-09-26 11:29:53 -05:00
//---
if(m_timeout_long != -1)
m_js_builder.KeyWV("timeout").Val(m_timeout_long);
//---
m_js_builder.KeyWV("allowed_updates").Arr();
2026-09-24 12:18:36 -05:00
while(m_next_events_f)
{
const ulong flag = TSNTABLES_BIT_DEJAR_SOLO_MINUS_SIG_BYTE(m_next_events_f);
2026-09-26 11:29:53 -05:00
const char pos = TSNTABLES_CTZ_64_GET_BIT(flag);
2026-09-24 12:18:36 -05:00
m_js_builder.ValSWV(g_tlgbyleo_getupt_kstr[pos]);
m_next_events_f &= (m_next_events_f - 1);
}
m_js_builder.EndArr();
m_js_builder.KeyWV("offset");
m_js_builder.GetSnapshot(m_update_snap);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTelegramBotUpdater::AllowedUpdates(ulong flags)
{
//--- calculo
if(flags)
m_next_events_f = flags;
else
{
// Aqui repasamos: solo pedimos los eventos que tengan al menos un handler registrado
m_next_events_f |= m_on_message_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE : 0;
m_next_events_f |= m_on_edited_message_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_EDITED_MESSAGE : 0;
m_next_events_f |= m_on_channel_post_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CHANNEL_POST : 0;
m_next_events_f |= m_on_edited_channel_post_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_EDITED_CHANNEL_POST : 0;
m_next_events_f |= m_on_business_connection_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_CONNECTION : 0;
m_next_events_f |= m_on_business_message_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_MESSAGE : 0;
m_next_events_f |= m_on_edited_business_message_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_EDITED_BUSINESS_MESSAGE : 0;
m_next_events_f |= m_on_deleted_business_messages_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_DELETED_BUSINESS_MESSAGES : 0;
m_next_events_f |= m_on_guest_message_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_GUEST_MESSAGE : 0;
m_next_events_f |= m_on_message_reaction_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION : 0;
m_next_events_f |= m_on_message_reaction_count_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION_COUNT : 0;
m_next_events_f |= m_on_inline_query_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_INLINE_QUERY : 0;
m_next_events_f |= m_on_chosen_inline_result_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CHOSEN_INLINE_RESULT : 0;
m_next_events_f |= m_on_callback_query_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CALLBACK_QUERY : 0;
m_next_events_f |= m_on_shipping_query_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_SHIPPING_QUERY : 0;
m_next_events_f |= m_on_pre_checkout_query_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_PRE_CHECKOUT_QUERY : 0;
m_next_events_f |= m_on_purchased_paid_media_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_PURCHASED_PAID_MEDIA : 0;
m_next_events_f |= m_on_poll_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_POLL : 0;
m_next_events_f |= m_on_poll_answer_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_POLL_ANSWER : 0;
m_next_events_f |= m_on_my_chat_member_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_MY_CHAT_MEMBER : 0;
m_next_events_f |= m_on_chat_member_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CHAT_MEMBER : 0;
m_next_events_f |= m_on_chat_join_request_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CHAT_JOIN_REQUEST : 0;
m_next_events_f |= m_on_chat_boost_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_CHAT_BOOST : 0;
m_next_events_f |= m_on_removed_chat_boost_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_REMOVED_CHAT_BOOST : 0;
m_next_events_f |= m_on_managed_bot_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_MANAGED_BOT : 0;
m_next_events_f |= m_on_subscription_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_SUBSCRIPTION : 0;
m_next_events_f |= m_on_stopped_message_generation_size > 0 ? TELEGRAMBYLEO_REG_FLAG_ON_STOPPED_MESSAGE_GENERATION : 0;
}
//---
2026-09-25 09:59:13 -05:00
if(m_update_id == -1) // aun no comenzo asi que es seugor
2026-09-24 12:18:36 -05:00
return;
ApplyFlags();
}
2026-09-23 21:33:46 -05:00
//+------------------------------------------------------------------+
//| Registro / de-registro |
//+------------------------------------------------------------------+
void CTelegramBotUpdater::RegisterEvents(CTelegramHandler* ptr, const int flags)
{
//---
if(!CheckPointer(ptr))
return;
//---
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE) != 0)
m_on_message[ArrayResize(m_on_message, (++m_on_message_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_MESSAGE) != 0)
m_on_edited_message[ArrayResize(m_on_edited_message, (++m_on_edited_message_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHANNEL_POST) != 0)
m_on_channel_post[ArrayResize(m_on_channel_post, (++m_on_channel_post_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_CHANNEL_POST) != 0)
m_on_edited_channel_post[ArrayResize(m_on_edited_channel_post, (++m_on_edited_channel_post_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_CONNECTION) != 0)
m_on_business_connection[ArrayResize(m_on_business_connection, (++m_on_business_connection_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_MESSAGE) != 0)
m_on_business_message[ArrayResize(m_on_business_message, (++m_on_business_message_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_BUSINESS_MESSAGE) != 0)
m_on_edited_business_message[ArrayResize(m_on_edited_business_message, (++m_on_edited_business_message_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_DELETED_BUSINESS_MESSAGES) != 0)
m_on_deleted_business_messages[ArrayResize(m_on_deleted_business_messages, (++m_on_deleted_business_messages_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_GUEST_MESSAGE) != 0)
m_on_guest_message[ArrayResize(m_on_guest_message, (++m_on_guest_message_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION) != 0)
m_on_message_reaction[ArrayResize(m_on_message_reaction, (++m_on_message_reaction_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION_COUNT) != 0)
m_on_message_reaction_count[ArrayResize(m_on_message_reaction_count, (++m_on_message_reaction_count_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_INLINE_QUERY) != 0)
m_on_inline_query[ArrayResize(m_on_inline_query, (++m_on_inline_query_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHOSEN_INLINE_RESULT) != 0)
m_on_chosen_inline_result[ArrayResize(m_on_chosen_inline_result, (++m_on_chosen_inline_result_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CALLBACK_QUERY) != 0)
m_on_callback_query[ArrayResize(m_on_callback_query, (++m_on_callback_query_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_SHIPPING_QUERY) != 0)
m_on_shipping_query[ArrayResize(m_on_shipping_query, (++m_on_shipping_query_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_PRE_CHECKOUT_QUERY) != 0)
m_on_pre_checkout_query[ArrayResize(m_on_pre_checkout_query, (++m_on_pre_checkout_query_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_PURCHASED_PAID_MEDIA) != 0)
m_on_purchased_paid_media[ArrayResize(m_on_purchased_paid_media, (++m_on_purchased_paid_media_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_POLL) != 0)
m_on_poll[ArrayResize(m_on_poll, (++m_on_poll_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_POLL_ANSWER) != 0)
m_on_poll_answer[ArrayResize(m_on_poll_answer, (++m_on_poll_answer_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MY_CHAT_MEMBER) != 0)
m_on_my_chat_member[ArrayResize(m_on_my_chat_member, (++m_on_my_chat_member_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_MEMBER) != 0)
m_on_chat_member[ArrayResize(m_on_chat_member, (++m_on_chat_member_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_JOIN_REQUEST) != 0)
m_on_chat_join_request[ArrayResize(m_on_chat_join_request, (++m_on_chat_join_request_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_BOOST) != 0)
m_on_chat_boost[ArrayResize(m_on_chat_boost, (++m_on_chat_boost_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_REMOVED_CHAT_BOOST) != 0)
m_on_removed_chat_boost[ArrayResize(m_on_removed_chat_boost, (++m_on_removed_chat_boost_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MANAGED_BOT) != 0)
m_on_managed_bot[ArrayResize(m_on_managed_bot, (++m_on_managed_bot_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_SUBSCRIPTION) != 0)
m_on_subscription[ArrayResize(m_on_subscription, (++m_on_subscription_size)) - 1] = ptr;
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_STOPPED_MESSAGE_GENERATION) != 0)
m_on_stopped_message_generation[ArrayResize(m_on_stopped_message_generation, (++m_on_stopped_message_generation_size)) - 1] = ptr;
}
//+------------------------------------------------------------------+
void CTelegramBotUpdater::RegisterEvent(CTelegramHandler* ptr, const ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE event)
{
//---
if(!CheckPointer(ptr))
return;
//---
switch(event)
{
case TELEGRAMBYLEO_GETUPT_K_MESSAGE:
m_on_message[ArrayResize(m_on_message, (++m_on_message_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_MESSAGE:
m_on_edited_message[ArrayResize(m_on_edited_message, (++m_on_edited_message_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CHANNEL_POST:
m_on_channel_post[ArrayResize(m_on_channel_post, (++m_on_channel_post_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_CHANNEL_POST:
m_on_edited_channel_post[ArrayResize(m_on_edited_channel_post, (++m_on_edited_channel_post_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_CONNECTION:
m_on_business_connection[ArrayResize(m_on_business_connection, (++m_on_business_connection_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_MESSAGE:
m_on_business_message[ArrayResize(m_on_business_message, (++m_on_business_message_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_BUSINESS_MESSAGE:
m_on_edited_business_message[ArrayResize(m_on_edited_business_message, (++m_on_edited_business_message_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_DELETED_BUSINESS_MESSAGES:
m_on_deleted_business_messages[ArrayResize(m_on_deleted_business_messages, (++m_on_deleted_business_messages_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_GUEST_MESSAGE:
m_on_guest_message[ArrayResize(m_on_guest_message, (++m_on_guest_message_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION:
m_on_message_reaction[ArrayResize(m_on_message_reaction, (++m_on_message_reaction_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION_COUNT:
m_on_message_reaction_count[ArrayResize(m_on_message_reaction_count, (++m_on_message_reaction_count_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_INLINE_QUERY:
m_on_inline_query[ArrayResize(m_on_inline_query, (++m_on_inline_query_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CHOSEN_INLINE_RESULT:
m_on_chosen_inline_result[ArrayResize(m_on_chosen_inline_result, (++m_on_chosen_inline_result_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CALLBACK_QUERY:
m_on_callback_query[ArrayResize(m_on_callback_query, (++m_on_callback_query_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_SHIPPING_QUERY:
m_on_shipping_query[ArrayResize(m_on_shipping_query, (++m_on_shipping_query_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_PRE_CHECKOUT_QUERY:
m_on_pre_checkout_query[ArrayResize(m_on_pre_checkout_query, (++m_on_pre_checkout_query_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_PURCHASED_PAID_MEDIA:
m_on_purchased_paid_media[ArrayResize(m_on_purchased_paid_media, (++m_on_purchased_paid_media_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_POLL:
m_on_poll[ArrayResize(m_on_poll, (++m_on_poll_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_POLL_ANSWER:
m_on_poll_answer[ArrayResize(m_on_poll_answer, (++m_on_poll_answer_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_MY_CHAT_MEMBER:
m_on_my_chat_member[ArrayResize(m_on_my_chat_member, (++m_on_my_chat_member_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_MEMBER:
m_on_chat_member[ArrayResize(m_on_chat_member, (++m_on_chat_member_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_JOIN_REQUEST:
m_on_chat_join_request[ArrayResize(m_on_chat_join_request, (++m_on_chat_join_request_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_BOOST:
m_on_chat_boost[ArrayResize(m_on_chat_boost, (++m_on_chat_boost_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_REMOVED_CHAT_BOOST:
m_on_removed_chat_boost[ArrayResize(m_on_removed_chat_boost, (++m_on_removed_chat_boost_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_MANAGED_BOT:
m_on_managed_bot[ArrayResize(m_on_managed_bot, (++m_on_managed_bot_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_SUBSCRIPTION:
m_on_subscription[ArrayResize(m_on_subscription, (++m_on_subscription_size)) - 1] = ptr;
break;
case TELEGRAMBYLEO_GETUPT_K_STOPPED_MESSAGE_GENERATION:
m_on_stopped_message_generation[ArrayResize(m_on_stopped_message_generation, (++m_on_stopped_message_generation_size)) - 1] = ptr;
break;
//---
default:
break;
2026-09-23 15:26:06 -05:00
}
2026-09-23 21:33:46 -05:00
}
//+------------------------------------------------------------------+
void CTelegramBotUpdater::UnregisterEvents(CTelegramHandler* ptr, const int flags)
{
//---
if(!CheckPointer(ptr))
return;
2026-09-23 15:26:06 -05:00
//---
2026-09-23 21:33:46 -05:00
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE) != 0)
RemoveFromArrayFast(m_on_message, m_on_message_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_MESSAGE) != 0)
RemoveFromArrayFast(m_on_edited_message, m_on_edited_message_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHANNEL_POST) != 0)
RemoveFromArrayFast(m_on_channel_post, m_on_channel_post_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_CHANNEL_POST) != 0)
RemoveFromArrayFast(m_on_edited_channel_post, m_on_edited_channel_post_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_CONNECTION) != 0)
RemoveFromArrayFast(m_on_business_connection, m_on_business_connection_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_BUSINESS_MESSAGE) != 0)
RemoveFromArrayFast(m_on_business_message, m_on_business_message_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_EDITED_BUSINESS_MESSAGE) != 0)
RemoveFromArrayFast(m_on_edited_business_message, m_on_edited_business_message_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_DELETED_BUSINESS_MESSAGES) != 0)
RemoveFromArrayFast(m_on_deleted_business_messages, m_on_deleted_business_messages_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_GUEST_MESSAGE) != 0)
RemoveFromArrayFast(m_on_guest_message, m_on_guest_message_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION) != 0)
RemoveFromArrayFast(m_on_message_reaction, m_on_message_reaction_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MESSAGE_REACTION_COUNT) != 0)
RemoveFromArrayFast(m_on_message_reaction_count, m_on_message_reaction_count_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_INLINE_QUERY) != 0)
RemoveFromArrayFast(m_on_inline_query, m_on_inline_query_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHOSEN_INLINE_RESULT) != 0)
RemoveFromArrayFast(m_on_chosen_inline_result, m_on_chosen_inline_result_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CALLBACK_QUERY) != 0)
RemoveFromArrayFast(m_on_callback_query, m_on_callback_query_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_SHIPPING_QUERY) != 0)
RemoveFromArrayFast(m_on_shipping_query, m_on_shipping_query_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_PRE_CHECKOUT_QUERY) != 0)
RemoveFromArrayFast(m_on_pre_checkout_query, m_on_pre_checkout_query_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_PURCHASED_PAID_MEDIA) != 0)
RemoveFromArrayFast(m_on_purchased_paid_media, m_on_purchased_paid_media_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_POLL) != 0)
RemoveFromArrayFast(m_on_poll, m_on_poll_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_POLL_ANSWER) != 0)
RemoveFromArrayFast(m_on_poll_answer, m_on_poll_answer_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MY_CHAT_MEMBER) != 0)
RemoveFromArrayFast(m_on_my_chat_member, m_on_my_chat_member_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_MEMBER) != 0)
RemoveFromArrayFast(m_on_chat_member, m_on_chat_member_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_JOIN_REQUEST) != 0)
RemoveFromArrayFast(m_on_chat_join_request, m_on_chat_join_request_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_CHAT_BOOST) != 0)
RemoveFromArrayFast(m_on_chat_boost, m_on_chat_boost_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_REMOVED_CHAT_BOOST) != 0)
RemoveFromArrayFast(m_on_removed_chat_boost, m_on_removed_chat_boost_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_MANAGED_BOT) != 0)
RemoveFromArrayFast(m_on_managed_bot, m_on_managed_bot_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_SUBSCRIPTION) != 0)
RemoveFromArrayFast(m_on_subscription, m_on_subscription_size, ptr);
if((flags & TELEGRAMBYLEO_REG_FLAG_ON_STOPPED_MESSAGE_GENERATION) != 0)
RemoveFromArrayFast(m_on_stopped_message_generation, m_on_stopped_message_generation_size, ptr);
2026-09-23 15:26:06 -05:00
}
2026-09-23 21:33:46 -05:00
//+------------------------------------------------------------------+
void CTelegramBotUpdater::UnregisterEvent(CTelegramHandler* ptr, const ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE event)
{
//---
if(!CheckPointer(ptr))
return;
//---
switch(event)
{
case TELEGRAMBYLEO_GETUPT_K_MESSAGE:
RemoveFromArrayFast(m_on_message, m_on_message_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_MESSAGE:
RemoveFromArrayFast(m_on_edited_message, m_on_edited_message_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CHANNEL_POST:
RemoveFromArrayFast(m_on_channel_post, m_on_channel_post_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_CHANNEL_POST:
RemoveFromArrayFast(m_on_edited_channel_post, m_on_edited_channel_post_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_CONNECTION:
RemoveFromArrayFast(m_on_business_connection, m_on_business_connection_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_MESSAGE:
RemoveFromArrayFast(m_on_business_message, m_on_business_message_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_EDITED_BUSINESS_MESSAGE:
RemoveFromArrayFast(m_on_edited_business_message, m_on_edited_business_message_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_DELETED_BUSINESS_MESSAGES:
RemoveFromArrayFast(m_on_deleted_business_messages, m_on_deleted_business_messages_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_GUEST_MESSAGE:
RemoveFromArrayFast(m_on_guest_message, m_on_guest_message_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION:
RemoveFromArrayFast(m_on_message_reaction, m_on_message_reaction_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION_COUNT:
RemoveFromArrayFast(m_on_message_reaction_count, m_on_message_reaction_count_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_INLINE_QUERY:
RemoveFromArrayFast(m_on_inline_query, m_on_inline_query_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CHOSEN_INLINE_RESULT:
RemoveFromArrayFast(m_on_chosen_inline_result, m_on_chosen_inline_result_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CALLBACK_QUERY:
RemoveFromArrayFast(m_on_callback_query, m_on_callback_query_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_SHIPPING_QUERY:
RemoveFromArrayFast(m_on_shipping_query, m_on_shipping_query_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_PRE_CHECKOUT_QUERY:
RemoveFromArrayFast(m_on_pre_checkout_query, m_on_pre_checkout_query_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_PURCHASED_PAID_MEDIA:
RemoveFromArrayFast(m_on_purchased_paid_media, m_on_purchased_paid_media_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_POLL:
RemoveFromArrayFast(m_on_poll, m_on_poll_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_POLL_ANSWER:
RemoveFromArrayFast(m_on_poll_answer, m_on_poll_answer_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_MY_CHAT_MEMBER:
RemoveFromArrayFast(m_on_my_chat_member, m_on_my_chat_member_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_MEMBER:
RemoveFromArrayFast(m_on_chat_member, m_on_chat_member_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_JOIN_REQUEST:
RemoveFromArrayFast(m_on_chat_join_request, m_on_chat_join_request_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_CHAT_BOOST:
RemoveFromArrayFast(m_on_chat_boost, m_on_chat_boost_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_REMOVED_CHAT_BOOST:
RemoveFromArrayFast(m_on_removed_chat_boost, m_on_removed_chat_boost_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_MANAGED_BOT:
RemoveFromArrayFast(m_on_managed_bot, m_on_managed_bot_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_SUBSCRIPTION:
RemoveFromArrayFast(m_on_subscription, m_on_subscription_size, ptr);
break;
case TELEGRAMBYLEO_GETUPT_K_STOPPED_MESSAGE_GENERATION:
RemoveFromArrayFast(m_on_stopped_message_generation, m_on_stopped_message_generation_size, ptr);
break;
//---
default:
break;
}
}
2026-09-23 15:26:06 -05:00
2026-09-23 21:33:46 -05:00
//+------------------------------------------------------------------+
void CTelegramBotUpdater::RemoveFromArrayFast(CTelegramHandler* &array[], int &size, CTelegramHandler* &ptr)
{
for(int i = 0; i < size; i++)
{
if(array[i] == ptr)
{
array[i] = array[size - 1];
ArrayResize(array, (--size));
return;
}
}
}
2026-09-23 15:26:06 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTelegramBotUpdater::GetUpdates(void)
{
//--- Get
static string result_headers;
2026-09-24 12:18:36 -05:00
2026-09-25 09:59:13 -05:00
//---
2026-09-26 11:29:53 -05:00
// Print("send: ");
//Print(CharArrayToString(m_js_builder.m_buf, 0, m_js_builder.m_pos));
2026-09-23 21:33:46 -05:00
m_last_res_web = WebRequest("POST", m_url_method, "Content-Type: application/json\r\n", m_timeout,
m_js_builder.m_buf, m_json.m_raw, result_headers);
2026-09-23 15:26:06 -05:00
if(m_last_res_web != 200)
{
m_last_err = TELEGRAMBYLEO_ERR_WEB_REQ;
return false;
}
2026-09-26 11:29:53 -05:00
//Print("recv: ");
//Print(CharArrayToString(m_json.m_raw, 0, ArraySize(m_json.m_raw)));
2026-09-23 15:26:06 -05:00
//--- Parsing
2026-09-23 21:33:46 -05:00
m_json.CalcLen();
m_json.CorrectPadding();
if(!m_json.Parse())
2026-09-23 15:26:06 -05:00
{
m_last_err = TELEGRAMBYLEO_ERR_JSON_PARSING;
return false;
}
//---
2026-09-23 21:33:46 -05:00
CJsonNode root = m_json.GetRoot();
2026-09-23 15:26:06 -05:00
if(!root["ok"].ToBool(false))
{
m_last_err = TELEGRAMBYLEO_ERR_JSON_NOT_OK;
return false;
}
2026-09-25 09:59:13 -05:00
const int res_size = root["result"].Size();
2026-09-23 15:26:06 -05:00
//---
2026-09-25 09:59:13 -05:00
if(m_update_id == -1) // aun nada primer get que hacemos
2026-09-23 15:26:06 -05:00
{
2026-09-25 09:59:13 -05:00
//--- tratamos de obtener...
if(res_size > 0) // solo si es 0 obtemoes..
m_update_id = root["result"].At(0)["update_id"].ToInt(-1);
2026-09-23 15:26:06 -05:00
2026-09-25 09:59:13 -05:00
//---
// si no tiene valor tendra un valor de -1 luego se incremnte a 0
2026-09-26 11:29:53 -05:00
//--- json inicial
2026-09-24 12:18:36 -05:00
ApplyFlags();
2026-09-23 15:26:06 -05:00
}
else
{
2026-09-25 09:59:13 -05:00
//--- caso ya comun
CJsonIteratorArray it = root["result"].BeginArr();
if(res_size < 1)
return true; // nada, minimo un valor para poder iterar
//---
2026-09-23 15:26:06 -05:00
// ya caliente
2026-09-23 21:33:46 -05:00
while(it.IsValid()) // iteramos por cada Update
2026-09-23 15:26:06 -05:00
{
CJsonIteratorObj val = it.Val().BeginObj();
2026-09-23 21:33:46 -05:00
// En cada objeto Update iteramos por cada par key-value
2026-09-23 15:26:06 -05:00
while(val.IsValid())
{
2026-09-23 21:33:46 -05:00
const ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE idx = CEnumRegTlgLeo::GetValU<ENUM_TELEGRAMBYLEO_GETUPT_KEYVALUE>(val.m_ctx.m_raw, val.KeyStart(), val.KeyLen(), WRONG_VALUE); // perfect hash
CJsonNode obj_val = val.Val();
2026-09-23 15:26:06 -05:00
switch(idx)
{
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_UPDATEID:
2026-09-23 21:33:46 -05:00
m_update_id = obj_val.ToInt(0);
2026-09-23 16:35:15 -05:00
break;
case TELEGRAMBYLEO_GETUPT_K_MESSAGE:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_message, m_on_message_size, OnMessage, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_EDITED_MESSAGE:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_edited_message, m_on_edited_message_size, OnEditedMessage, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_CHANNEL_POST:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_channel_post, m_on_channel_post_size, OnChannelPost, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_EDITED_CHANNEL_POST:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_edited_channel_post, m_on_edited_channel_post_size, OnEditedChannelPost, obj_val)
2026-09-23 15:26:06 -05:00
break;
2026-09-23 16:35:15 -05:00
}
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_CONNECTION:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_business_connection, m_on_business_connection_size, OnBusinessConnection, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_BUSINESS_MESSAGE:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_business_message, m_on_business_message_size, OnBusinessMessage, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_EDITED_BUSINESS_MESSAGE:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_edited_business_message, m_on_edited_business_message_size, OnEditedBusinessMessage, obj_val)
2026-09-23 15:26:06 -05:00
break;
2026-09-23 16:35:15 -05:00
}
case TELEGRAMBYLEO_GETUPT_K_DELETED_BUSINESS_MESSAGES:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_deleted_business_messages, m_on_deleted_business_messages_size, OnDeletedBusinessMessages, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_GUEST_MESSAGE:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_guest_message, m_on_guest_message_size, OnGuestMessage, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_message_reaction, m_on_message_reaction_size, OnMessageReaction, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_MESSAGE_REACTION_COUNT:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_message_reaction_count, m_on_message_reaction_count_size, OnMessageReactionCount, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_INLINE_QUERY:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_inline_query, m_on_inline_query_size, OnInlineQuery, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_CHOSEN_INLINE_RESULT:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_chosen_inline_result, m_on_chosen_inline_result_size, OnChosenInlineResult, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_CALLBACK_QUERY:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_callback_query, m_on_callback_query_size, OnCallbackQuery, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_SHIPPING_QUERY:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_shipping_query, m_on_shipping_query_size, OnShippingQuery, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_PRE_CHECKOUT_QUERY:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_pre_checkout_query, m_on_pre_checkout_query_size, OnPreCheckoutQuery, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_PURCHASED_PAID_MEDIA:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_purchased_paid_media, m_on_purchased_paid_media_size, OnPurchasedPaidMedia, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_POLL:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_poll, m_on_poll_size, OnPoll, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_POLL_ANSWER:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_poll_answer, m_on_poll_answer_size, OnPollAnswer, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_MY_CHAT_MEMBER:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_my_chat_member, m_on_my_chat_member_size, OnMyChatMember, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
case TELEGRAMBYLEO_GETUPT_K_CHAT_MEMBER:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_chat_member, m_on_chat_member_size, OnChatMember, obj_val)
2026-09-23 15:26:06 -05:00
break;
2026-09-23 16:35:15 -05:00
}
case TELEGRAMBYLEO_GETUPT_K_CHAT_JOIN_REQUEST:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_chat_join_request, m_on_chat_join_request_size, OnChatJoinRequest, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_CHAT_BOOST:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_chat_boost, m_on_chat_boost_size, OnChatBoost, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_REMOVED_CHAT_BOOST:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_removed_chat_boost, m_on_removed_chat_boost_size, OnRemovedChatBoost, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_MANAGED_BOT:
2026-09-23 15:26:06 -05:00
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_managed_bot, m_on_managed_bot_size, OnManagedBot, obj_val)
2026-09-23 15:26:06 -05:00
break;
}
2026-09-23 16:35:15 -05:00
case TELEGRAMBYLEO_GETUPT_K_SUBSCRIPTION:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_subscription, m_on_subscription_size, OnSubscription, obj_val)
2026-09-23 15:26:06 -05:00
break;
2026-09-23 16:35:15 -05:00
}
case TELEGRAMBYLEO_GETUPT_K_STOPPED_MESSAGE_GENERATION:
{
2026-09-23 21:33:46 -05:00
TELEGRAMBYLEO_NOTIFY(m_on_stopped_message_generation, m_on_stopped_message_generation_size, OnStoppedMessageGeneration, obj_val)
2026-09-23 16:35:15 -05:00
break;
}
2026-09-23 15:26:06 -05:00
//---
default:
break;
}
2026-09-23 21:33:46 -05:00
//---
val.Next();
2026-09-23 15:26:06 -05:00
}
//---
it.Next();
}
//--- rollback
2026-09-23 21:33:46 -05:00
m_js_builder.ApplySnapshot(m_update_snap);
2026-09-23 15:26:06 -05:00
}
//---
m_update_id++;
//---
2026-09-23 21:33:46 -05:00
m_js_builder.Val(m_update_id);
m_js_builder.EndObj();
m_js_builder.Truncate();
2026-09-23 15:26:06 -05:00
//---
return true;
}
}
//+------------------------------------------------------------------+
#endif // TELEGRAMBYLEO_SRC_EVENTS_MQH