TelegramByLeo/Src/Base/Bases.mqh
2026-09-26 08:40:32 -05:00

275 lines
12 KiB
MQL5

//+------------------------------------------------------------------+
//| Bases.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_BASE_BASE_MQH
#define TELEGRAMBYLEO_SRC_BASE_BASE_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Def.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define TLGBYLEO_BOOL_TRUE (1)
#define TLGBYLEO_BOOL_FALSE (0)
#define TLGBYLEO_BOOL_UNSET (UCHAR_MAX)
#define TLGBYLEO_BOOL uchar
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Parametros comunes
//--- Mensaje efimero
struct TlgEphemeralMessageParameters
{
TlgEphemeralMessageParameters() : callback_query_id(""),
receiver_user_id(-1), replace_callback_query_message(TLGBYLEO_BOOL_UNSET) {}
//----
string callback_query_id;
long receiver_user_id;
TLGBYLEO_BOOL replace_callback_query_message;
};
//--- Reply parameters
struct TlgReplyParameters
{
TlgReplyParameters() : poll_option_id(""), quote(""),
quote_parse_mode(WRONG_VALUE), message_id(-1), ephemeral_message_id(-1),
allow_sending_without_reply(TLGBYLEO_BOOL_UNSET), quote_position(-1),
checklist_task_id(-1) {}
//----
string poll_option_id;
string quote;
ENUM_TELEGRAM_PARSE_MODE quote_parse_mode;
// quote_entities
long message_id;
long ephemeral_message_id;
TLGBYLEO_BOOL allow_sending_without_reply;
int quote_position;
long checklist_task_id;
};
//--- SuggestedPostParameters
// suggested_post_parameters
//--- Struct basico para campos minimos
struct pack(8) TlgSendBase
{
//---
// con parametors
TlgSendBase(const long _message_thread_id, const bool _disable_notification,
const bool _protect_content, const bool _allow_paid_broadcast)
: message_thread_id(_message_thread_id), disable_notification(_disable_notification), protect_content(_protect_content),
allow_paid_broadcast(_allow_paid_broadcast) {}
// sin params
TlgSendBase() : message_thread_id(-1), disable_notification(TLGBYLEO_BOOL_UNSET),
protect_content(TLGBYLEO_BOOL_UNSET), allow_paid_broadcast(TLGBYLEO_BOOL_UNSET) {}
//--- base
long message_thread_id;
TLGBYLEO_BOOL disable_notification;
TLGBYLEO_BOOL protect_content;
TLGBYLEO_BOOL allow_paid_broadcast;
};
// chatid y business_connection_id lo maneja la clase (auqnue est eultimo no.. por ahora)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct TlgLinkPreviewOptions
{
TlgLinkPreviewOptions() : url(""), prefer_small_media(TLGBYLEO_BOOL_UNSET),
is_disabled(TLGBYLEO_BOOL_UNSET), prefer_large_media(TLGBYLEO_BOOL_UNSET),
show_above_text(TLGBYLEO_BOOL_UNSET) {}
//----
string url;
TLGBYLEO_BOOL prefer_small_media;
TLGBYLEO_BOOL is_disabled;
TLGBYLEO_BOOL prefer_large_media;
TLGBYLEO_BOOL show_above_text;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct TlgInputPollOption
{
TlgInputPollOption(const string& _text, ENUM_TELEGRAM_PARSE_MODE _parse_mode) : text(_text), text_parse_mode(_parse_mode) {}
TlgInputPollOption() : text(""), text_parse_mode(WRONG_VALUE) {}
//----
string text;
ENUM_TELEGRAM_PARSE_MODE text_parse_mode;
// InputPollOptionMedia media
};
//---
struct pack(sizeof(TLGBYLEO_BOOL)) TlgPollBoolOps
{
TlgPollBoolOps() : is_anonymous(TLGBYLEO_BOOL_UNSET),
allows_multiple_answers(TLGBYLEO_BOOL_UNSET), shuffle_options(TLGBYLEO_BOOL_UNSET),
hide_results_until_closes(TLGBYLEO_BOOL_UNSET), members_only(TLGBYLEO_BOOL_UNSET),
is_closed(TLGBYLEO_BOOL_UNSET) {}
//----
TLGBYLEO_BOOL is_anonymous;
TLGBYLEO_BOOL allows_multiple_answers;
TLGBYLEO_BOOL shuffle_options;
TLGBYLEO_BOOL hide_results_until_closes;
TLGBYLEO_BOOL members_only;
TLGBYLEO_BOOL is_closed;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//---
enum ENUM_TELEGRAMBYLEO_REACTION_TYPE
{
TELEGRAMBYLEO_REACTION_TYPE_EMOJI,
TELEGRAMBYLEO_REACTION_TYPE_CUSTOM_EMOJI,
};
//---
const string g_telegrambyleo_reactiontype[2] =
{
"emoji",
"custom_emoji"
};
//---
struct TlgReactionType
{
TlgReactionType(const string& _value, ENUM_TELEGRAMBYLEO_REACTION_TYPE _type) : value(_value), type(_type) {}
TlgReactionType() : value(""), type(TELEGRAMBYLEO_REACTION_TYPE_EMOJI) {}
//---
ENUM_TELEGRAMBYLEO_REACTION_TYPE type;
string value;
};
//+------------------------------------------------------------------+
//| Permisos |
//+------------------------------------------------------------------+
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_MESSAGES (1ULL<<0)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_AUDIOS (1ULL<<2)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_DOCUMENTS (1ULL<<4)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_PHOTOS (1ULL<<6)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_VIDEOS (1ULL<<8)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_VIDEO_NOTES (1ULL<<10)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_VOICE_NOTES (1ULL<<12)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_POLLS (1ULL<<14)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_SEND_OTHER_MESSAGES (1ULL<<16)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_ADD_WEB_PAGE_PREVIEWS (1ULL<<18)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_REACT_TO_MESSAGES (1ULL<<20)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_EDIT_TAG (1ULL<<22)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_CHANGE_INFO (1ULL<<24)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_INVITE_USERS (1ULL<<26)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_PIN_MESSAGES (1ULL<<28)
#define TELEGRAMBYLEO_CHAT_PERMISSIONS_CAN_MANAGE_TOPICS (1ULL<<30)
// ulong 2
//+------------------------------------------------------------------+
//| User obj |
//+------------------------------------------------------------------+
enum ENUM_TLGBYLEO_USER_FLAGS
{
TLGBYLEO_USER_IS_BOT,
TLGBYLEO_USER_IS_PREMIUM,
TLGBYLEO_USER_ADDED_TO_ATTACHMENT_MENU,
TLGBYLEO_USER_CAN_JOIN_GROUPS,
TLGBYLEO_USER_CAN_READ_ALL_GROUP_MESSAGES,
TLGBYLEO_USER_SUPPORTS_GUEST_QUERIES,
TLGBYLEO_USER_SUPPORTS_INLINE_QUERIES,
TLGBYLEO_USER_CAN_CONNECT_TO_BUSINESS,
TLGBYLEO_USER_HAS_MAIN_WEB_APP,
TLGBYLEO_USER_HAS_TOPICS_ENABLED,
TLGBYLEO_USER_ALLOWS_USERS_TO_CREATE_TOPICS,
TLGBYLEO_USER_CAN_MANAGE_BOTS,
TLGBYLEO_USER_SUPPORTS_JOIN_REQUEST_QUERIES,
};
//---
#define TLGBYLEO_USER_FLAG(idx) (1U << (idx))
//---
struct TlgUser
{
TlgUser() : username(""), first_name(""), last_name(""), id(0), flags(0) {}
string username;
string first_name;
string last_name;
long id;
uint flags;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#ifdef TELEGRAMBYLEO_TLGHANDLER_FATHER
class CTelegramHandler : public TELEGRAMBYLEO_TLGHANDLER_FATHER
#else
class CTelegramHandler
#endif // TELEGRAMBYLEO_TLGHANDLER_FATHER
{
public:
CTelegramHandler(void) {}
~CTelegramHandler(void) {}
//---
virtual void OnMessage(CJsonNode& node) {} // message
virtual void OnEditedMessage(CJsonNode& node) {} // edited_message
virtual void OnChannelPost(CJsonNode& node) {} // channel_post
virtual void OnEditedChannelPost(CJsonNode& node) {} // edited_channel_post
virtual void OnBusinessConnection(CJsonNode& node) {} // business_connection
virtual void OnBusinessMessage(CJsonNode& node) {} // business_message
virtual void OnEditedBusinessMessage(CJsonNode& node) {} // edited_business_message
virtual void OnDeletedBusinessMessages(CJsonNode& node) {} // deleted_business_messages
virtual void OnGuestMessage(CJsonNode& node) {} // guest_message
virtual void OnMessageReaction(CJsonNode& node) {} // message_reaction
virtual void OnMessageReactionCount(CJsonNode& node) {} // message_reaction_count
virtual void OnInlineQuery(CJsonNode& node) {} // inline_query
virtual void OnChosenInlineResult(CJsonNode& node) {} // chosen_inline_result
virtual void OnCallbackQuery(CJsonNode& node) {} // callback_query
virtual void OnShippingQuery(CJsonNode& node) {} // shipping_query
virtual void OnPreCheckoutQuery(CJsonNode& node) {} // pre_checkout_query
virtual void OnPurchasedPaidMedia(CJsonNode& node) {} // purchased_paid_media
virtual void OnPoll(CJsonNode& node) {} // poll
virtual void OnPollAnswer(CJsonNode& node) {} // poll_answer
virtual void OnMyChatMember(CJsonNode& node) {} // my_chat_member
virtual void OnChatMember(CJsonNode& node) {} // chat_member
virtual void OnChatJoinRequest(CJsonNode& node) {} // chat_join_request
virtual void OnChatBoost(CJsonNode& node) {} // chat_boost
virtual void OnRemovedChatBoost(CJsonNode& node) {} // removed_chat_boost
virtual void OnManagedBot(CJsonNode& node) {} // managed_bot
virtual void OnSubscription(CJsonNode& node) {} // subscription
virtual void OnStoppedMessageGeneration(CJsonNode& node) {} // stopped_message_generation
};
}
//+------------------------------------------------------------------+
#endif // TELEGRAMBYLEO_SRC_BASE_BASE_MQH
//+------------------------------------------------------------------+