1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 00:37:15 +01:00

Incomplete Discord implementation.

This commit is contained in:
Sandu Liviu Catalin 2023-03-23 20:24:29 +02:00
parent e0761bf3b9
commit 8d93ab482c
41 changed files with 8121 additions and 84 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.7) cmake_minimum_required(VERSION 3.21)
project(SqMod) project(SqMod)
# This plug-in only works on 64-bit # This plug-in only works on 64-bit
@ -7,8 +7,7 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
endif() endif()
# Tell CMake where to find our scripts # Tell CMake where to find our scripts
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${PROJECT_SOURCE_DIR}/vendor/POCO/cmake)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/vendor/POCO/cmake)
# Several plugin options # Several plugin options
option(ENABLE_API21 "Build for 2.1 API." OFF) option(ENABLE_API21 "Build for 2.1 API." OFF)
@ -20,85 +19,12 @@ option(ENABLE_BUILTIN_MYSQL_C "Enable built-in MySQL connector library" OFF)
if(WIN32 AND MINGW) if(WIN32 AND MINGW)
option(COPY_DEPENDENCIES "Copy dependent DLLs into the deps folder." OFF) option(COPY_DEPENDENCIES "Copy dependent DLLs into the deps folder." OFF)
endif() endif()
# Discord suppport
option(ENABLE_DISCORD "Enable built-in Discord support." ON)
# C++14 is mandatory # C++17 is mandatory (globally)
set(CPP_STD_NUMBER 14) set(CMAKE_CXX_STANDARD 17)
include(CheckCXXCompilerFlag)
# C++ standard availability check
if(${CMAKE_CXX_COMPILER_ID} MATCHES "(GNU)+")
# Specific flags
set(CPP_STD_COMPILER_FLAG "-std=c++14")
# Don't even bother with previous version
if(CPP_STD_NUMBER LESS 20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
check_cxx_compiler_flag(-std=c++20 HAVE_FLAG_STD_CXX20)
check_cxx_compiler_flag(-std=c++2a HAVE_FLAG_STD_CXX2A)
if(HAVE_FLAG_STD_CXX20 OR HAVE_FLAG_STD_CXX2A)
# We can use C++20
set(CPP_STD_NUMBER 20)
# Specific flags
if (HAVE_FLAG_STD_CXX2A AND NOT HAVE_FLAG_STD_CXX20)
set(CPP_STD_COMPILER_FLAG "-std=c++2a")
else()
set(CPP_STD_COMPILER_FLAG "-std=c++20")
endif()
# Need these workarounds for older CMake
if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
endif()
endif()
endif()
endif()
# Don't even bother with previous version
if(CPP_STD_NUMBER LESS 17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)
check_cxx_compiler_flag(-std=c++17 HAVE_FLAG_STD_CXX17)
check_cxx_compiler_flag(-std=c++1z HAVE_FLAG_STD_CXX1Z)
if(HAVE_FLAG_STD_CXX17 OR HAVE_FLAG_STD_CXX1Z)
# We can use C++17
set(CPP_STD_NUMBER 17)
# Specific flags
if (HAVE_FLAG_STD_CXX1Z AND NOT HAVE_FLAG_STD_CXX17)
set(CPP_STD_COMPILER_FLAG "-std=c++1z")
else()
set(CPP_STD_COMPILER_FLAG "-std=c++17")
endif()
# Need these workarounds for older CMake
if(${CMAKE_VERSION} VERSION_LESS "3.8.0")
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
endif()
endif()
endif()
endif()
else()
# C++14 is mandatory
set(CPP_STD_NUMBER 14)
endif()
message(STATUS "SqMod: Using C++${CPP_STD_NUMBER} standard.")
# Default to the identified standard
if(CMAKE_VERSION VERSION_LESS "3.1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPP_STD_COMPILER_FLAG}")
else()
# Apparently the above does not work with cmake from on debian 8
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPP_STD_COMPILER_FLAG}")
# F* you too Debian. What can I say.
if(CMAKE_VERSION VERSION_LESS "3.8.0" AND CPP_STD_NUMBER LESS 17)
# Try the standard method as well
set(CMAKE_CXX_STANDARD ${CPP_STD_NUMBER})
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
endif()
# Strip binary # Strip binary
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s -g") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s -g")

View File

@ -92,6 +92,7 @@ add_library(SqModule MODULE SqBase.hpp Main.cpp
Library/Utils.cpp Library/Utils.hpp Library/Utils.cpp Library/Utils.hpp
Library/Utils/Announce.cpp Library/Utils/Announce.hpp Library/Utils/Announce.cpp Library/Utils/Announce.hpp
Library/Utils/String.cpp Library/Utils/String.hpp Library/Utils/String.cpp Library/Utils/String.hpp
Library/Utils/Template.cpp Library/Utils/Template.hpp
Library/Utils/Vector.cpp Library/Utils/Vector.hpp Library/Utils/Vector.cpp Library/Utils/Vector.hpp
Library/XML.cpp Library/XML.hpp Library/XML.cpp Library/XML.hpp
Library/ZMQ.cpp Library/ZMQ.hpp Library/ZMQ.cpp Library/ZMQ.hpp
@ -118,6 +119,8 @@ add_library(SqModule MODULE SqBase.hpp Main.cpp
Register.cpp Register.cpp
Exports.cpp Exports.cpp
) )
# The module requires C++ 17
set_property(TARGET SqModule PROPERTY CXX_STANDARD 17)
# Various definitions required by the plug-in # Various definitions required by the plug-in
target_compile_definitions(SqModule PRIVATE SCRAT_USE_EXCEPTIONS=1) target_compile_definitions(SqModule PRIVATE SCRAT_USE_EXCEPTIONS=1)
# SDK targeting # SDK targeting
@ -135,7 +138,7 @@ if(WIN32 OR MINGW)
target_link_libraries(SqModule wsock32 ws2_32 shlwapi) target_link_libraries(SqModule wsock32 ws2_32 shlwapi)
endif() endif()
# Link to base libraries # Link to base libraries
target_link_libraries(SqModule RPMalloc Squirrel fmt::fmt SimpleINI TinyDir xxHash ConcurrentQueue SAJSON CPR UTF8Lib PUGIXML CivetWeb maxminddb libzmq-static) target_link_libraries(SqModule RPMalloc Squirrel fmt::fmt SimpleINI TinyDir xxHash ConcurrentQueue SAJSON CPR UTF8Lib PUGIXML CivetWeb inja maxminddb libzmq-static)
# Link to POCO libraries # Link to POCO libraries
target_link_libraries(SqModule Poco::Foundation Poco::Crypto Poco::Data Poco::Net) target_link_libraries(SqModule Poco::Foundation Poco::Crypto Poco::Data Poco::Net)
# Does POCO have SQLite support? # Does POCO have SQLite support?
@ -174,6 +177,31 @@ if(POSTGRESQL_FOUND)
# Inform the plug-in that it can make use of this library # Inform the plug-in that it can make use of this library
target_compile_definitions(SqModule PRIVATE SQMOD_POCO_HAS_POSTGRESQL=1) target_compile_definitions(SqModule PRIVATE SQMOD_POCO_HAS_POSTGRESQL=1)
endif() endif()
# Is Discord support enabled?
if(ENABLE_DISCORD)
target_link_libraries(SqModule dpp)
target_sources(SqModule PRIVATE
Library/Discord.cpp Library/Discord.hpp
Library/Discord/Application.hpp Library/Discord/Application.cpp
Library/Discord/Automod.hpp Library/Discord/Automod.cpp
Library/Discord/Channel.hpp Library/Discord/Channel.cpp
Library/Discord/Client.hpp Library/Discord/Client.cpp
Library/Discord/Cluster.hpp Library/Discord/Cluster.cpp
Library/Discord/Command.hpp Library/Discord/Command.cpp
Library/Discord/Constants.hpp Library/Discord/Constants.cpp
Library/Discord/Events.hpp Library/Discord/Events.cpp
Library/Discord/Guild.hpp Library/Discord/Guild.cpp
Library/Discord/Integration.hpp Library/Discord/Integration.cpp
Library/Discord/Message.hpp Library/Discord/Message.cpp
Library/Discord/Misc.hpp Library/Discord/Misc.cpp
Library/Discord/Presence.hpp Library/Discord/Presence.cpp
Library/Discord/Role.hpp Library/Discord/Role.cpp
Library/Discord/User.hpp Library/Discord/User.cpp
Library/Discord/Utilities.hpp Library/Discord/Utilities.cpp
)
# Inform the plug-in that discord is enabled
target_compile_definitions(SqModule PRIVATE SQMOD_DISCORD=1)
endif()
# Determine if build mode # Determine if build mode
if(${CMAKE_BUILD_TYPE} MATCHES "(Release)+") if(${CMAKE_BUILD_TYPE} MATCHES "(Release)+")
target_compile_definitions(SqModule PRIVATE NDEBUG=1) target_compile_definitions(SqModule PRIVATE NDEBUG=1)
@ -218,6 +246,12 @@ else()
endif() endif()
# Copy module into the plug-ins folder # Copy module into the plug-ins folder
add_custom_command(TARGET SqModule POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:SqModule> "${PROJECT_SOURCE_DIR}/bin/plugins") add_custom_command(TARGET SqModule POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:SqModule> "${PROJECT_SOURCE_DIR}/bin/plugins")
# Copy DPP into the bin folder
if (ENABLE_DISCORD)
if (WIN32 OR MINGW)
add_custom_command(TARGET SqModule POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:dpp> "${PROJECT_SOURCE_DIR}/bin")
endif()
endif()
# Copy several dependent DLLs on windows to make distribution easier (used mainly by people that distribute builds) # Copy several dependent DLLs on windows to make distribution easier (used mainly by people that distribute builds)
if(WIN32 AND MINGW AND COPY_DEPENDENCIES) if(WIN32 AND MINGW AND COPY_DEPENDENCIES)
get_filename_component(MINGW_BIN_PATH ${CMAKE_C_COMPILER} DIRECTORY REALPATH) get_filename_component(MINGW_BIN_PATH ${CMAKE_C_COMPILER} DIRECTORY REALPATH)

View File

@ -49,6 +49,9 @@ extern void TerminateRoutines();
extern void TerminateCommands(); extern void TerminateCommands();
extern void TerminateSignals(); extern void TerminateSignals();
extern void TerminateNet(); extern void TerminateNet();
#ifdef SQMOD_DISCORD
extern void TerminateDiscord();
#endif
extern void TerminatePocoNet(); extern void TerminatePocoNet();
extern void TerminatePocoData(); extern void TerminatePocoData();
@ -553,6 +556,11 @@ void Core::Terminate(bool shutdown)
// Release network // Release network
TerminateNet(); TerminateNet();
cLogDbg(m_Verbosity >= 1, "Network terminated"); cLogDbg(m_Verbosity >= 1, "Network terminated");
// Release DPP
#ifdef SQMOD_DISCORD
TerminateDiscord();
cLogDbg(m_Verbosity >= 1, "Discord terminated");
#endif
// Release Poco statement results // Release Poco statement results
TerminatePocoNet(); TerminatePocoNet();
TerminatePocoData(); TerminatePocoData();

View File

@ -0,0 +1,51 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord.hpp"
#include "Library/Discord/Cluster.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
void TerminateDiscord()
{
// Go over all clusters and try to terminate them
for (DpCluster * inst = DpCluster::sHead; inst && inst->mNext != DpCluster::sHead; inst = inst->mNext)
{
inst->Terminate(); // Terminate the cluster
}
}
// ------------------------------------------------------------------------------------------------
void ProcessDiscord()
{
// Go over all clusters and allow them to process data
for (DpCluster * inst = DpCluster::sHead; inst && inst->mNext != DpCluster::sHead; inst = inst->mNext)
{
inst->Process();
}
}
// ------------------------------------------------------------------------------------------------
extern void Register_Discord_Constants(HSQUIRRELVM vm, Table & ns);
extern void Register_Discord_Events(HSQUIRRELVM vm, Table & ns);
extern void Register_Discord_Misc(HSQUIRRELVM vm, Table & ns);
extern void Register_Discord_Cluster(HSQUIRRELVM vm, Table & ns);
// ================================================================================================
void Register_Discord(HSQUIRRELVM vm)
{
Table ns(vm);
// --------------------------------------------------------------------------------------------
Register_Discord_Constants(vm, ns);
{
Table ens(vm);
Register_Discord_Events(vm, ens);
ns.Bind(_SC("Event"), ens);
}
Register_Discord_Misc(vm, ns);
Register_Discord_Cluster(vm, ns);
// --------------------------------------------------------------------------------------------
RootTable(vm).Bind(_SC("SqDiscord"), ns);
}
} // Namespace:: SqMod

View File

@ -0,0 +1,17 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Library/IO/Buffer.hpp"
// ------------------------------------------------------------------------------------------------
#include <atomic>
// ------------------------------------------------------------------------------------------------
#include <sqratFunction.h>
#include <concurrentqueue.h>
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Application.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Automod.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Channel.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Client.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,492 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Cluster.hpp"
#include "Library/Discord/Events.hpp"
#include "Logger.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqDpClusterTypename, _SC("SqDiscordCluster"))
SQMOD_DECL_TYPENAME(SqDpClusterOptionsTypename, _SC("SqDiscordClusterOptions"))
// ------------------------------------------------------------------------------------------------
DpCluster::DpCluster(DpClusterOptions & o)
: Base(), mQueue(4096)
, mC(std::make_unique< dpp::cluster >(o.mToken, o.mIntents, o.mShards, o.mClusterID, o.mMaxClusters, o.mCompressed, o.mPolicy, o.mRequestThreads, o.mRequestThreadsRaw))
, mSqEvents(), mEvents(), mEventsHandle()
{
// Make sure all event handles are not valid
mEventsHandle.fill(0);
// Initialize event signals
InitEvents();
// Proxy library logging to our logger
if (!o.mCustomLogging)
{
mC->on_log([](const dpp::log_t& event) {
switch (event.severity)
{
case dpp::ll_trace: Logger::Get().Send(LOGL_DBG, true, event.message.c_str(), event.message.size()); break;
case dpp::ll_debug: Logger::Get().Send(LOGL_DBG, true, event.message.c_str(), event.message.size()); break;
case dpp::ll_info: Logger::Get().Send(LOGL_INF, true, event.message.c_str(), event.message.size()); break;
case dpp::ll_warning: Logger::Get().Send(LOGL_WRN, true, event.message.c_str(), event.message.size()); break;
case dpp::ll_error: Logger::Get().Send(LOGL_ERR, true, event.message.c_str(), event.message.size()); break;
case dpp::ll_critical: Logger::Get().Send(LOGL_FTL, true, event.message.c_str(), event.message.size()); break;
default: break;
}
});
}
// Remember this instance
ChainInstance();
}
// ------------------------------------------------------------------------------------------------
SQMOD_NODISCARD LightObj EventToScriptObject(uint8_t type, uintptr_t data);
void EventInvokeCleanup(uint8_t type, uintptr_t data);
// ------------------------------------------------------------------------------------------------
void DpCluster::Process(bool force)
{
// Is there a valid connection?
if (!mC && !force)
{
return; // No point in going forward
}
EventItem event;
// Retrieve each event individually and process it
for (size_t count = mQueue.size_approx(), n = 0; n <= count; ++n)
{
// Try to get an event from the queue
if (mQueue.try_dequeue(event))
{
// Fetch the type of event
const auto id = static_cast< size_t >(event->GetEventID());
// Is this a valid event and is anyone listening to it?
if (!(event->mFrom) || !(mEvents[id].first) || mEvents[id].first->IsEmpty())
{
continue; // Move on
}
// Transform the event instance into a script object
LightObj obj = event->ToScriptObject();
// Allow the script to take ownership of the event instance now
[[maybe_unused]] auto p = event.release();
// Don't abort everything down the line for an error caused by a discord event handler
try {
(*mEvents[id].first)(obj); // Forward the call to the associated signal
} catch (const std::exception & e) {
LogErr("Squirrel exception caught in (%s) discord event", p->GetEventName().data());
LogSInf("Message: %s", e.what());
}
// Allow the event instance to clean itself (i.e. invalidate itself)
// User should not keep this event object for later use!
// Event data is accessible only during the event signal
p->Cleanup();
}
}
}
// ------------------------------------------------------------------------------------------------
void DpCluster::Terminate()
{
// Stop the cluster connection
if (mC) mC->shutdown();
// Release associated script objects
mSqEvents.Release();
// Release event signal objects
DropEvents();
// Delete the cluster instance
mC.reset();
}
// ================================================================================================
void Register_Discord_Cluster(HSQUIRRELVM vm, Table & ns)
{
ns.Bind(_SC("ClusterOptions"),
Class< DpClusterOptions >(vm, SqDpClusterOptionsTypename::Str)
// Constructors
.Ctor< StackStrF & >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpClusterOptionsTypename::Fn)
);
ns.Bind(_SC("Cluster"),
Class< DpCluster, NoCopy< DpCluster > >(vm, SqDpClusterTypename::Str)
// Constructors
.Ctor< DpClusterOptions & >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpClusterTypename::Fn)
// Member Properties
.Prop(_SC("On"), &DpCluster::GetEvents)
// Member Methods
.Func(_SC("Start"), &DpCluster::Start)
.Func(_SC("Stop"), &DpCluster::Stop)
.Func(_SC("EnableEvent"), &DpCluster::EnableEvent)
.Func(_SC("DisableEvent"), &DpCluster::DisableEvent)
);
}
// ------------------------------------------------------------------------------------------------
DpCluster & DpCluster::EnableEvent(SQInteger id)
{
// Retrieve managed cluster instance
auto & c = Valid("enable event on a");
// Assigned event handle
dpp::event_handle eh = 0;
// Make sure the specified event handle is valid
if (id >= 0 && id < static_cast< SQInteger >(DpEventID::Max))
{
eh = mEventsHandle[static_cast< size_t >(id)]; // Get the real handle
}
// Is this event already enabled?
if (eh != 0)
{
return *this; // Job already done
}
// Identify event type
switch (id)
{
case DpEventID::VoiceStateUpdate: eh = c.on_voice_state_update.attach([this](const dpp::voice_state_update_t & e) { OnVoiceStateUpdate(e); }); break;
case DpEventID::VoiceClientDisconnect: eh = c.on_voice_client_disconnect.attach([this](const dpp::voice_client_disconnect_t & e) { OnVoiceClientDisconnect(e); }); break;
case DpEventID::VoiceClientSpeaking: eh = c.on_voice_client_speaking.attach([this](const dpp::voice_client_speaking_t & e) { OnVoiceClientSpeaking(e); }); break;
case DpEventID::Log: eh = c.on_log.attach([this](const dpp::log_t & e) { OnLog(e); }); break;
case DpEventID::GuildJoinRequestDelete: eh = c.on_guild_join_request_delete.attach([this](const dpp::guild_join_request_delete_t & e) { OnGuildJoinRequestDelete(e); }); break;
case DpEventID::InteractionCreate: eh = c.on_interaction_create.attach([this](const dpp::interaction_create_t & e) { OnInteractionCreate(e); }); break;
case DpEventID::SlashCommand: eh = c.on_slashcommand.attach([this](const dpp::slashcommand_t & e) { OnSlashCommand(e); }); break;
case DpEventID::ButtonClick: eh = c.on_button_click.attach([this](const dpp::button_click_t & e) { OnButtonClick(e); }); break;
case DpEventID::AutoComplete: eh = c.on_autocomplete.attach([this](const dpp::autocomplete_t & e) { OnAutoComplete(e); }); break;
case DpEventID::SelectClick: eh = c.on_select_click.attach([this](const dpp::select_click_t & e) { OnSelectClick(e); }); break;
case DpEventID::MessageContextMenu: eh = c.on_message_context_menu.attach([this](const dpp::message_context_menu_t & e) { OnMessageContextMenu(e); }); break;
case DpEventID::UserContextMenu: eh = c.on_user_context_menu.attach([this](const dpp::user_context_menu_t & e) { OnUserContextMenu(e); }); break;
case DpEventID::FormSubmit: eh = c.on_form_submit.attach([this](const dpp::form_submit_t & e) { OnFormSubmit(e); }); break;
case DpEventID::GuildDelete: eh = c.on_guild_delete.attach([this](const dpp::guild_delete_t & e) { OnGuildDelete(e); }); break;
case DpEventID::ChannelDelete: eh = c.on_channel_delete.attach([this](const dpp::channel_delete_t & e) { OnChannelDelete(e); }); break;
case DpEventID::ChannelUpdate: eh = c.on_channel_update.attach([this](const dpp::channel_update_t & e) { OnChannelUpdate(e); }); break;
case DpEventID::Ready: eh = c.on_ready.attach([this](const dpp::ready_t & e) { OnReady(e); }); break;
case DpEventID::MessageDelete: eh = c.on_message_delete.attach([this](const dpp::message_delete_t & e) { OnMessageDelete(e); }); break;
case DpEventID::GuildMemberRemove: eh = c.on_guild_member_remove.attach([this](const dpp::guild_member_remove_t & e) { OnGuildMemberRemove(e); }); break;
case DpEventID::Resumed: eh = c.on_resumed.attach([this](const dpp::resumed_t & e) { OnResumed(e); }); break;
case DpEventID::GuildRoleCreate: eh = c.on_guild_role_create.attach([this](const dpp::guild_role_create_t & e) { OnGuildRoleCreate(e); }); break;
case DpEventID::TypingStart: eh = c.on_typing_start.attach([this](const dpp::typing_start_t & e) { OnTypingStart(e); }); break;
case DpEventID::MessageReactionAdd: eh = c.on_message_reaction_add.attach([this](const dpp::message_reaction_add_t & e) { OnMessageReactionAdd(e); }); break;
case DpEventID::GuildMembersChunk: eh = c.on_guild_members_chunk.attach([this](const dpp::guild_members_chunk_t & e) { OnGuildMembersChunk(e); }); break;
case DpEventID::MessageReactionRemove: eh = c.on_message_reaction_remove.attach([this](const dpp::message_reaction_remove_t & e) { OnMessageReactionRemove(e); }); break;
case DpEventID::GuildCreate: eh = c.on_guild_create.attach([this](const dpp::guild_create_t & e) { OnGuildCreate(e); }); break;
case DpEventID::ChannelCreate: eh = c.on_channel_create.attach([this](const dpp::channel_create_t & e) { OnChannelCreate(e); }); break;
case DpEventID::MessageReactionRemoveEmoji: eh = c.on_message_reaction_remove_emoji.attach([this](const dpp::message_reaction_remove_emoji_t & e) { OnMessageReactionRemoveEmoji(e); }); break;
case DpEventID::MessageDeleteDulk: eh = c.on_message_delete_bulk.attach([this](const dpp::message_delete_bulk_t & e) { OnMessageDeleteDulk(e); }); break;
case DpEventID::GuildRoleUpdate: eh = c.on_guild_role_update.attach([this](const dpp::guild_role_update_t & e) { OnGuildRoleUpdate(e); }); break;
case DpEventID::GuildRoleDelete: eh = c.on_guild_role_delete.attach([this](const dpp::guild_role_delete_t & e) { OnGuildRoleDelete(e); }); break;
case DpEventID::ChannelPinsUpdate: eh = c.on_channel_pins_update.attach([this](const dpp::channel_pins_update_t & e) { OnChannelPinsUpdate(e); }); break;
case DpEventID::MessageReactionRemoveAll: eh = c.on_message_reaction_remove_all.attach([this](const dpp::message_reaction_remove_all_t & e) { OnMessageReactionRemoveAll(e); }); break;
case DpEventID::VoiceServerUpdate: eh = c.on_voice_server_update.attach([this](const dpp::voice_server_update_t & e) { OnVoiceServerUpdate(e); }); break;
case DpEventID::GuildEmojisUpdate: eh = c.on_guild_emojis_update.attach([this](const dpp::guild_emojis_update_t & e) { OnGuildEmojisUpdate(e); }); break;
case DpEventID::GuildStickersUpdate: eh = c.on_guild_stickers_update.attach([this](const dpp::guild_stickers_update_t & e) { OnGuildStickersUpdate(e); }); break;
case DpEventID::PresenceUpdate: eh = c.on_presence_update.attach([this](const dpp::presence_update_t & e) { OnPresenceUpdate(e); }); break;
case DpEventID::WebhooksUpdate: eh = c.on_webhooks_update.attach([this](const dpp::webhooks_update_t & e) { OnWebhooksUpdate(e); }); break;
case DpEventID::AutomodRuleCreate: eh = c.on_automod_rule_create.attach([this](const dpp::automod_rule_create_t & e) { OnAutomodRuleCreate(e); }); break;
case DpEventID::AutomodRuleUpdate: eh = c.on_automod_rule_update.attach([this](const dpp::automod_rule_update_t & e) { OnAutomodRuleUpdate(e); }); break;
case DpEventID::AutomodRuleDelete: eh = c.on_automod_rule_delete.attach([this](const dpp::automod_rule_delete_t & e) { OnAutomodRuleDelete(e); }); break;
case DpEventID::AutomodRuleExecute: eh = c.on_automod_rule_execute.attach([this](const dpp::automod_rule_execute_t & e) { OnAutomodRuleExecute(e); }); break;
case DpEventID::GuildMemberAdd: eh = c.on_guild_member_add.attach([this](const dpp::guild_member_add_t & e) { OnGuildMemberAdd(e); }); break;
case DpEventID::InviteDelete: eh = c.on_invite_delete.attach([this](const dpp::invite_delete_t & e) { OnInviteDelete(e); }); break;
case DpEventID::GuildUpdate: eh = c.on_guild_update.attach([this](const dpp::guild_update_t & e) { OnGuildUpdate(e); }); break;
case DpEventID::GuildIntegrationsUpdate: eh = c.on_guild_integrations_update.attach([this](const dpp::guild_integrations_update_t & e) { OnGuildIntegrationsUpdate(e); }); break;
case DpEventID::GuildMemberUpdate: eh = c.on_guild_member_update.attach([this](const dpp::guild_member_update_t & e) { OnGuildMemberUpdate(e); }); break;
case DpEventID::InviteCreate: eh = c.on_invite_create.attach([this](const dpp::invite_create_t & e) { OnInviteCreate(e); }); break;
case DpEventID::MessageUpdate: eh = c.on_message_update.attach([this](const dpp::message_update_t & e) { OnMessageUpdate(e); }); break;
case DpEventID::UserUpdate: eh = c.on_user_update.attach([this](const dpp::user_update_t & e) { OnUserUpdate(e); }); break;
case DpEventID::MessageCreate: eh = c.on_message_create.attach([this](const dpp::message_create_t & e) { OnMessageCreate(e); }); break;
case DpEventID::GuildBanAdd: eh = c.on_guild_ban_add.attach([this](const dpp::guild_ban_add_t & e) { OnGuildBanAdd(e); }); break;
case DpEventID::GuildBanRemove: eh = c.on_guild_ban_remove.attach([this](const dpp::guild_ban_remove_t & e) { OnGuildBanRemove(e); }); break;
case DpEventID::IntegrationCreate: eh = c.on_integration_create.attach([this](const dpp::integration_create_t & e) { OnIntegrationCreate(e); }); break;
case DpEventID::IntegrationUpdate: eh = c.on_integration_update.attach([this](const dpp::integration_update_t & e) { OnIntegrationUpdate(e); }); break;
case DpEventID::IntegrationDelete: eh = c.on_integration_delete.attach([this](const dpp::integration_delete_t & e) { OnIntegrationDelete(e); }); break;
case DpEventID::ThreadCreate: eh = c.on_thread_create.attach([this](const dpp::thread_create_t & e) { OnThreadCreate(e); }); break;
case DpEventID::ThreadUpdate: eh = c.on_thread_update.attach([this](const dpp::thread_update_t & e) { OnThreadUpdate(e); }); break;
case DpEventID::ThreadDelete: eh = c.on_thread_delete.attach([this](const dpp::thread_delete_t & e) { OnThreadDelete(e); }); break;
case DpEventID::ThreadListSync: eh = c.on_thread_list_sync.attach([this](const dpp::thread_list_sync_t & e) { OnThreadListSync(e); }); break;
case DpEventID::ThreadMemberUpdate: eh = c.on_thread_member_update.attach([this](const dpp::thread_member_update_t & e) { OnThreadMemberUpdate(e); }); break;
case DpEventID::ThreadMembersUpdate: eh = c.on_thread_members_update.attach([this](const dpp::thread_members_update_t & e) { OnThreadMembersUpdate(e); }); break;
case DpEventID::GuildScheduledEventCreate: eh = c.on_guild_scheduled_event_create.attach([this](const dpp::guild_scheduled_event_create_t & e) { OnGuildScheduledEventCreate(e); }); break;
case DpEventID::GuildScheduledEventUpdate: eh = c.on_guild_scheduled_event_update.attach([this](const dpp::guild_scheduled_event_update_t & e) { OnGuildScheduledEventUpdate(e); }); break;
case DpEventID::GuildScheduledEventDelete: eh = c.on_guild_scheduled_event_delete.attach([this](const dpp::guild_scheduled_event_delete_t & e) { OnGuildScheduledEventDelete(e); }); break;
case DpEventID::GuildScheduledEventUserAdd: eh = c.on_guild_scheduled_event_user_add.attach([this](const dpp::guild_scheduled_event_user_add_t & e) { OnGuildScheduledEventUserAdd(e); }); break;
case DpEventID::GuildScheduledEventUserRemove: eh = c.on_guild_scheduled_event_user_remove.attach([this](const dpp::guild_scheduled_event_user_remove_t & e) { OnGuildScheduledEventUserRemove(e); }); break;
case DpEventID::VoiceBufferSend: eh = c.on_voice_buffer_send.attach([this](const dpp::voice_buffer_send_t & e) { OnVoiceBufferSend(e); }); break;
case DpEventID::VoiceUserTalking: eh = c.on_voice_user_talking.attach([this](const dpp::voice_user_talking_t & e) { OnVoiceUserTalking(e); }); break;
case DpEventID::VoiceReady: eh = c.on_voice_ready.attach([this](const dpp::voice_ready_t & e) { OnVoiceReady(e); }); break;
case DpEventID::VoiceReceive: eh = c.on_voice_receive.attach([this](const dpp::voice_receive_t & e) { OnVoiceReceive(e); }); break;
case DpEventID::VoiceReceiveCombined: eh = c.on_voice_receive_combined.attach([this](const dpp::voice_receive_t & e) { OnVoiceReceiveCombined(e); }); break;
case DpEventID::VoiceTrackMarker: eh = c.on_voice_track_marker.attach([this](const dpp::voice_track_marker_t & e) { OnVoiceTrackMarker(e); }); break;
case DpEventID::StageInstanceCreate: eh = c.on_stage_instance_create.attach([this](const dpp::stage_instance_create_t & e) { OnStageInstanceCreate(e); }); break;
case DpEventID::StageInstanceUpdate: eh = c.on_stage_instance_update.attach([this](const dpp::stage_instance_update_t & e) { OnStageInstanceUpdate(e); }); break;
case DpEventID::StageInstanceDelete: eh = c.on_stage_instance_delete.attach([this](const dpp::stage_instance_delete_t & e) { OnStageInstanceDelete(e); }); break;
case DpEventID::Max: // Fall through
default: STHROWF("Invalid discord event identifier {}", id);
}
// Remember the designated event handle
mEventsHandle[static_cast< size_t >(id)] = eh;
// Allow chaining
return *this;
}
// ------------------------------------------------------------------------------------------------
DpCluster & DpCluster::DisableEvent(SQInteger id)
{
// Retrieve managed cluster instance
auto & c = Valid("disable event on a");
// Assigned event handle
dpp::event_handle eh = 0;
// Make sure the specified event handle is valid
if (id >= 0 && id < static_cast< SQInteger >(DpEventID::Max))
{
eh = mEventsHandle[static_cast< size_t >(id)]; // Get the real handle
}
// Is there anything attached to event dispatched?
if (eh == 0)
{
return *this; // Nothing to detach
}
// Identify event type
switch (id)
{
case DpEventID::VoiceStateUpdate: c.on_voice_state_update.detach(eh); break;
case DpEventID::VoiceClientDisconnect: c.on_voice_client_disconnect.detach(eh); break;
case DpEventID::VoiceClientSpeaking: c.on_voice_client_speaking.detach(eh); break;
case DpEventID::Log: c.on_log.detach(eh); break;
case DpEventID::GuildJoinRequestDelete: c.on_guild_join_request_delete.detach(eh); break;
case DpEventID::InteractionCreate: c.on_interaction_create.detach(eh); break;
case DpEventID::SlashCommand: c.on_slashcommand.detach(eh); break;
case DpEventID::ButtonClick: c.on_button_click.detach(eh); break;
case DpEventID::AutoComplete: c.on_autocomplete.detach(eh); break;
case DpEventID::SelectClick: c.on_select_click.detach(eh); break;
case DpEventID::MessageContextMenu: c.on_message_context_menu.detach(eh); break;
case DpEventID::UserContextMenu: c.on_user_context_menu.detach(eh); break;
case DpEventID::FormSubmit: c.on_form_submit.detach(eh); break;
case DpEventID::GuildDelete: c.on_guild_delete.detach(eh); break;
case DpEventID::ChannelDelete: c.on_channel_delete.detach(eh); break;
case DpEventID::ChannelUpdate: c.on_channel_update.detach(eh); break;
case DpEventID::Ready: c.on_ready.detach(eh); break;
case DpEventID::MessageDelete: c.on_message_delete.detach(eh); break;
case DpEventID::GuildMemberRemove: c.on_guild_member_remove.detach(eh); break;
case DpEventID::Resumed: c.on_resumed.detach(eh); break;
case DpEventID::GuildRoleCreate: c.on_guild_role_create.detach(eh); break;
case DpEventID::TypingStart: c.on_typing_start.detach(eh); break;
case DpEventID::MessageReactionAdd: c.on_message_reaction_add.detach(eh); break;
case DpEventID::GuildMembersChunk: c.on_guild_members_chunk.detach(eh); break;
case DpEventID::MessageReactionRemove: c.on_message_reaction_remove.detach(eh); break;
case DpEventID::GuildCreate: c.on_guild_create.detach(eh); break;
case DpEventID::ChannelCreate: c.on_channel_create.detach(eh); break;
case DpEventID::MessageReactionRemoveEmoji: c.on_message_reaction_remove_emoji.detach(eh); break;
case DpEventID::MessageDeleteDulk: c.on_message_delete_bulk.detach(eh); break;
case DpEventID::GuildRoleUpdate: c.on_guild_role_update.detach(eh); break;
case DpEventID::GuildRoleDelete: c.on_guild_role_delete.detach(eh); break;
case DpEventID::ChannelPinsUpdate: c.on_channel_pins_update.detach(eh); break;
case DpEventID::MessageReactionRemoveAll: c.on_message_reaction_remove_all.detach(eh); break;
case DpEventID::VoiceServerUpdate: c.on_voice_server_update.detach(eh); break;
case DpEventID::GuildEmojisUpdate: c.on_guild_emojis_update.detach(eh); break;
case DpEventID::GuildStickersUpdate: c.on_guild_stickers_update.detach(eh); break;
case DpEventID::PresenceUpdate: c.on_presence_update.detach(eh); break;
case DpEventID::WebhooksUpdate: c.on_webhooks_update.detach(eh); break;
case DpEventID::AutomodRuleCreate: c.on_automod_rule_create.detach(eh); break;
case DpEventID::AutomodRuleUpdate: c.on_automod_rule_update.detach(eh); break;
case DpEventID::AutomodRuleDelete: c.on_automod_rule_delete.detach(eh); break;
case DpEventID::AutomodRuleExecute: c.on_automod_rule_execute.detach(eh); break;
case DpEventID::GuildMemberAdd: c.on_guild_member_add.detach(eh); break;
case DpEventID::InviteDelete: c.on_invite_delete.detach(eh); break;
case DpEventID::GuildUpdate: c.on_guild_update.detach(eh); break;
case DpEventID::GuildIntegrationsUpdate: c.on_guild_integrations_update.detach(eh); break;
case DpEventID::GuildMemberUpdate: c.on_guild_member_update.detach(eh); break;
case DpEventID::InviteCreate: c.on_invite_create.detach(eh); break;
case DpEventID::MessageUpdate: c.on_message_update.detach(eh); break;
case DpEventID::UserUpdate: c.on_user_update.detach(eh); break;
case DpEventID::MessageCreate: c.on_message_create.detach(eh); break;
case DpEventID::GuildBanAdd: c.on_guild_ban_add.detach(eh); break;
case DpEventID::GuildBanRemove: c.on_guild_ban_remove.detach(eh); break;
case DpEventID::IntegrationCreate: c.on_integration_create.detach(eh); break;
case DpEventID::IntegrationUpdate: c.on_integration_update.detach(eh); break;
case DpEventID::IntegrationDelete: c.on_integration_delete.detach(eh); break;
case DpEventID::ThreadCreate: c.on_thread_create.detach(eh); break;
case DpEventID::ThreadUpdate: c.on_thread_update.detach(eh); break;
case DpEventID::ThreadDelete: c.on_thread_delete.detach(eh); break;
case DpEventID::ThreadListSync: c.on_thread_list_sync.detach(eh); break;
case DpEventID::ThreadMemberUpdate: c.on_thread_member_update.detach(eh); break;
case DpEventID::ThreadMembersUpdate: c.on_thread_members_update.detach(eh); break;
case DpEventID::GuildScheduledEventCreate: c.on_guild_scheduled_event_create.detach(eh); break;
case DpEventID::GuildScheduledEventUpdate: c.on_guild_scheduled_event_update.detach(eh); break;
case DpEventID::GuildScheduledEventDelete: c.on_guild_scheduled_event_delete.detach(eh); break;
case DpEventID::GuildScheduledEventUserAdd: c.on_guild_scheduled_event_user_add.detach(eh); break;
case DpEventID::GuildScheduledEventUserRemove: c.on_guild_scheduled_event_user_remove.detach(eh); break;
case DpEventID::VoiceBufferSend: c.on_voice_buffer_send.detach(eh); break;
case DpEventID::VoiceUserTalking: c.on_voice_user_talking.detach(eh); break;
case DpEventID::VoiceReady: c.on_voice_ready.detach(eh); break;
case DpEventID::VoiceReceive: c.on_voice_receive.detach(eh); break;
case DpEventID::VoiceReceiveCombined: c.on_voice_receive_combined.detach(eh); break;
case DpEventID::VoiceTrackMarker: c.on_voice_track_marker.detach(eh); break;
case DpEventID::StageInstanceCreate: c.on_stage_instance_create.detach(eh); break;
case DpEventID::StageInstanceUpdate: c.on_stage_instance_update.detach(eh); break;
case DpEventID::StageInstanceDelete: c.on_stage_instance_delete.detach(eh); break;
case DpEventID::Max: // Fall through
default: STHROWF("Invalid discord event identifier {}", id);
}
// Forget about this event handler
mEventsHandle[static_cast< size_t >(id)] = 0;
// Allow chaining
return *this;
}
// ------------------------------------------------------------------------------------------------
void DpCluster::OnVoiceStateUpdate(const dpp::voice_state_update_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceStateUpdateEvent(ev))); }
void DpCluster::OnVoiceClientDisconnect(const dpp::voice_client_disconnect_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceClientDisconnectEvent(ev))); }
void DpCluster::OnVoiceClientSpeaking(const dpp::voice_client_speaking_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceClientSpeakingEvent(ev))); }
void DpCluster::OnLog(const dpp::log_t & ev)
{ mQueue.enqueue(EventItem(new DpLogEvent(ev))); }
void DpCluster::OnGuildJoinRequestDelete(const dpp::guild_join_request_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildJoinRequestDeleteEvent(ev))); }
void DpCluster::OnInteractionCreate(const dpp::interaction_create_t & ev)
{ mQueue.enqueue(EventItem(new DpInteractionCreateEvent(ev))); }
void DpCluster::OnSlashCommand(const dpp::slashcommand_t & ev)
{ mQueue.enqueue(EventItem(new DpSlashCommandEvent(ev))); }
void DpCluster::OnButtonClick(const dpp::button_click_t & ev)
{ mQueue.enqueue(EventItem(new DpButtonClickEvent(ev))); }
void DpCluster::OnAutoComplete(const dpp::autocomplete_t & ev)
{ mQueue.enqueue(EventItem(new DpAutoCompleteEvent(ev))); }
void DpCluster::OnSelectClick(const dpp::select_click_t & ev)
{ mQueue.enqueue(EventItem(new DpSelectClickEvent(ev))); }
void DpCluster::OnMessageContextMenu(const dpp::message_context_menu_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageContextMenuEvent(ev))); }
void DpCluster::OnUserContextMenu(const dpp::user_context_menu_t & ev)
{ mQueue.enqueue(EventItem(new DpUserContextMenuEvent(ev))); }
void DpCluster::OnFormSubmit(const dpp::form_submit_t & ev)
{ mQueue.enqueue(EventItem(new DpFormSubmitEvent(ev))); }
void DpCluster::OnGuildDelete(const dpp::guild_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildDeleteEvent(ev))); }
void DpCluster::OnChannelDelete(const dpp::channel_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpChannelDeleteEvent(ev))); }
void DpCluster::OnChannelUpdate(const dpp::channel_update_t & ev)
{ mQueue.enqueue(EventItem(new DpChannelUpdateEvent(ev))); }
void DpCluster::OnReady(const dpp::ready_t & ev)
{ mQueue.enqueue(EventItem(new DpReadyEvent(ev))); }
void DpCluster::OnMessageDelete(const dpp::message_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageDeleteEvent(ev))); }
void DpCluster::OnGuildMemberRemove(const dpp::guild_member_remove_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildMemberRemoveEvent(ev))); }
void DpCluster::OnResumed(const dpp::resumed_t & ev)
{ mQueue.enqueue(EventItem(new DpResumedEvent(ev))); }
void DpCluster::OnGuildRoleCreate(const dpp::guild_role_create_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildRoleCreateEvent(ev))); }
void DpCluster::OnTypingStart(const dpp::typing_start_t & ev)
{ mQueue.enqueue(EventItem(new DpTypingStartEvent(ev))); }
void DpCluster::OnMessageReactionAdd(const dpp::message_reaction_add_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageReactionAddEvent(ev))); }
void DpCluster::OnGuildMembersChunk(const dpp::guild_members_chunk_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildMembersChunkEvent(ev))); }
void DpCluster::OnMessageReactionRemove(const dpp::message_reaction_remove_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageReactionRemoveEvent(ev))); }
void DpCluster::OnGuildCreate(const dpp::guild_create_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildCreateEvent(ev))); }
void DpCluster::OnChannelCreate(const dpp::channel_create_t & ev)
{ mQueue.enqueue(EventItem(new DpChannelCreateEvent(ev))); }
void DpCluster::OnMessageReactionRemoveEmoji(const dpp::message_reaction_remove_emoji_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageReactionRemoveEmojiEvent(ev))); }
void DpCluster::OnMessageDeleteDulk(const dpp::message_delete_bulk_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageDeleteDulkEvent(ev))); }
void DpCluster::OnGuildRoleUpdate(const dpp::guild_role_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildRoleUpdateEvent(ev))); }
void DpCluster::OnGuildRoleDelete(const dpp::guild_role_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildRoleDeleteEvent(ev))); }
void DpCluster::OnChannelPinsUpdate(const dpp::channel_pins_update_t & ev)
{ mQueue.enqueue(EventItem(new DpChannelPinsUpdateEvent(ev))); }
void DpCluster::OnMessageReactionRemoveAll(const dpp::message_reaction_remove_all_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageReactionRemoveAllEvent(ev))); }
void DpCluster::OnVoiceServerUpdate(const dpp::voice_server_update_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceServerUpdateEvent(ev))); }
void DpCluster::OnGuildEmojisUpdate(const dpp::guild_emojis_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildEmojisUpdateEvent(ev))); }
void DpCluster::OnGuildStickersUpdate(const dpp::guild_stickers_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildStickersUpdateEvent(ev))); }
void DpCluster::OnPresenceUpdate(const dpp::presence_update_t & ev)
{ mQueue.enqueue(EventItem(new DpPresenceUpdateEvent(ev))); }
void DpCluster::OnWebhooksUpdate(const dpp::webhooks_update_t & ev)
{ mQueue.enqueue(EventItem(new DpWebhooksUpdateEvent(ev))); }
void DpCluster::OnAutomodRuleCreate(const dpp::automod_rule_create_t & ev)
{ mQueue.enqueue(EventItem(new DpAutomodRuleCreateEvent(ev))); }
void DpCluster::OnAutomodRuleUpdate(const dpp::automod_rule_update_t & ev)
{ mQueue.enqueue(EventItem(new DpAutomodRuleUpdateEvent(ev))); }
void DpCluster::OnAutomodRuleDelete(const dpp::automod_rule_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpAutomodRuleDeleteEvent(ev))); }
void DpCluster::OnAutomodRuleExecute(const dpp::automod_rule_execute_t & ev)
{ mQueue.enqueue(EventItem(new DpAutomodRuleExecuteEvent(ev))); }
void DpCluster::OnGuildMemberAdd(const dpp::guild_member_add_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildMemberAddEvent(ev))); }
void DpCluster::OnInviteDelete(const dpp::invite_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpInviteDeleteEvent(ev))); }
void DpCluster::OnGuildUpdate(const dpp::guild_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildUpdateEvent(ev))); }
void DpCluster::OnGuildIntegrationsUpdate(const dpp::guild_integrations_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildIntegrationsUpdateEvent(ev))); }
void DpCluster::OnGuildMemberUpdate(const dpp::guild_member_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildMemberUpdateEvent(ev))); }
void DpCluster::OnInviteCreate(const dpp::invite_create_t & ev)
{ mQueue.enqueue(EventItem(new DpInviteCreateEvent(ev))); }
void DpCluster::OnMessageUpdate(const dpp::message_update_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageUpdateEvent(ev))); }
void DpCluster::OnUserUpdate(const dpp::user_update_t & ev)
{ mQueue.enqueue(EventItem(new DpUserUpdateEvent(ev))); }
void DpCluster::OnMessageCreate(const dpp::message_create_t & ev)
{ mQueue.enqueue(EventItem(new DpMessageCreateEvent(ev))); }
void DpCluster::OnGuildBanAdd(const dpp::guild_ban_add_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildBanAddEvent(ev))); }
void DpCluster::OnGuildBanRemove(const dpp::guild_ban_remove_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildBanRemoveEvent(ev))); }
void DpCluster::OnIntegrationCreate(const dpp::integration_create_t & ev)
{ mQueue.enqueue(EventItem(new DpIntegrationCreateEvent(ev))); }
void DpCluster::OnIntegrationUpdate(const dpp::integration_update_t & ev)
{ mQueue.enqueue(EventItem(new DpIntegrationUpdateEvent(ev))); }
void DpCluster::OnIntegrationDelete(const dpp::integration_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpIntegrationDeleteEvent(ev))); }
void DpCluster::OnThreadCreate(const dpp::thread_create_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadCreateEvent(ev))); }
void DpCluster::OnThreadUpdate(const dpp::thread_update_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadUpdateEvent(ev))); }
void DpCluster::OnThreadDelete(const dpp::thread_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadDeleteEvent(ev))); }
void DpCluster::OnThreadListSync(const dpp::thread_list_sync_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadListSyncEvent(ev))); }
void DpCluster::OnThreadMemberUpdate(const dpp::thread_member_update_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadMemberUpdateEvent(ev))); }
void DpCluster::OnThreadMembersUpdate(const dpp::thread_members_update_t & ev)
{ mQueue.enqueue(EventItem(new DpThreadMembersUpdateEvent(ev))); }
void DpCluster::OnGuildScheduledEventCreate(const dpp::guild_scheduled_event_create_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildScheduledEventCreateEvent(ev))); }
void DpCluster::OnGuildScheduledEventUpdate(const dpp::guild_scheduled_event_update_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildScheduledEventUpdateEvent(ev))); }
void DpCluster::OnGuildScheduledEventDelete(const dpp::guild_scheduled_event_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildScheduledEventDeleteEvent(ev))); }
void DpCluster::OnGuildScheduledEventUserAdd(const dpp::guild_scheduled_event_user_add_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildScheduledEventUserAddEvent(ev))); }
void DpCluster::OnGuildScheduledEventUserRemove(const dpp::guild_scheduled_event_user_remove_t & ev)
{ mQueue.enqueue(EventItem(new DpGuildScheduledEventUserRemoveEvent(ev))); }
void DpCluster::OnVoiceBufferSend(const dpp::voice_buffer_send_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceBufferSendEvent(ev))); }
void DpCluster::OnVoiceUserTalking(const dpp::voice_user_talking_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceUserTalkingEvent(ev))); }
void DpCluster::OnVoiceReady(const dpp::voice_ready_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceReadyEvent(ev))); }
void DpCluster::OnVoiceReceive(const dpp::voice_receive_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceReceiveEvent(ev))); }
void DpCluster::OnVoiceReceiveCombined(const dpp::voice_receive_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceReceiveCombinedEvent(ev))); }
void DpCluster::OnVoiceTrackMarker(const dpp::voice_track_marker_t & ev)
{ mQueue.enqueue(EventItem(new DpVoiceTrackMarkerEvent(ev))); }
void DpCluster::OnStageInstanceCreate(const dpp::stage_instance_create_t & ev)
{ mQueue.enqueue(EventItem(new DpStageInstanceCreateEvent(ev))); }
void DpCluster::OnStageInstanceUpdate(const dpp::stage_instance_update_t & ev)
{ mQueue.enqueue(EventItem(new DpStageInstanceUpdateEvent(ev))); }
void DpCluster::OnStageInstanceDelete(const dpp::stage_instance_delete_t & ev)
{ mQueue.enqueue(EventItem(new DpStageInstanceDeleteEvent(ev))); }
} // Namespace:: SqMod

View File

@ -0,0 +1,337 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
#include "Core/Signal.hpp"
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Constants.hpp"
#include "Library/Discord/Misc.hpp"
// ------------------------------------------------------------------------------------------------
#include <chrono>
#include <memory>
#include <functional>
#include <string_view>
// ------------------------------------------------------------------------------------------------
#include <concurrentqueue.h>
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
struct DpEventBase;
/* ------------------------------------------------------------------------------------------------
*
*/
struct DpClusterOptions
{
// The bot token to use for all HTTP commands and websocket connections.
std::string mToken{};
// A bitmask of dpd::intents values for all shards on this cluster. This is required to be sent for all bots with over 100 servers.
uint32_t mIntents{dpp::i_default_intents};
// The total number of shards on this bot. If there are multiple clusters, then (shards / clusters) actual shards will run on this cluster.
// If you omit this value, the library will attempt to query the Discord API for the correct number of shards to start.
uint32_t mShards{0};
// The ID of this cluster, should be between 0 and MAXCLUSTERS-1
uint32_t mClusterID{0};
// The total number of clusters that are active, which may be on separate processes or even separate machines.
uint32_t mMaxClusters{1};
// Whether or not to use compression for shards on this cluster. Saves a ton of bandwidth at the cost of some CPU
bool mCompressed{true};
// Set the user caching policy for the cluster, either lazy (only cache users/members when they message the bot) or aggressive (request whole member lists on seeing new guilds too)
dpp::cache_policy_t mPolicy{dpp::cp_aggressive, dpp::cp_aggressive, dpp::cp_aggressive};
// The number of threads to allocate for making HTTP requests to Discord. This defaults to 12. You can increase this at runtime via the object returned from get_rest().
uint32_t mRequestThreads{12};
// The number of threads to allocate for making HTTP requests to sites outside of Discord. This defaults to 1. You can increase this at runtime via the object returned from get_raw_rest().
uint32_t mRequestThreadsRaw{1};
// Disable automatic forwarding of logged messages to internal logging. Allows to handle logging manually without risking duplicate output (at the cost of some performance, ofc).
bool mCustomLogging{false};
/* --------------------------------------------------------------------------------------------
* Base constructors.
*/
DpClusterOptions(StackStrF & token)
: mToken(token.ToStr())
{
}
/* --------------------------------------------------------------------------------------------
* Copy/Move constructors.
*/
DpClusterOptions(const DpClusterOptions &) noexcept = default;
DpClusterOptions(DpClusterOptions &&) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Copy/Move assignment operators.
*/
DpClusterOptions & operator = (const DpClusterOptions &) noexcept = default;
DpClusterOptions & operator = (DpClusterOptions &&) noexcept = default;
};
/* ------------------------------------------------------------------------------------------------
* Primitive implementation of a discord client with basic functionality.
*/
struct DpCluster : public SqChainedInstances< DpCluster >
{
using Base = SqChainedInstances< DpCluster >;
/* --------------------------------------------------------------------------------------------
* Queue of events generated from other threads.
*/
using EventItem = std::unique_ptr< DpEventBase >;
using EventQueue = moodycamel::ConcurrentQueue< EventItem >;
/* --------------------------------------------------------------------------------------------
* Type of container for cluster signals.
*/
using Signals = std::array< SignalPair, static_cast< size_t >(DpEventID::Max) >;
/* --------------------------------------------------------------------------------------------
* Type of container for event handles.
*/
using EventHandle = std::array< dpp::event_handle, static_cast< size_t >(DpEventID::Max) >;
/* --------------------------------------------------------------------------------------------
* Event queue.
*/
EventQueue mQueue{4096};
/* --------------------------------------------------------------------------------------------
* Managed cluster instance.
*/
std::unique_ptr< dpp::cluster > mC;
/* --------------------------------------------------------------------------------------------
* Table containing the emitted cluster events.
*/
LightObj mSqEvents{};
/* --------------------------------------------------------------------------------------------
* Cluster signals.
*/
Signals mEvents{};
/* --------------------------------------------------------------------------------------------
* Event handles for bound event event handlers so they can be stopped at any time.
*/
EventHandle mEventsHandle{};
/* --------------------------------------------------------------------------------------------
* Base constructors.
*/
DpCluster(DpClusterOptions & o);
/* --------------------------------------------------------------------------------------------
* Copy/Move constructors (disabled).
*/
DpCluster(const DpCluster &) noexcept = delete;
DpCluster(DpCluster &&) noexcept = delete;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpCluster()
{
Stop();
// Forget about this instance
UnchainInstance();
}
/* --------------------------------------------------------------------------------------------
* Copy/Move assignment operators (disabled).
*/
DpCluster & operator = (const DpCluster &) noexcept = delete;
DpCluster & operator = (DpCluster &&) noexcept = delete;
/* --------------------------------------------------------------------------------------------
* Check if the managed cluster instance is valid and throw an exception otherwise.
*/
void Validate() const
{
if (!mC)
{
STHROWF("Discord cluster instance is not valid anymore.");
}
}
/* --------------------------------------------------------------------------------------------
* Check if the managed cluster instance is valid and throw an exception otherwise.
*/
void Validate(const char * m) const
{
if (!mC)
{
STHROWF("Cannot {} a cluster instance that is not valid anymore.", fmt::to_string_view(m));
}
}
/* --------------------------------------------------------------------------------------------
* Check if the managed cluster instance is valid and throw an exception otherwise.
*/
dpp::cluster & Valid() const { Validate(); return *mC; }
/* --------------------------------------------------------------------------------------------
* Check if the managed cluster instance is valid and throw an exception otherwise.
*/
dpp::cluster & Valid(const char * m) const { Validate(m); return *mC; }
/* --------------------------------------------------------------------------------------------
* Process the cluster. This is used internally on each server frame.
*/
void Process(bool force = false);
/* --------------------------------------------------------------------------------------------
* Terminate the cluster. This is used internally when the VM is shutting down.
*/
void Terminate();
/* --------------------------------------------------------------------------------------------
* Start the cluster.
*/
DpCluster & Start() { Valid("start").start(dpp::st_return); return *this; }
/* --------------------------------------------------------------------------------------------
* Stop the cluster.
*/
void Stop() { Valid("stop").shutdown(); }
/* --------------------------------------------------------------------------------------------
* Retrieve the events table of this cluster.
*/
SQMOD_NODISCARD LightObj & GetEvents()
{
return mSqEvents;
}
/* --------------------------------------------------------------------------------------------
* Enable a certain event for the cluster.
*/
DpCluster & EnableEvent(SQInteger id);
/* --------------------------------------------------------------------------------------------
* Disable a certain event for the cluster.
*/
DpCluster & DisableEvent(SQInteger id);
private:
/* --------------------------------------------------------------------------------------------
* Signal initialization.
*/
void InitEvents()
{
// Ignore the call if already initialized
if (!mSqEvents.IsNull())
{
return;
}
// Create a new table on the stack with enough space pre-allocated
sq_newtableex(SqVM(), static_cast< SQInteger >(DpEventID::Max + 1));
// Grab the table object from the stack
mSqEvents = LightObj(-1, SqVM());
// Pop the table object from the stack
sq_pop(SqVM(), 1);
// Proceed to initializing the events
for (size_t i = 0; i < mEvents.size(); ++i)
{
InitSignalPair(mEvents[i], mSqEvents, DpEventID::NAME[i]);
}
}
/* --------------------------------------------------------------------------------------------
* Signal termination.
*/
void DropEvents()
{
for (auto & e : mEvents)
{
ResetSignalPair(e);
}
}
/* --------------------------------------------------------------------------------------------
* Event handlers.
*/
void OnVoiceStateUpdate(const dpp::voice_state_update_t & ev);
void OnVoiceClientDisconnect(const dpp::voice_client_disconnect_t & ev);
void OnVoiceClientSpeaking(const dpp::voice_client_speaking_t & ev);
void OnLog(const dpp::log_t & ev);
void OnGuildJoinRequestDelete(const dpp::guild_join_request_delete_t & ev);
void OnInteractionCreate(const dpp::interaction_create_t & ev);
void OnSlashCommand(const dpp::slashcommand_t & ev);
void OnButtonClick(const dpp::button_click_t & ev);
void OnAutoComplete(const dpp::autocomplete_t & ev);
void OnSelectClick(const dpp::select_click_t & ev);
void OnMessageContextMenu(const dpp::message_context_menu_t & ev);
void OnUserContextMenu(const dpp::user_context_menu_t & ev);
void OnFormSubmit(const dpp::form_submit_t & ev);
void OnGuildDelete(const dpp::guild_delete_t & ev);
void OnChannelDelete(const dpp::channel_delete_t & ev);
void OnChannelUpdate(const dpp::channel_update_t & ev);
void OnReady(const dpp::ready_t & ev);
void OnMessageDelete(const dpp::message_delete_t & ev);
void OnGuildMemberRemove(const dpp::guild_member_remove_t & ev);
void OnResumed(const dpp::resumed_t & ev);
void OnGuildRoleCreate(const dpp::guild_role_create_t & ev);
void OnTypingStart(const dpp::typing_start_t & ev);
void OnMessageReactionAdd(const dpp::message_reaction_add_t & ev);
void OnGuildMembersChunk(const dpp::guild_members_chunk_t & ev);
void OnMessageReactionRemove(const dpp::message_reaction_remove_t & ev);
void OnGuildCreate(const dpp::guild_create_t & ev);
void OnChannelCreate(const dpp::channel_create_t & ev);
void OnMessageReactionRemoveEmoji(const dpp::message_reaction_remove_emoji_t & ev);
void OnMessageDeleteDulk(const dpp::message_delete_bulk_t & ev);
void OnGuildRoleUpdate(const dpp::guild_role_update_t & ev);
void OnGuildRoleDelete(const dpp::guild_role_delete_t & ev);
void OnChannelPinsUpdate(const dpp::channel_pins_update_t & ev);
void OnMessageReactionRemoveAll(const dpp::message_reaction_remove_all_t & ev);
void OnVoiceServerUpdate(const dpp::voice_server_update_t & ev);
void OnGuildEmojisUpdate(const dpp::guild_emojis_update_t & ev);
void OnGuildStickersUpdate(const dpp::guild_stickers_update_t & ev);
void OnPresenceUpdate(const dpp::presence_update_t & ev);
void OnWebhooksUpdate(const dpp::webhooks_update_t & ev);
void OnAutomodRuleCreate(const dpp::automod_rule_create_t & ev);
void OnAutomodRuleUpdate(const dpp::automod_rule_update_t & ev);
void OnAutomodRuleDelete(const dpp::automod_rule_delete_t & ev);
void OnAutomodRuleExecute(const dpp::automod_rule_execute_t & ev);
void OnGuildMemberAdd(const dpp::guild_member_add_t & ev);
void OnInviteDelete(const dpp::invite_delete_t & ev);
void OnGuildUpdate(const dpp::guild_update_t & ev);
void OnGuildIntegrationsUpdate(const dpp::guild_integrations_update_t & ev);
void OnGuildMemberUpdate(const dpp::guild_member_update_t & ev);
void OnInviteCreate(const dpp::invite_create_t & ev);
void OnMessageUpdate(const dpp::message_update_t & ev);
void OnUserUpdate(const dpp::user_update_t & ev);
void OnMessageCreate(const dpp::message_create_t & ev);
void OnGuildBanAdd(const dpp::guild_ban_add_t & ev);
void OnGuildBanRemove(const dpp::guild_ban_remove_t & ev);
void OnIntegrationCreate(const dpp::integration_create_t & ev);
void OnIntegrationUpdate(const dpp::integration_update_t & ev);
void OnIntegrationDelete(const dpp::integration_delete_t & ev);
void OnThreadCreate(const dpp::thread_create_t & ev);
void OnThreadUpdate(const dpp::thread_update_t & ev);
void OnThreadDelete(const dpp::thread_delete_t & ev);
void OnThreadListSync(const dpp::thread_list_sync_t & ev);
void OnThreadMemberUpdate(const dpp::thread_member_update_t & ev);
void OnThreadMembersUpdate(const dpp::thread_members_update_t & ev);
void OnGuildScheduledEventCreate(const dpp::guild_scheduled_event_create_t & ev);
void OnGuildScheduledEventUpdate(const dpp::guild_scheduled_event_update_t & ev);
void OnGuildScheduledEventDelete(const dpp::guild_scheduled_event_delete_t & ev);
void OnGuildScheduledEventUserAdd(const dpp::guild_scheduled_event_user_add_t & ev);
void OnGuildScheduledEventUserRemove(const dpp::guild_scheduled_event_user_remove_t & ev);
void OnVoiceBufferSend(const dpp::voice_buffer_send_t & ev);
void OnVoiceUserTalking(const dpp::voice_user_talking_t & ev);
void OnVoiceReady(const dpp::voice_ready_t & ev);
void OnVoiceReceive(const dpp::voice_receive_t & ev);
void OnVoiceReceiveCombined(const dpp::voice_receive_t & ev);
void OnVoiceTrackMarker(const dpp::voice_track_marker_t & ev);
void OnStageInstanceCreate(const dpp::stage_instance_create_t & ev);
void OnStageInstanceUpdate(const dpp::stage_instance_update_t & ev);
void OnStageInstanceDelete(const dpp::stage_instance_delete_t & ev);
};
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Command.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,282 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Constants.hpp"
// ------------------------------------------------------------------------------------------------
#include <sqratConst.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
const std::array< const char *, static_cast< size_t >(DpEventID::Max) > DpEventID::NAME{
"VoiceStateUpdate",
"VoiceClientDisconnect",
"VoiceClientSpeaking",
"Log",
"GuildJoinRequestDelete",
"InteractionCreate",
"SlashCommand",
"ButtonClick",
"AutoComplete",
"SelectClick",
"MessageContextMenu",
"UserContextMenu",
"FormSubmit",
"GuildDelete",
"ChannelDelete",
"ChannelUpdate",
"Ready",
"MessageDelete",
"GuildMemberRemove",
"Resumed",
"GuildRoleCreate",
"TypingStart",
"MessageReactionAdd",
"GuildMembersChunk",
"MessageReactionRemove",
"GuildCreate",
"ChannelCreate",
"MessageReactionRemoveEmoji",
"MessageDeleteDulk",
"GuildRoleUpdate",
"GuildRoleDelete",
"ChannelPinsUpdate",
"MessageReactionRemoveAll",
"VoiceServerUpdate",
"GuildEmojisUpdate",
"GuildStickersUpdate",
"PresenceUpdate",
"WebhooksUpdate",
"AutomodRuleCreate",
"AutomodRuleUpdate",
"AutomodRuleDelete",
"AutomodRuleExecute",
"GuildMemberAdd",
"InviteDelete",
"GuildUpdate",
"GuildIntegrationsUpdate",
"GuildMemberUpdate",
"InviteCreate",
"MessageUpdate",
"UserUpdate",
"MessageCreate",
"GuildBanAdd",
"GuildBanRemove",
"IntegrationCreate",
"IntegrationUpdate",
"IntegrationDelete",
"ThreadCreate",
"ThreadUpdate",
"ThreadDelete",
"ThreadListSync",
"ThreadMemberUpdate",
"ThreadMembersUpdate",
"GuildScheduledEventCreate",
"GuildScheduledEventUpdate",
"GuildScheduledEventDelete",
"GuildScheduledEventUserAdd",
"GuildScheduledEventUserRemove",
"VoiceBufferSend",
"VoiceUserTalking",
"VoiceReady",
"VoiceReceive",
"VoiceReceiveCombined",
"VoiceTrackMarker",
"StageInstanceCreate",
"StageInstanceUpdate",
"StageInstanceDelete",
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpLogLevelEnum[] = {
{_SC("Trace"), static_cast< SQInteger >(dpp::ll_trace)},
{_SC("Debug"), static_cast< SQInteger >(dpp::ll_debug)},
{_SC("Info"), static_cast< SQInteger >(dpp::ll_info)},
{_SC("Warning"), static_cast< SQInteger >(dpp::ll_warning)},
{_SC("Error"), static_cast< SQInteger >(dpp::ll_error)},
{_SC("Critical"), static_cast< SQInteger >(dpp::ll_critical)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpVoiceStateFlagsEnum[] = {
{_SC("Deaf"), static_cast< SQInteger >(dpp::vs_deaf)},
{_SC("Mute"), static_cast< SQInteger >(dpp::vs_mute)},
{_SC("SelfMute"), static_cast< SQInteger >(dpp::vs_self_mute)},
{_SC("SelfDeaf"), static_cast< SQInteger >(dpp::vs_self_deaf)},
{_SC("SelfStream"), static_cast< SQInteger >(dpp::vs_self_stream)},
{_SC("SelfVideo"), static_cast< SQInteger >(dpp::vs_self_video)},
{_SC("Suppress"), static_cast< SQInteger >(dpp::vs_suppress)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpEmojiFlagsEnum[] = {
{_SC("RequireColons"), static_cast< SQInteger >(dpp::e_require_colons)},
{_SC("Managed"), static_cast< SQInteger >(dpp::e_managed)},
{_SC("Animated"), static_cast< SQInteger >(dpp::e_animated)},
{_SC("Available"), static_cast< SQInteger >(dpp::e_available)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpPresenceFlagsEnum[] = {
{_SC("DesktopOnline"), static_cast< SQInteger >(dpp::p_desktop_online)},
{_SC("DesktopDND"), static_cast< SQInteger >(dpp::p_desktop_dnd)},
{_SC("DesktopIdle"), static_cast< SQInteger >(dpp::p_desktop_idle)},
{_SC("WebOnline"), static_cast< SQInteger >(dpp::p_web_online)},
{_SC("WebDND"), static_cast< SQInteger >(dpp::p_web_dnd)},
{_SC("WebIdle"), static_cast< SQInteger >(dpp::p_web_idle)},
{_SC("MobileOnline"), static_cast< SQInteger >(dpp::p_mobile_online)},
{_SC("MobileDND"), static_cast< SQInteger >(dpp::p_mobile_dnd)},
{_SC("MobileIdle"), static_cast< SQInteger >(dpp::p_mobile_idle)},
{_SC("StatusOnline"), static_cast< SQInteger >(dpp::p_status_online)},
{_SC("StatusDND"), static_cast< SQInteger >(dpp::p_status_dnd)},
{_SC("StatusIdle"), static_cast< SQInteger >(dpp::p_status_idle)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpPresenceStatusEnum[] = {
{_SC("Offline"), static_cast< SQInteger >(dpp::ps_offline)},
{_SC("Online"), static_cast< SQInteger >(dpp::ps_online)},
{_SC("DND"), static_cast< SQInteger >(dpp::ps_dnd)},
{_SC("Idle"), static_cast< SQInteger >(dpp::ps_idle)},
// Bit shift for desktop status
{_SC("ShiftDesktop"), static_cast< SQInteger >(PF_SHIFT_DESKTOP)},
{_SC("ShiftWeb"), static_cast< SQInteger >(PF_SHIFT_WEB)},
{_SC("ShiftMobile"), static_cast< SQInteger >(PF_SHIFT_MOBILE)},
{_SC("ShiftMain"), static_cast< SQInteger >(PF_SHIFT_MAIN)},
{_SC("StatusMask"), static_cast< SQInteger >(PF_STATUS_MASK)},
{_SC("ClearDesktop"), static_cast< SQInteger >(PF_CLEAR_DESKTOP)},
{_SC("ClearWeb"), static_cast< SQInteger >(PF_CLEAR_WEB)},
{_SC("ClearMobile"), static_cast< SQInteger >(PF_CLEAR_MOBILE)},
{_SC("ClearStatus"), static_cast< SQInteger >(PF_CLEAR_STATUS)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpActivityTypeEnum[] = {
{_SC("Game"), static_cast< SQInteger >(dpp::at_game)},
{_SC("Streaming"), static_cast< SQInteger >(dpp::at_streaming)},
{_SC("Listening"), static_cast< SQInteger >(dpp::at_listening)},
{_SC("Watching"), static_cast< SQInteger >(dpp::at_watching)},
{_SC("Custom"), static_cast< SQInteger >(dpp::at_custom)},
{_SC("Competing"), static_cast< SQInteger >(dpp::at_competing)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpActivityFlagsEnum[] = {
{_SC("Instance"), static_cast< SQInteger >(dpp::af_instance)},
{_SC("Join"), static_cast< SQInteger >(dpp::af_join)},
{_SC("Spectate"), static_cast< SQInteger >(dpp::af_spectate)},
{_SC("JoinRequest"), static_cast< SQInteger >(dpp::af_join_request)},
{_SC("Sync"), static_cast< SQInteger >(dpp::af_sync)},
{_SC("Play"), static_cast< SQInteger >(dpp::af_play)},
{_SC("PartyPrivacyFriends"), static_cast< SQInteger >(dpp::af_party_privacy_friends)},
{_SC("PartyPrivacyVoiceChannel"), static_cast< SQInteger >(dpp::af_party_privacy_voice_channel)},
{_SC("Embedded"), static_cast< SQInteger >(dpp::af_embedded)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpRegionEnum[] = {
{_SC("Brazil"), static_cast< SQInteger >(dpp::r_brazil)},
{_SC("CentralEurope"), static_cast< SQInteger >(dpp::r_central_europe)},
{_SC("HongKong"), static_cast< SQInteger >(dpp::r_hong_kong)},
{_SC("India"), static_cast< SQInteger >(dpp::r_india)},
{_SC("Japan"), static_cast< SQInteger >(dpp::r_japan)},
{_SC("Russia"), static_cast< SQInteger >(dpp::r_russia)},
{_SC("Singapore"), static_cast< SQInteger >(dpp::r_singapore)},
{_SC("SouthAfrica"), static_cast< SQInteger >(dpp::r_south_africa)},
{_SC("Sydney"), static_cast< SQInteger >(dpp::r_sydney)},
{_SC("UsCentral"), static_cast< SQInteger >(dpp::r_us_central)},
{_SC("UsEast"), static_cast< SQInteger >(dpp::r_us_east)},
{_SC("UsSouth"), static_cast< SQInteger >(dpp::r_us_south)},
{_SC("UsWest"), static_cast< SQInteger >(dpp::r_us_west)},
{_SC("WesternEurope"), static_cast< SQInteger >(dpp::r_western_europe)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpGuildFlagsEnum[] = {
{_SC("Large"), static_cast< SQInteger >(dpp::g_large)},
{_SC("Unavailable"), static_cast< SQInteger >(dpp::g_unavailable)},
{_SC("WidgetEnabled"), static_cast< SQInteger >(dpp::g_widget_enabled)},
{_SC("InviteSplash"), static_cast< SQInteger >(dpp::g_invite_splash)},
{_SC("VipRegions"), static_cast< SQInteger >(dpp::g_vip_regions)},
{_SC("VanityURL"), static_cast< SQInteger >(dpp::g_vanity_url)},
{_SC("Verified"), static_cast< SQInteger >(dpp::g_verified)},
{_SC("Partnered"), static_cast< SQInteger >(dpp::g_partnered)},
{_SC("Community"), static_cast< SQInteger >(dpp::g_community)},
{_SC("RoleSubscriptionEnabled"), static_cast< SQInteger >(dpp::g_role_subscription_enabled)},
{_SC("News"), static_cast< SQInteger >(dpp::g_news)},
{_SC("Discoverable"), static_cast< SQInteger >(dpp::g_discoverable)},
{_SC("Featureable"), static_cast< SQInteger >(dpp::g_featureable)},
{_SC("AnimatedIcon"), static_cast< SQInteger >(dpp::g_animated_icon)},
{_SC("Banner"), static_cast< SQInteger >(dpp::g_banner)},
{_SC("WelcomeScreenEnabled"), static_cast< SQInteger >(dpp::g_welcome_screen_enabled)},
{_SC("MemberVerificationGate"), static_cast< SQInteger >(dpp::g_member_verification_gate)},
{_SC("PreviewEnabled"), static_cast< SQInteger >(dpp::g_preview_enabled)},
{_SC("NoJoinNotifications"), static_cast< SQInteger >(dpp::g_no_join_notifications)},
{_SC("NoBoostNotifications"), static_cast< SQInteger >(dpp::g_no_boost_notifications)},
{_SC("HasAnimatedIcon"), static_cast< SQInteger >(dpp::g_has_animated_icon)},
{_SC("HasAnimatedBanner"), static_cast< SQInteger >(dpp::g_has_animated_banner)},
{_SC("NoSetupTips"), static_cast< SQInteger >(dpp::g_no_setup_tips)},
{_SC("NoStickerGreeting"), static_cast< SQInteger >(dpp::g_no_sticker_greeting)},
{_SC("MonetizationEnabled"), static_cast< SQInteger >(dpp::g_monetization_enabled)},
{_SC("MoreStickers"), static_cast< SQInteger >(dpp::g_more_stickers)},
{_SC("CreatorStorePageEnabled"), static_cast< SQInteger >(dpp::g_creator_store_page_enabled)},
{_SC("RoleIcons"), static_cast< SQInteger >(dpp::g_role_icons)},
{_SC("SevenDayThreadArchive"), static_cast< SQInteger >(dpp::g_seven_day_thread_archive)},
{_SC("ThreeDayThreadArchive"), static_cast< SQInteger >(dpp::g_three_day_thread_archive)},
{_SC("TicketedEvents"), static_cast< SQInteger >(dpp::g_ticketed_events)},
{_SC("ChannelBanners"), static_cast< SQInteger >(dpp::g_channel_banners)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpGuildFlagsExtraEnum[] = {
{_SC("PremiumProgressBarEnabled"), static_cast< SQInteger >(dpp::g_premium_progress_bar_enabled)},
{_SC("AnimatedBanner"), static_cast< SQInteger >(dpp::g_animated_banner)},
{_SC("AutoModeration"), static_cast< SQInteger >(dpp::g_auto_moderation)},
{_SC("InvitesDisabled"), static_cast< SQInteger >(dpp::g_invites_disabled)},
{_SC("DeveloperSupportServer"), static_cast< SQInteger >(dpp::g_developer_support_server)},
{_SC("NoRoleSubscriptionNotifications"), static_cast< SQInteger >(dpp::g_no_role_subscription_notifications)},
{_SC("NoRoleSubscriptionNotificationReplies"), static_cast< SQInteger >(dpp::g_no_role_subscription_notification_replies)},
{_SC("RoleSubscriptionsAvailableForPurchase"), static_cast< SQInteger >(dpp::g_role_subscriptions_available_for_purchase)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElement g_DpGuildMemberFlagsEnum[] = {
{_SC("Deaf"), static_cast< SQInteger >(dpp::gm_deaf)},
{_SC("Mute"), static_cast< SQInteger >(dpp::gm_mute)},
{_SC("Pending"), static_cast< SQInteger >(dpp::gm_pending)},
{_SC("AnimatedAvatar"), static_cast< SQInteger >(dpp::gm_animated_avatar)},
{_SC("VoiceAction"), static_cast< SQInteger >(dpp::gm_voice_action)},
};
// ------------------------------------------------------------------------------------------------
static const EnumElements g_EnumList[] = {
{_SC("SqDiscordLogLevel"), g_DpLogLevelEnum},
{_SC("SqDiscordVoiceStateFlags"), g_DpVoiceStateFlagsEnum},
{_SC("SqDiscordEmojiFlags"), g_DpEmojiFlagsEnum},
{_SC("SqDiscordPresenceFlags"), g_DpPresenceFlagsEnum},
{_SC("SqDiscordPresenceStatus"), g_DpPresenceStatusEnum},
{_SC("SqDiscordActivityType"), g_DpActivityTypeEnum},
{_SC("SqDiscordActivityFlags"), g_DpActivityFlagsEnum},
{_SC("SqDiscordRegion"), g_DpRegionEnum},
{_SC("SqDiscordGuildFlags"), g_DpGuildFlagsEnum},
{_SC("SqDiscordGuildFlagsExtra"), g_DpGuildFlagsExtraEnum},
{_SC("SqDiscordGuildMemberFlags"), g_DpGuildMemberFlagsEnum},
};
// ------------------------------------------------------------------------------------------------
void Register_Discord_Constants(HSQUIRRELVM vm, Table & ns)
{
RegisterEnumerations(vm, g_EnumList);
// --------------------------------------------------------------------------------------------
Enumeration e(vm);
// Bind all events using their associated name
for (SQInteger i = 0; i < static_cast< SQInteger >(DpEventID::Max); ++i)
{
e.Const(DpEventID::NAME[i], i);
}
// Expose the constants
ConstTable(vm).Enum(_SC("SqDiscordEvent"), e);
}
} // Namespace:: SqMod

View File

@ -0,0 +1,655 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
#include <array>
#include <string_view>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Unique ID for each event.
*/
struct DpEventID
{
/* --------------------------------------------------------------------------------------------
* ID enumeration.
*/
enum Type
{
VoiceStateUpdate=0,
VoiceClientDisconnect,
VoiceClientSpeaking,
Log,
GuildJoinRequestDelete,
InteractionCreate,
SlashCommand,
ButtonClick,
AutoComplete,
SelectClick,
MessageContextMenu,
UserContextMenu,
FormSubmit,
GuildDelete,
ChannelDelete,
ChannelUpdate,
Ready,
MessageDelete,
GuildMemberRemove,
Resumed,
GuildRoleCreate,
TypingStart,
MessageReactionAdd,
GuildMembersChunk,
MessageReactionRemove,
GuildCreate,
ChannelCreate,
MessageReactionRemoveEmoji,
MessageDeleteDulk,
GuildRoleUpdate,
GuildRoleDelete,
ChannelPinsUpdate,
MessageReactionRemoveAll,
VoiceServerUpdate,
GuildEmojisUpdate,
GuildStickersUpdate,
PresenceUpdate,
WebhooksUpdate,
AutomodRuleCreate,
AutomodRuleUpdate,
AutomodRuleDelete,
AutomodRuleExecute,
GuildMemberAdd,
InviteDelete,
GuildUpdate,
GuildIntegrationsUpdate,
GuildMemberUpdate,
InviteCreate,
MessageUpdate,
UserUpdate,
MessageCreate,
GuildBanAdd,
GuildBanRemove,
IntegrationCreate,
IntegrationUpdate,
IntegrationDelete,
ThreadCreate,
ThreadUpdate,
ThreadDelete,
ThreadListSync,
ThreadMemberUpdate,
ThreadMembersUpdate,
GuildScheduledEventCreate,
GuildScheduledEventUpdate,
GuildScheduledEventDelete,
GuildScheduledEventUserAdd,
GuildScheduledEventUserRemove,
VoiceBufferSend,
VoiceUserTalking,
VoiceReady,
VoiceReceive,
VoiceReceiveCombined,
VoiceTrackMarker,
StageInstanceCreate,
StageInstanceUpdate,
StageInstanceDelete,
Max
};
/* --------------------------------------------------------------------------------------------
* String identification for each event ID.
*/
static const std::array< const char *, static_cast< size_t >(Max) > NAME;
};
/* ------------------------------------------------------------------------------------------------
* Structures that hold compile-time type information for events.
*/
struct DpVoiceStateUpdateEventInfo
{
using Type = dpp::voice_state_update_t;
static inline constexpr size_t ID = DpEventID::VoiceStateUpdate;
static inline constexpr std::string_view Name = "VoiceStateUpdate";
};
struct DpVoiceClientDisconnectEventInfo
{
using Type = dpp::voice_client_disconnect_t;
static inline constexpr size_t ID = DpEventID::VoiceClientDisconnect;
static inline constexpr std::string_view Name = "VoiceClientDisconnect";
};
struct DpVoiceClientSpeakingEventInfo
{
using Type = dpp::voice_client_speaking_t;
static inline constexpr size_t ID = DpEventID::VoiceClientSpeaking;
static inline constexpr std::string_view Name = "VoiceClientSpeaking";
};
struct DpLogEventInfo
{
using Type = dpp::log_t;
static inline constexpr size_t ID = DpEventID::Log;
static inline constexpr std::string_view Name = "Log";
};
struct DpGuildJoinRequestDeleteEventInfo
{
using Type = dpp::guild_join_request_delete_t;
static inline constexpr size_t ID = DpEventID::GuildJoinRequestDelete;
static inline constexpr std::string_view Name = "GuildJoinRequestDelete";
};
struct DpInteractionCreateEventInfo
{
using Type = dpp::interaction_create_t;
static inline constexpr size_t ID = DpEventID::InteractionCreate;
static inline constexpr std::string_view Name = "InteractionCreate";
};
struct DpSlashCommandEventInfo
{
using Type = dpp::slashcommand_t;
static inline constexpr size_t ID = DpEventID::SlashCommand;
static inline constexpr std::string_view Name = "SlashCommand";
};
struct DpButtonClickEventInfo
{
using Type = dpp::button_click_t;
static inline constexpr size_t ID = DpEventID::ButtonClick;
static inline constexpr std::string_view Name = "ButtonClick";
};
struct DpAutoCompleteEventInfo
{
using Type = dpp::autocomplete_t;
static inline constexpr size_t ID = DpEventID::AutoComplete;
static inline constexpr std::string_view Name = "AutoComplete";
};
struct DpSelectClickEventInfo
{
using Type = dpp::select_click_t;
static inline constexpr size_t ID = DpEventID::SelectClick;
static inline constexpr std::string_view Name = "SelectClick";
};
struct DpMessageContextMenuEventInfo
{
using Type = dpp::message_context_menu_t;
static inline constexpr size_t ID = DpEventID::MessageContextMenu;
static inline constexpr std::string_view Name = "MessageContextMenu";
};
struct DpUserContextMenuEventInfo
{
using Type = dpp::user_context_menu_t;
static inline constexpr size_t ID = DpEventID::UserContextMenu;
static inline constexpr std::string_view Name = "UserContextMenu";
};
struct DpFormSubmitEventInfo
{
using Type = dpp::form_submit_t;
static inline constexpr size_t ID = DpEventID::FormSubmit;
static inline constexpr std::string_view Name = "FormSubmit";
};
struct DpGuildDeleteEventInfo
{
using Type = dpp::guild_delete_t;
static inline constexpr size_t ID = DpEventID::GuildDelete;
static inline constexpr std::string_view Name = "GuildDelete";
};
struct DpChannelDeleteEventInfo
{
using Type = dpp::channel_delete_t;
static inline constexpr size_t ID = DpEventID::ChannelDelete;
static inline constexpr std::string_view Name = "ChannelDelete";
};
struct DpChannelUpdateEventInfo
{
using Type = dpp::channel_update_t;
static inline constexpr size_t ID = DpEventID::ChannelUpdate;
static inline constexpr std::string_view Name = "ChannelUpdate";
};
struct DpReadyEventInfo
{
using Type = dpp::ready_t;
static inline constexpr size_t ID = DpEventID::Ready;
static inline constexpr std::string_view Name = "Ready";
};
struct DpMessageDeleteEventInfo
{
using Type = dpp::message_delete_t;
static inline constexpr size_t ID = DpEventID::MessageDelete;
static inline constexpr std::string_view Name = "MessageDelete";
};
struct DpGuildMemberRemoveEventInfo
{
using Type = dpp::guild_member_remove_t;
static inline constexpr size_t ID = DpEventID::GuildMemberRemove;
static inline constexpr std::string_view Name = "GuildMemberRemove";
};
struct DpResumedEventInfo
{
using Type = dpp::resumed_t;
static inline constexpr size_t ID = DpEventID::Resumed;
static inline constexpr std::string_view Name = "Resumed";
};
struct DpGuildRoleCreateEventInfo
{
using Type = dpp::guild_role_create_t;
static inline constexpr size_t ID = DpEventID::GuildRoleCreate;
static inline constexpr std::string_view Name = "GuildRoleCreate";
};
struct DpTypingStartEventInfo
{
using Type = dpp::typing_start_t;
static inline constexpr size_t ID = DpEventID::TypingStart;
static inline constexpr std::string_view Name = "TypingStart";
};
struct DpMessageReactionAddEventInfo
{
using Type = dpp::message_reaction_add_t;
static inline constexpr size_t ID = DpEventID::MessageReactionAdd;
static inline constexpr std::string_view Name = "MessageReactionAdd";
};
struct DpGuildMembersChunkEventInfo
{
using Type = dpp::guild_members_chunk_t;
static inline constexpr size_t ID = DpEventID::GuildMembersChunk;
static inline constexpr std::string_view Name = "GuildMembersChunk";
};
struct DpMessageReactionRemoveEventInfo
{
using Type = dpp::message_reaction_remove_t;
static inline constexpr size_t ID = DpEventID::MessageReactionRemove;
static inline constexpr std::string_view Name = "MessageReactionRemove";
};
struct DpGuildCreateEventInfo
{
using Type = dpp::guild_create_t;
static inline constexpr size_t ID = DpEventID::GuildCreate;
static inline constexpr std::string_view Name = "GuildCreate";
};
struct DpChannelCreateEventInfo
{
using Type = dpp::channel_create_t;
static inline constexpr size_t ID = DpEventID::ChannelCreate;
static inline constexpr std::string_view Name = "ChannelCreate";
};
struct DpMessageReactionRemoveEmojiEventInfo
{
using Type = dpp::message_reaction_remove_emoji_t;
static inline constexpr size_t ID = DpEventID::MessageReactionRemoveEmoji;
static inline constexpr std::string_view Name = "MessageReactionRemoveEmoji";
};
struct DpMessageDeleteDulkEventInfo
{
using Type = dpp::message_delete_bulk_t;
static inline constexpr size_t ID = DpEventID::MessageDeleteDulk;
static inline constexpr std::string_view Name = "MessageDeleteDulk";
};
struct DpGuildRoleUpdateEventInfo
{
using Type = dpp::guild_role_update_t;
static inline constexpr size_t ID = DpEventID::GuildRoleUpdate;
static inline constexpr std::string_view Name = "GuildRoleUpdate";
};
struct DpGuildRoleDeleteEventInfo
{
using Type = dpp::guild_role_delete_t;
static inline constexpr size_t ID = DpEventID::GuildRoleDelete;
static inline constexpr std::string_view Name = "GuildRoleDelete";
};
struct DpChannelPinsUpdateEventInfo
{
using Type = dpp::channel_pins_update_t;
static inline constexpr size_t ID = DpEventID::ChannelPinsUpdate;
static inline constexpr std::string_view Name = "ChannelPinsUpdate";
};
struct DpMessageReactionRemoveAllEventInfo
{
using Type = dpp::message_reaction_remove_all_t;
static inline constexpr size_t ID = DpEventID::MessageReactionRemoveAll;
static inline constexpr std::string_view Name = "MessageReactionRemoveAll";
};
struct DpVoiceServerUpdateEventInfo
{
using Type = dpp::voice_server_update_t;
static inline constexpr size_t ID = DpEventID::VoiceServerUpdate;
static inline constexpr std::string_view Name = "VoiceServerUpdate";
};
struct DpGuildEmojisUpdateEventInfo
{
using Type = dpp::guild_emojis_update_t;
static inline constexpr size_t ID = DpEventID::GuildEmojisUpdate;
static inline constexpr std::string_view Name = "GuildEmojisUpdate";
};
struct DpGuildStickersUpdateEventInfo
{
using Type = dpp::guild_stickers_update_t;
static inline constexpr size_t ID = DpEventID::GuildStickersUpdate;
static inline constexpr std::string_view Name = "GuildStickersUpdate";
};
struct DpPresenceUpdateEventInfo
{
using Type = dpp::presence_update_t;
static inline constexpr size_t ID = DpEventID::PresenceUpdate;
static inline constexpr std::string_view Name = "PresenceUpdate";
};
struct DpWebhooksUpdateEventInfo
{
using Type = dpp::webhooks_update_t;
static inline constexpr size_t ID = DpEventID::WebhooksUpdate;
static inline constexpr std::string_view Name = "WebhooksUpdate";
};
struct DpAutomodRuleCreateEventInfo
{
using Type = dpp::automod_rule_create_t;
static inline constexpr size_t ID = DpEventID::AutomodRuleCreate;
static inline constexpr std::string_view Name = "AutomodRuleCreate";
};
struct DpAutomodRuleUpdateEventInfo
{
using Type = dpp::automod_rule_update_t;
static inline constexpr size_t ID = DpEventID::AutomodRuleUpdate;
static inline constexpr std::string_view Name = "AutomodRuleUpdate";
};
struct DpAutomodRuleDeleteEventInfo
{
using Type = dpp::automod_rule_delete_t;
static inline constexpr size_t ID = DpEventID::AutomodRuleDelete;
static inline constexpr std::string_view Name = "AutomodRuleDelete";
};
struct DpAutomodRuleExecuteEventInfo
{
using Type = dpp::automod_rule_execute_t;
static inline constexpr size_t ID = DpEventID::AutomodRuleExecute;
static inline constexpr std::string_view Name = "AutomodRuleExecute";
};
struct DpGuildMemberAddEventInfo
{
using Type = dpp::guild_member_add_t;
static inline constexpr size_t ID = DpEventID::GuildMemberAdd;
static inline constexpr std::string_view Name = "GuildMemberAdd";
};
struct DpInviteDeleteEventInfo
{
using Type = dpp::invite_delete_t;
static inline constexpr size_t ID = DpEventID::InviteDelete;
static inline constexpr std::string_view Name = "InviteDelete";
};
struct DpGuildUpdateEventInfo
{
using Type = dpp::guild_update_t;
static inline constexpr size_t ID = DpEventID::GuildUpdate;
static inline constexpr std::string_view Name = "GuildUpdate";
};
struct DpGuildIntegrationsUpdateEventInfo
{
using Type = dpp::guild_integrations_update_t;
static inline constexpr size_t ID = DpEventID::GuildIntegrationsUpdate;
static inline constexpr std::string_view Name = "GuildIntegrationsUpdate";
};
struct DpGuildMemberUpdateEventInfo
{
using Type = dpp::guild_member_update_t;
static inline constexpr size_t ID = DpEventID::GuildMemberUpdate;
static inline constexpr std::string_view Name = "GuildMemberUpdate";
};
struct DpInviteCreateEventInfo
{
using Type = dpp::invite_create_t;
static inline constexpr size_t ID = DpEventID::InviteCreate;
static inline constexpr std::string_view Name = "InviteCreate";
};
struct DpMessageUpdateEventInfo
{
using Type = dpp::message_update_t;
static inline constexpr size_t ID = DpEventID::MessageUpdate;
static inline constexpr std::string_view Name = "MessageUpdate";
};
struct DpUserUpdateEventInfo
{
using Type = dpp::user_update_t;
static inline constexpr size_t ID = DpEventID::UserUpdate;
static inline constexpr std::string_view Name = "UserUpdate";
};
struct DpMessageCreateEventInfo
{
using Type = dpp::message_create_t;
static inline constexpr size_t ID = DpEventID::MessageCreate;
static inline constexpr std::string_view Name = "MessageCreate";
};
struct DpGuildBanAddEventInfo
{
using Type = dpp::guild_ban_add_t;
static inline constexpr size_t ID = DpEventID::GuildBanAdd;
static inline constexpr std::string_view Name = "GuildBanAdd";
};
struct DpGuildBanRemoveEventInfo
{
using Type = dpp::guild_ban_remove_t;
static inline constexpr size_t ID = DpEventID::GuildBanRemove;
static inline constexpr std::string_view Name = "GuildBanRemove";
};
struct DpIntegrationCreateEventInfo
{
using Type = dpp::integration_create_t;
static inline constexpr size_t ID = DpEventID::IntegrationCreate;
static inline constexpr std::string_view Name = "IntegrationCreate";
};
struct DpIntegrationUpdateEventInfo
{
using Type = dpp::integration_update_t;
static inline constexpr size_t ID = DpEventID::IntegrationUpdate;
static inline constexpr std::string_view Name = "IntegrationUpdate";
};
struct DpIntegrationDeleteEventInfo
{
using Type = dpp::integration_delete_t;
static inline constexpr size_t ID = DpEventID::IntegrationDelete;
static inline constexpr std::string_view Name = "IntegrationDelete";
};
struct DpThreadCreateEventInfo
{
using Type = dpp::thread_create_t;
static inline constexpr size_t ID = DpEventID::ThreadCreate;
static inline constexpr std::string_view Name = "ThreadCreate";
};
struct DpThreadUpdateEventInfo
{
using Type = dpp::thread_update_t;
static inline constexpr size_t ID = DpEventID::ThreadUpdate;
static inline constexpr std::string_view Name = "ThreadUpdate";
};
struct DpThreadDeleteEventInfo
{
using Type = dpp::thread_delete_t;
static inline constexpr size_t ID = DpEventID::ThreadDelete;
static inline constexpr std::string_view Name = "ThreadDelete";
};
struct DpThreadListSyncEventInfo
{
using Type = dpp::thread_list_sync_t;
static inline constexpr size_t ID = DpEventID::ThreadListSync;
static inline constexpr std::string_view Name = "ThreadListSync";
};
struct DpThreadMemberUpdateEventInfo
{
using Type = dpp::thread_member_update_t;
static inline constexpr size_t ID = DpEventID::ThreadMemberUpdate;
static inline constexpr std::string_view Name = "ThreadMemberUpdate";
};
struct DpThreadMembersUpdateEventInfo
{
using Type = dpp::thread_members_update_t;
static inline constexpr size_t ID = DpEventID::ThreadMembersUpdate;
static inline constexpr std::string_view Name = "ThreadMembersUpdate";
};
struct DpGuildScheduledEventCreateEventInfo
{
using Type = dpp::guild_scheduled_event_create_t;
static inline constexpr size_t ID = DpEventID::GuildScheduledEventCreate;
static inline constexpr std::string_view Name = "GuildScheduledEventCreate";
};
struct DpGuildScheduledEventUpdateEventInfo
{
using Type = dpp::guild_scheduled_event_update_t;
static inline constexpr size_t ID = DpEventID::GuildScheduledEventUpdate;
static inline constexpr std::string_view Name = "GuildScheduledEventUpdate";
};
struct DpGuildScheduledEventDeleteEventInfo
{
using Type = dpp::guild_scheduled_event_delete_t;
static inline constexpr size_t ID = DpEventID::GuildScheduledEventDelete;
static inline constexpr std::string_view Name = "GuildScheduledEventDelete";
};
struct DpGuildScheduledEventUserAddEventInfo
{
using Type = dpp::guild_scheduled_event_user_add_t;
static inline constexpr size_t ID = DpEventID::GuildScheduledEventUserAdd;
static inline constexpr std::string_view Name = "GuildScheduledEventUserAdd";
};
struct DpGuildScheduledEventUserRemoveEventInfo
{
using Type = dpp::guild_scheduled_event_user_remove_t;
static inline constexpr size_t ID = DpEventID::GuildScheduledEventUserRemove;
static inline constexpr std::string_view Name = "GuildScheduledEventUserRemove";
};
struct DpVoiceBufferSendEventInfo
{
using Type = dpp::voice_buffer_send_t;
static inline constexpr size_t ID = DpEventID::VoiceBufferSend;
static inline constexpr std::string_view Name = "VoiceBufferSend";
};
struct DpVoiceUserTalkingEventInfo
{
using Type = dpp::voice_user_talking_t;
static inline constexpr size_t ID = DpEventID::VoiceUserTalking;
static inline constexpr std::string_view Name = "VoiceUserTalking";
};
struct DpVoiceReadyEventInfo
{
using Type = dpp::voice_ready_t;
static inline constexpr size_t ID = DpEventID::VoiceReady;
static inline constexpr std::string_view Name = "VoiceReady";
};
struct DpVoiceReceiveEventInfo
{
using Type = dpp::voice_receive_t;
static inline constexpr size_t ID = DpEventID::VoiceReceive;
static inline constexpr std::string_view Name = "VoiceReceive";
};
struct DpVoiceReceiveCombinedEventInfo
{
using Type = dpp::voice_receive_t;
static inline constexpr size_t ID = DpEventID::VoiceReceiveCombined;
static inline constexpr std::string_view Name = "VoiceReceiveCombined";
};
struct DpVoiceTrackMarkerEventInfo
{
using Type = dpp::voice_track_marker_t;
static inline constexpr size_t ID = DpEventID::VoiceTrackMarker;
static inline constexpr std::string_view Name = "VoiceTrackMarker";
};
struct DpStageInstanceCreateEventInfo
{
using Type = dpp::stage_instance_create_t;
static inline constexpr size_t ID = DpEventID::StageInstanceCreate;
static inline constexpr std::string_view Name = "StageInstanceCreate";
};
struct DpStageInstanceUpdateEventInfo
{
using Type = dpp::stage_instance_update_t;
static inline constexpr size_t ID = DpEventID::StageInstanceUpdate;
static inline constexpr std::string_view Name = "StageInstanceUpdate";
};
struct DpStageInstanceDeleteEventInfo
{
using Type = dpp::stage_instance_delete_t;
static inline constexpr size_t ID = DpEventID::StageInstanceDelete;
static inline constexpr std::string_view Name = "StageInstanceDelete";
};
/* ------------------------------------------------------------------------------------------------
* Utility used to acquire event information at compile time.
*/
template < int > struct EventInfoID;
/* ------------------------------------------------------------------------------------------------
* Implementation.
*/
template < > struct EventInfoID< DpEventID::VoiceStateUpdate > : public DpVoiceStateUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceClientDisconnect > : public DpVoiceClientDisconnectEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceClientSpeaking > : public DpVoiceClientSpeakingEventInfo { };
template < > struct EventInfoID< DpEventID::Log > : public DpLogEventInfo { };
template < > struct EventInfoID< DpEventID::GuildJoinRequestDelete > : public DpGuildJoinRequestDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::InteractionCreate > : public DpInteractionCreateEventInfo { };
template < > struct EventInfoID< DpEventID::SlashCommand > : public DpSlashCommandEventInfo { };
template < > struct EventInfoID< DpEventID::ButtonClick > : public DpButtonClickEventInfo { };
template < > struct EventInfoID< DpEventID::AutoComplete > : public DpAutoCompleteEventInfo { };
template < > struct EventInfoID< DpEventID::SelectClick > : public DpSelectClickEventInfo { };
template < > struct EventInfoID< DpEventID::MessageContextMenu > : public DpMessageContextMenuEventInfo { };
template < > struct EventInfoID< DpEventID::UserContextMenu > : public DpUserContextMenuEventInfo { };
template < > struct EventInfoID< DpEventID::FormSubmit > : public DpFormSubmitEventInfo { };
template < > struct EventInfoID< DpEventID::GuildDelete > : public DpGuildDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::ChannelDelete > : public DpChannelDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::ChannelUpdate > : public DpChannelUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::Ready > : public DpReadyEventInfo { };
template < > struct EventInfoID< DpEventID::MessageDelete > : public DpMessageDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::GuildMemberRemove > : public DpGuildMemberRemoveEventInfo { };
template < > struct EventInfoID< DpEventID::Resumed > : public DpResumedEventInfo { };
template < > struct EventInfoID< DpEventID::GuildRoleCreate > : public DpGuildRoleCreateEventInfo { };
template < > struct EventInfoID< DpEventID::TypingStart > : public DpTypingStartEventInfo { };
template < > struct EventInfoID< DpEventID::MessageReactionAdd > : public DpMessageReactionAddEventInfo { };
template < > struct EventInfoID< DpEventID::GuildMembersChunk > : public DpGuildMembersChunkEventInfo { };
template < > struct EventInfoID< DpEventID::MessageReactionRemove > : public DpMessageReactionRemoveEventInfo { };
template < > struct EventInfoID< DpEventID::GuildCreate > : public DpGuildCreateEventInfo { };
template < > struct EventInfoID< DpEventID::ChannelCreate > : public DpChannelCreateEventInfo { };
template < > struct EventInfoID< DpEventID::MessageReactionRemoveEmoji > : public DpMessageReactionRemoveEmojiEventInfo { };
template < > struct EventInfoID< DpEventID::MessageDeleteDulk > : public DpMessageDeleteDulkEventInfo { };
template < > struct EventInfoID< DpEventID::GuildRoleUpdate > : public DpGuildRoleUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildRoleDelete > : public DpGuildRoleDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::ChannelPinsUpdate > : public DpChannelPinsUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::MessageReactionRemoveAll > : public DpMessageReactionRemoveAllEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceServerUpdate > : public DpVoiceServerUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildEmojisUpdate > : public DpGuildEmojisUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildStickersUpdate > : public DpGuildStickersUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::PresenceUpdate > : public DpPresenceUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::WebhooksUpdate > : public DpWebhooksUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::AutomodRuleCreate > : public DpAutomodRuleCreateEventInfo { };
template < > struct EventInfoID< DpEventID::AutomodRuleUpdate > : public DpAutomodRuleUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::AutomodRuleDelete > : public DpAutomodRuleDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::AutomodRuleExecute > : public DpAutomodRuleExecuteEventInfo { };
template < > struct EventInfoID< DpEventID::GuildMemberAdd > : public DpGuildMemberAddEventInfo { };
template < > struct EventInfoID< DpEventID::InviteDelete > : public DpInviteDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::GuildUpdate > : public DpGuildUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildIntegrationsUpdate > : public DpGuildIntegrationsUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildMemberUpdate > : public DpGuildMemberUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::InviteCreate > : public DpInviteCreateEventInfo { };
template < > struct EventInfoID< DpEventID::MessageUpdate > : public DpMessageUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::UserUpdate > : public DpUserUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::MessageCreate > : public DpMessageCreateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildBanAdd > : public DpGuildBanAddEventInfo { };
template < > struct EventInfoID< DpEventID::GuildBanRemove > : public DpGuildBanRemoveEventInfo { };
template < > struct EventInfoID< DpEventID::IntegrationCreate > : public DpIntegrationCreateEventInfo { };
template < > struct EventInfoID< DpEventID::IntegrationUpdate > : public DpIntegrationUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::IntegrationDelete > : public DpIntegrationDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadCreate > : public DpThreadCreateEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadUpdate > : public DpThreadUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadDelete > : public DpThreadDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadListSync > : public DpThreadListSyncEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadMemberUpdate > : public DpThreadMemberUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::ThreadMembersUpdate > : public DpThreadMembersUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildScheduledEventCreate > : public DpGuildScheduledEventCreateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildScheduledEventUpdate > : public DpGuildScheduledEventUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::GuildScheduledEventDelete > : public DpGuildScheduledEventDeleteEventInfo { };
template < > struct EventInfoID< DpEventID::GuildScheduledEventUserAdd > : public DpGuildScheduledEventUserAddEventInfo { };
template < > struct EventInfoID< DpEventID::GuildScheduledEventUserRemove > : public DpGuildScheduledEventUserRemoveEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceBufferSend > : public DpVoiceBufferSendEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceUserTalking > : public DpVoiceUserTalkingEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceReady > : public DpVoiceReadyEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceReceive > : public DpVoiceReceiveEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceReceiveCombined > : public DpVoiceReceiveCombinedEventInfo { };
template < > struct EventInfoID< DpEventID::VoiceTrackMarker > : public DpVoiceTrackMarkerEventInfo { };
template < > struct EventInfoID< DpEventID::StageInstanceCreate > : public DpStageInstanceCreateEventInfo { };
template < > struct EventInfoID< DpEventID::StageInstanceUpdate > : public DpStageInstanceUpdateEventInfo { };
template < > struct EventInfoID< DpEventID::StageInstanceDelete > : public DpStageInstanceDeleteEventInfo { };
} // Namespace:: SqMod

View File

@ -0,0 +1,777 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Events.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqDpVoiceStateUpdateEvent, _SC("SqDiscordVoiceStateUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceClientDisconnectEvent, _SC("SqDiscordVoiceClientDisconnectEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceClientSpeakingEvent, _SC("SqDiscordVoiceClientSpeakingEvent"))
SQMOD_DECL_TYPENAME(SqDpLogEvent, _SC("SqDiscordLogEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildJoinRequestDeleteEvent, _SC("SqDiscordGuildJoinRequestDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpInteractionCreateEvent, _SC("SqDiscordInteractionCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpSlashCommandEvent, _SC("SqDiscordSlashCommandEvent"))
SQMOD_DECL_TYPENAME(SqDpButtonClickEvent, _SC("SqDiscordButtonClickEvent"))
SQMOD_DECL_TYPENAME(SqDpAutoCompleteEvent, _SC("SqDiscordAutoCompleteEvent"))
SQMOD_DECL_TYPENAME(SqDpSelectClickEvent, _SC("SqDiscordSelectClickEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageContextMenuEvent, _SC("SqDiscordMessageContextMenuEvent"))
SQMOD_DECL_TYPENAME(SqDpUserContextMenuEvent, _SC("SqDiscordUserContextMenuEvent"))
SQMOD_DECL_TYPENAME(SqDpFormSubmitEvent, _SC("SqDiscordFormSubmitEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildDeleteEvent, _SC("SqDiscordGuildDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpChannelDeleteEvent, _SC("SqDiscordChannelDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpChannelUpdateEvent, _SC("SqDiscordChannelUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpReadyEvent, _SC("SqDiscordReadyEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageDeleteEvent, _SC("SqDiscordMessageDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildMemberRemoveEvent, _SC("SqDiscordGuildMemberRemoveEvent"))
SQMOD_DECL_TYPENAME(SqDpResumedEvent, _SC("SqDiscordResumedEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildRoleCreateEvent, _SC("SqDiscordGuildRoleCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpTypingStartEvent, _SC("SqDiscordTypingStartEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageReactionAddEvent, _SC("SqDiscordMessageReactionAddEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildMembersChunkEvent, _SC("SqDiscordGuildMembersChunkEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageReactionRemoveEvent, _SC("SqDiscordMessageReactionRemoveEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildCreateEvent, _SC("SqDiscordGuildCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpChannelCreateEvent, _SC("SqDiscordChannelCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageReactionRemoveEmojiEvent, _SC("SqDiscordMessageReactionRemoveEmojiEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageDeleteDulkEvent, _SC("SqDiscordMessageDeleteDulkEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildRoleUpdateEvent, _SC("SqDiscordGuildRoleUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildRoleDeleteEvent, _SC("SqDiscordGuildRoleDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpChannelPinsUpdateEvent, _SC("SqDiscordChannelPinsUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageReactionRemoveAllEvent, _SC("SqDiscordMessageReactionRemoveAllEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceServerUpdateEvent, _SC("SqDiscordVoiceServerUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildEmojisUpdateEvent, _SC("SqDiscordGuildEmojisUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildStickersUpdateEvent, _SC("SqDiscordGuildStickersUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpPresenceUpdateEvent, _SC("SqDiscordPresenceUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpWebhooksUpdateEvent, _SC("SqDiscordWebhooksUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpAutomodRuleCreateEvent, _SC("SqDiscordAutomodRuleCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpAutomodRuleUpdateEvent, _SC("SqDiscordAutomodRuleUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpAutomodRuleDeleteEvent, _SC("SqDiscordAutomodRuleDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpAutomodRuleExecuteEvent, _SC("SqDiscordAutomodRuleExecuteEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildMemberAddEvent, _SC("SqDiscordGuildMemberAddEvent"))
SQMOD_DECL_TYPENAME(SqDpInviteDeleteEvent, _SC("SqDiscordInviteDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildUpdateEvent, _SC("SqDiscordGuildUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildIntegrationsUpdateEvent, _SC("SqDiscordGuildIntegrationsUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildMemberUpdateEvent, _SC("SqDiscordGuildMemberUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpInviteCreateEvent, _SC("SqDiscordInviteCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageUpdateEvent, _SC("SqDiscordMessageUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpUserUpdateEvent, _SC("SqDiscordUserUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpMessageCreateEvent, _SC("SqDiscordMessageCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildBanAddEvent, _SC("SqDiscordGuildBanAddEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildBanRemoveEvent, _SC("SqDiscordGuildBanRemoveEvent"))
SQMOD_DECL_TYPENAME(SqDpIntegrationCreateEvent, _SC("SqDiscordIntegrationCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpIntegrationUpdateEvent, _SC("SqDiscordIntegrationUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpIntegrationDeleteEvent, _SC("SqDiscordIntegrationDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadCreateEvent, _SC("SqDiscordThreadCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadUpdateEvent, _SC("SqDiscordThreadUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadDeleteEvent, _SC("SqDiscordThreadDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadListSyncEvent, _SC("SqDiscordThreadListSyncEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadMemberUpdateEvent, _SC("SqDiscordThreadMemberUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpThreadMembersUpdateEvent, _SC("SqDiscordThreadMembersUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildScheduledEventCreateEvent, _SC("SqDiscordGuildScheduledEventCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildScheduledEventUpdateEvent, _SC("SqDiscordGuildScheduledEventUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildScheduledEventDeleteEvent, _SC("SqDiscordGuildScheduledEventDeleteEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildScheduledEventUserAddEvent, _SC("SqDiscordGuildScheduledEventUserAddEvent"))
SQMOD_DECL_TYPENAME(SqDpGuildScheduledEventUserRemoveEvent, _SC("SqDiscordGuildScheduledEventUserRemoveEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceBufferSendEvent, _SC("SqDiscordVoiceBufferSendEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceUserTalkingEvent, _SC("SqDiscordVoiceUserTalkingEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceReadyEvent, _SC("SqDiscordVoiceReadyEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceReceiveEvent, _SC("SqDiscordVoiceReceiveEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceReceiveCombinedEvent, _SC("SqDiscordVoiceReceiveCombinedEvent"))
SQMOD_DECL_TYPENAME(SqDpVoiceTrackMarkerEvent, _SC("SqDiscordVoiceTrackMarkerEvent"))
SQMOD_DECL_TYPENAME(SqDpStageInstanceCreateEvent, _SC("SqDiscordStageInstanceCreateEvent"))
SQMOD_DECL_TYPENAME(SqDpStageInstanceUpdateEvent, _SC("SqDiscordStageInstanceUpdateEvent"))
SQMOD_DECL_TYPENAME(SqDpStageInstanceDeleteEvent, _SC("SqDiscordStageInstanceDeleteEvent"))
// ------------------------------------------------------------------------------------------------
void Register_Discord_Events(HSQUIRRELVM vm, Table & ns)
{
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceStateUpdate"),
Class< DpVoiceStateUpdateEvent, NoConstructor< DpVoiceStateUpdateEvent > >(vm, SqDpVoiceStateUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceStateUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceStateUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceStateUpdateEvent::GetRawEvent)
.Prop(_SC("State"), &DpVoiceStateUpdateEvent::GetState)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceClientDisconnect"),
Class< DpVoiceClientDisconnectEvent, NoConstructor< DpVoiceClientDisconnectEvent > >(vm, SqDpVoiceClientDisconnectEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceClientDisconnectEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceClientDisconnectEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceClientDisconnectEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceClientSpeaking"),
Class< DpVoiceClientSpeakingEvent, NoConstructor< DpVoiceClientSpeakingEvent > >(vm, SqDpVoiceClientSpeakingEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceClientSpeakingEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceClientSpeakingEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceClientSpeakingEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Log"),
Class< DpLogEvent, NoConstructor< DpLogEvent > >(vm, SqDpLogEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpLogEvent::Fn)
.Func(_SC("_tostring"), &DpLogEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpLogEvent::GetRawEvent)
.Prop(_SC("Severity"), &DpLogEvent::GetSeverity)
.Prop(_SC("Message"), &DpLogEvent::GetMessage)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildJoinRequestDelete"),
Class< DpGuildJoinRequestDeleteEvent, NoConstructor< DpGuildJoinRequestDeleteEvent > >(vm, SqDpGuildJoinRequestDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildJoinRequestDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpGuildJoinRequestDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildJoinRequestDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("InteractionCreate"),
Class< DpInteractionCreateEvent, NoConstructor< DpInteractionCreateEvent > >(vm, SqDpInteractionCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpInteractionCreateEvent::Fn)
.Func(_SC("_tostring"), &DpInteractionCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpInteractionCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("SlashCommand"),
Class< DpSlashCommandEvent, NoConstructor< DpSlashCommandEvent > >(vm, SqDpSlashCommandEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpSlashCommandEvent::Fn)
.Func(_SC("_tostring"), &DpSlashCommandEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpSlashCommandEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ButtonClick"),
Class< DpButtonClickEvent, NoConstructor< DpButtonClickEvent > >(vm, SqDpButtonClickEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpButtonClickEvent::Fn)
.Func(_SC("_tostring"), &DpButtonClickEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpButtonClickEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("AutoComplete"),
Class< DpAutoCompleteEvent, NoConstructor< DpAutoCompleteEvent > >(vm, SqDpAutoCompleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpAutoCompleteEvent::Fn)
.Func(_SC("_tostring"), &DpAutoCompleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpAutoCompleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("SelectClick"),
Class< DpSelectClickEvent, NoConstructor< DpSelectClickEvent > >(vm, SqDpSelectClickEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpSelectClickEvent::Fn)
.Func(_SC("_tostring"), &DpSelectClickEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpSelectClickEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageContextMenu"),
Class< DpMessageContextMenuEvent, NoConstructor< DpMessageContextMenuEvent > >(vm, SqDpMessageContextMenuEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageContextMenuEvent::Fn)
.Func(_SC("_tostring"), &DpMessageContextMenuEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageContextMenuEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("UserContextMenu"),
Class< DpUserContextMenuEvent, NoConstructor< DpUserContextMenuEvent > >(vm, SqDpUserContextMenuEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpUserContextMenuEvent::Fn)
.Func(_SC("_tostring"), &DpUserContextMenuEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpUserContextMenuEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("FormSubmit"),
Class< DpFormSubmitEvent, NoConstructor< DpFormSubmitEvent > >(vm, SqDpFormSubmitEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpFormSubmitEvent::Fn)
.Func(_SC("_tostring"), &DpFormSubmitEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpFormSubmitEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildDelete"),
Class< DpGuildDeleteEvent, NoConstructor< DpGuildDeleteEvent > >(vm, SqDpGuildDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpGuildDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ChannelDelete"),
Class< DpChannelDeleteEvent, NoConstructor< DpChannelDeleteEvent > >(vm, SqDpChannelDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpChannelDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpChannelDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpChannelDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ChannelUpdate"),
Class< DpChannelUpdateEvent, NoConstructor< DpChannelUpdateEvent > >(vm, SqDpChannelUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpChannelUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpChannelUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpChannelUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Ready"),
Class< DpReadyEvent, NoConstructor< DpReadyEvent > >(vm, SqDpReadyEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpReadyEvent::Fn)
.Func(_SC("_tostring"), &DpReadyEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpReadyEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageDelete"),
Class< DpMessageDeleteEvent, NoConstructor< DpMessageDeleteEvent > >(vm, SqDpMessageDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpMessageDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildMemberRemove"),
Class< DpGuildMemberRemoveEvent, NoConstructor< DpGuildMemberRemoveEvent > >(vm, SqDpGuildMemberRemoveEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildMemberRemoveEvent::Fn)
.Func(_SC("_tostring"), &DpGuildMemberRemoveEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildMemberRemoveEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Resumed"),
Class< DpResumedEvent, NoConstructor< DpResumedEvent > >(vm, SqDpResumedEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpResumedEvent::Fn)
.Func(_SC("_tostring"), &DpResumedEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpResumedEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildRoleCreate"),
Class< DpGuildRoleCreateEvent, NoConstructor< DpGuildRoleCreateEvent > >(vm, SqDpGuildRoleCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildRoleCreateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildRoleCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildRoleCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("TypingStart"),
Class< DpTypingStartEvent, NoConstructor< DpTypingStartEvent > >(vm, SqDpTypingStartEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpTypingStartEvent::Fn)
.Func(_SC("_tostring"), &DpTypingStartEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpTypingStartEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageReactionAdd"),
Class< DpMessageReactionAddEvent, NoConstructor< DpMessageReactionAddEvent > >(vm, SqDpMessageReactionAddEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageReactionAddEvent::Fn)
.Func(_SC("_tostring"), &DpMessageReactionAddEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageReactionAddEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildMembersChunk"),
Class< DpGuildMembersChunkEvent, NoConstructor< DpGuildMembersChunkEvent > >(vm, SqDpGuildMembersChunkEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildMembersChunkEvent::Fn)
.Func(_SC("_tostring"), &DpGuildMembersChunkEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildMembersChunkEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageReactionRemove"),
Class< DpMessageReactionRemoveEvent, NoConstructor< DpMessageReactionRemoveEvent > >(vm, SqDpMessageReactionRemoveEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageReactionRemoveEvent::Fn)
.Func(_SC("_tostring"), &DpMessageReactionRemoveEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageReactionRemoveEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildCreate"),
Class< DpGuildCreateEvent, NoConstructor< DpGuildCreateEvent > >(vm, SqDpGuildCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildCreateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ChannelCreate"),
Class< DpChannelCreateEvent, NoConstructor< DpChannelCreateEvent > >(vm, SqDpChannelCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpChannelCreateEvent::Fn)
.Func(_SC("_tostring"), &DpChannelCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpChannelCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageReactionRemoveEmoji"),
Class< DpMessageReactionRemoveEmojiEvent, NoConstructor< DpMessageReactionRemoveEmojiEvent > >(vm, SqDpMessageReactionRemoveEmojiEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageReactionRemoveEmojiEvent::Fn)
.Func(_SC("_tostring"), &DpMessageReactionRemoveEmojiEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageReactionRemoveEmojiEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageDeleteDulk"),
Class< DpMessageDeleteDulkEvent, NoConstructor< DpMessageDeleteDulkEvent > >(vm, SqDpMessageDeleteDulkEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageDeleteDulkEvent::Fn)
.Func(_SC("_tostring"), &DpMessageDeleteDulkEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageDeleteDulkEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildRoleUpdate"),
Class< DpGuildRoleUpdateEvent, NoConstructor< DpGuildRoleUpdateEvent > >(vm, SqDpGuildRoleUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildRoleUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildRoleUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildRoleUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildRoleDelete"),
Class< DpGuildRoleDeleteEvent, NoConstructor< DpGuildRoleDeleteEvent > >(vm, SqDpGuildRoleDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildRoleDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpGuildRoleDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildRoleDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ChannelPinsUpdate"),
Class< DpChannelPinsUpdateEvent, NoConstructor< DpChannelPinsUpdateEvent > >(vm, SqDpChannelPinsUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpChannelPinsUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpChannelPinsUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpChannelPinsUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageReactionRemoveAll"),
Class< DpMessageReactionRemoveAllEvent, NoConstructor< DpMessageReactionRemoveAllEvent > >(vm, SqDpMessageReactionRemoveAllEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageReactionRemoveAllEvent::Fn)
.Func(_SC("_tostring"), &DpMessageReactionRemoveAllEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageReactionRemoveAllEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceServerUpdate"),
Class< DpVoiceServerUpdateEvent, NoConstructor< DpVoiceServerUpdateEvent > >(vm, SqDpVoiceServerUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceServerUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceServerUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceServerUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildEmojisUpdate"),
Class< DpGuildEmojisUpdateEvent, NoConstructor< DpGuildEmojisUpdateEvent > >(vm, SqDpGuildEmojisUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildEmojisUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildEmojisUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildEmojisUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildStickersUpdate"),
Class< DpGuildStickersUpdateEvent, NoConstructor< DpGuildStickersUpdateEvent > >(vm, SqDpGuildStickersUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildStickersUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildStickersUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildStickersUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("PresenceUpdate"),
Class< DpPresenceUpdateEvent, NoConstructor< DpPresenceUpdateEvent > >(vm, SqDpPresenceUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpPresenceUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpPresenceUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpPresenceUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("WebhooksUpdate"),
Class< DpWebhooksUpdateEvent, NoConstructor< DpWebhooksUpdateEvent > >(vm, SqDpWebhooksUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpWebhooksUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpWebhooksUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpWebhooksUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("AutomodRuleCreate"),
Class< DpAutomodRuleCreateEvent, NoConstructor< DpAutomodRuleCreateEvent > >(vm, SqDpAutomodRuleCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpAutomodRuleCreateEvent::Fn)
.Func(_SC("_tostring"), &DpAutomodRuleCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpAutomodRuleCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("AutomodRuleUpdate"),
Class< DpAutomodRuleUpdateEvent, NoConstructor< DpAutomodRuleUpdateEvent > >(vm, SqDpAutomodRuleUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpAutomodRuleUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpAutomodRuleUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpAutomodRuleUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("AutomodRuleDelete"),
Class< DpAutomodRuleDeleteEvent, NoConstructor< DpAutomodRuleDeleteEvent > >(vm, SqDpAutomodRuleDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpAutomodRuleDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpAutomodRuleDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpAutomodRuleDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("AutomodRuleExecute"),
Class< DpAutomodRuleExecuteEvent, NoConstructor< DpAutomodRuleExecuteEvent > >(vm, SqDpAutomodRuleExecuteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpAutomodRuleExecuteEvent::Fn)
.Func(_SC("_tostring"), &DpAutomodRuleExecuteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpAutomodRuleExecuteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildMemberAdd"),
Class< DpGuildMemberAddEvent, NoConstructor< DpGuildMemberAddEvent > >(vm, SqDpGuildMemberAddEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildMemberAddEvent::Fn)
.Func(_SC("_tostring"), &DpGuildMemberAddEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildMemberAddEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("InviteDelete"),
Class< DpInviteDeleteEvent, NoConstructor< DpInviteDeleteEvent > >(vm, SqDpInviteDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpInviteDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpInviteDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpInviteDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildUpdate"),
Class< DpGuildUpdateEvent, NoConstructor< DpGuildUpdateEvent > >(vm, SqDpGuildUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildIntegrationsUpdate"),
Class< DpGuildIntegrationsUpdateEvent, NoConstructor< DpGuildIntegrationsUpdateEvent > >(vm, SqDpGuildIntegrationsUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildIntegrationsUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildIntegrationsUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildIntegrationsUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildMemberUpdate"),
Class< DpGuildMemberUpdateEvent, NoConstructor< DpGuildMemberUpdateEvent > >(vm, SqDpGuildMemberUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildMemberUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildMemberUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildMemberUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("InviteCreate"),
Class< DpInviteCreateEvent, NoConstructor< DpInviteCreateEvent > >(vm, SqDpInviteCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpInviteCreateEvent::Fn)
.Func(_SC("_tostring"), &DpInviteCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpInviteCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageUpdate"),
Class< DpMessageUpdateEvent, NoConstructor< DpMessageUpdateEvent > >(vm, SqDpMessageUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpMessageUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("UserUpdate"),
Class< DpUserUpdateEvent, NoConstructor< DpUserUpdateEvent > >(vm, SqDpUserUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpUserUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpUserUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpUserUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("MessageCreate"),
Class< DpMessageCreateEvent, NoConstructor< DpMessageCreateEvent > >(vm, SqDpMessageCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpMessageCreateEvent::Fn)
.Func(_SC("_tostring"), &DpMessageCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpMessageCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildBanAdd"),
Class< DpGuildBanAddEvent, NoConstructor< DpGuildBanAddEvent > >(vm, SqDpGuildBanAddEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildBanAddEvent::Fn)
.Func(_SC("_tostring"), &DpGuildBanAddEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildBanAddEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildBanRemove"),
Class< DpGuildBanRemoveEvent, NoConstructor< DpGuildBanRemoveEvent > >(vm, SqDpGuildBanRemoveEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildBanRemoveEvent::Fn)
.Func(_SC("_tostring"), &DpGuildBanRemoveEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildBanRemoveEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("IntegrationCreate"),
Class< DpIntegrationCreateEvent, NoConstructor< DpIntegrationCreateEvent > >(vm, SqDpIntegrationCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpIntegrationCreateEvent::Fn)
.Func(_SC("_tostring"), &DpIntegrationCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpIntegrationCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("IntegrationUpdate"),
Class< DpIntegrationUpdateEvent, NoConstructor< DpIntegrationUpdateEvent > >(vm, SqDpIntegrationUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpIntegrationUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpIntegrationUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpIntegrationUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("IntegrationDelete"),
Class< DpIntegrationDeleteEvent, NoConstructor< DpIntegrationDeleteEvent > >(vm, SqDpIntegrationDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpIntegrationDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpIntegrationDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpIntegrationDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadCreate"),
Class< DpThreadCreateEvent, NoConstructor< DpThreadCreateEvent > >(vm, SqDpThreadCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadCreateEvent::Fn)
.Func(_SC("_tostring"), &DpThreadCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadUpdate"),
Class< DpThreadUpdateEvent, NoConstructor< DpThreadUpdateEvent > >(vm, SqDpThreadUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpThreadUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadDelete"),
Class< DpThreadDeleteEvent, NoConstructor< DpThreadDeleteEvent > >(vm, SqDpThreadDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpThreadDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadListSync"),
Class< DpThreadListSyncEvent, NoConstructor< DpThreadListSyncEvent > >(vm, SqDpThreadListSyncEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadListSyncEvent::Fn)
.Func(_SC("_tostring"), &DpThreadListSyncEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadListSyncEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadMemberUpdate"),
Class< DpThreadMemberUpdateEvent, NoConstructor< DpThreadMemberUpdateEvent > >(vm, SqDpThreadMemberUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadMemberUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpThreadMemberUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadMemberUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ThreadMembersUpdate"),
Class< DpThreadMembersUpdateEvent, NoConstructor< DpThreadMembersUpdateEvent > >(vm, SqDpThreadMembersUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpThreadMembersUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpThreadMembersUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpThreadMembersUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildScheduledEventCreate"),
Class< DpGuildScheduledEventCreateEvent, NoConstructor< DpGuildScheduledEventCreateEvent > >(vm, SqDpGuildScheduledEventCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildScheduledEventCreateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildScheduledEventCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildScheduledEventCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildScheduledEventUpdate"),
Class< DpGuildScheduledEventUpdateEvent, NoConstructor< DpGuildScheduledEventUpdateEvent > >(vm, SqDpGuildScheduledEventUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildScheduledEventUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpGuildScheduledEventUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildScheduledEventUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildScheduledEventDelete"),
Class< DpGuildScheduledEventDeleteEvent, NoConstructor< DpGuildScheduledEventDeleteEvent > >(vm, SqDpGuildScheduledEventDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildScheduledEventDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpGuildScheduledEventDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildScheduledEventDeleteEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildScheduledEventUserAdd"),
Class< DpGuildScheduledEventUserAddEvent, NoConstructor< DpGuildScheduledEventUserAddEvent > >(vm, SqDpGuildScheduledEventUserAddEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildScheduledEventUserAddEvent::Fn)
.Func(_SC("_tostring"), &DpGuildScheduledEventUserAddEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildScheduledEventUserAddEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("GuildScheduledEventUserRemove"),
Class< DpGuildScheduledEventUserRemoveEvent, NoConstructor< DpGuildScheduledEventUserRemoveEvent > >(vm, SqDpGuildScheduledEventUserRemoveEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildScheduledEventUserRemoveEvent::Fn)
.Func(_SC("_tostring"), &DpGuildScheduledEventUserRemoveEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpGuildScheduledEventUserRemoveEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceBufferSend"),
Class< DpVoiceBufferSendEvent, NoConstructor< DpVoiceBufferSendEvent > >(vm, SqDpVoiceBufferSendEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceBufferSendEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceBufferSendEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceBufferSendEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceUserTalking"),
Class< DpVoiceUserTalkingEvent, NoConstructor< DpVoiceUserTalkingEvent > >(vm, SqDpVoiceUserTalkingEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceUserTalkingEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceUserTalkingEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceUserTalkingEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceReady"),
Class< DpVoiceReadyEvent, NoConstructor< DpVoiceReadyEvent > >(vm, SqDpVoiceReadyEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceReadyEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceReadyEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceReadyEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceReceive"),
Class< DpVoiceReceiveEvent, NoConstructor< DpVoiceReceiveEvent > >(vm, SqDpVoiceReceiveEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceReceiveEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceReceiveEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceReceiveEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceReceive"),
Class< DpVoiceReceiveCombinedEvent, NoConstructor< DpVoiceReceiveCombinedEvent > >(vm, SqDpVoiceReceiveCombinedEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceReceiveCombinedEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceReceiveCombinedEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceReceiveCombinedEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceTrackMarker"),
Class< DpVoiceTrackMarkerEvent, NoConstructor< DpVoiceTrackMarkerEvent > >(vm, SqDpVoiceTrackMarkerEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceTrackMarkerEvent::Fn)
.Func(_SC("_tostring"), &DpVoiceTrackMarkerEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpVoiceTrackMarkerEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("StageInstanceCreate"),
Class< DpStageInstanceCreateEvent, NoConstructor< DpStageInstanceCreateEvent > >(vm, SqDpStageInstanceCreateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpStageInstanceCreateEvent::Fn)
.Func(_SC("_tostring"), &DpStageInstanceCreateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpStageInstanceCreateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("StageInstanceUpdate"),
Class< DpStageInstanceUpdateEvent, NoConstructor< DpStageInstanceUpdateEvent > >(vm, SqDpStageInstanceUpdateEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpStageInstanceUpdateEvent::Fn)
.Func(_SC("_tostring"), &DpStageInstanceUpdateEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpStageInstanceUpdateEvent::GetRawEvent)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("StageInstanceDelete"),
Class< DpStageInstanceDeleteEvent, NoConstructor< DpStageInstanceDeleteEvent > >(vm, SqDpStageInstanceDeleteEvent::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpStageInstanceDeleteEvent::Fn)
.Func(_SC("_tostring"), &DpStageInstanceDeleteEvent::GetRawEvent)
// Member Properties
.Prop(_SC("Raw"), &DpStageInstanceDeleteEvent::GetRawEvent)
);
}
} // Namespace:: SqMod

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,65 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Guild.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqDpGuildMember, _SC("SqDiscordGuildMember"))
SQMOD_DECL_TYPENAME(SqDpGuild, _SC("SqDiscordGuild"))
// ------------------------------------------------------------------------------------------------
void Register_Discord_Guild(HSQUIRRELVM vm, Table & ns)
{
ns.Bind(_SC("GuildMember"),
Class< DpGuildMember, NoConstructor< DpGuildMember > >(vm, SqDpGuildMember::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuildMember::Fn)
.Func(_SC("_cmp"), &DpGuildMember::SqCmp)
// Member Properties
.Prop(_SC("Valid"), &DpGuildMember::IsValid)
.Prop(_SC("JSON"), &DpGuildMember::BuildJSON)
.Prop(_SC("Nickname"), &DpGuildMember::GetNickname, &DpGuildMember::SetNickname)
.Prop(_SC("Roles"), &DpGuildMember::GetRoles)
.Prop(_SC("RolesCount"), &DpGuildMember::RolesCount)
.Prop(_SC("GuildID"), &DpGuildMember::GetGuildID, &DpGuildMember::SetGuildID)
.Prop(_SC("UserID"), &DpGuildMember::GetUserID, &DpGuildMember::SetUserID)
.Prop(_SC("Avatar"), &DpGuildMember::GetAvatar, &DpGuildMember::SetAvatar)
.Prop(_SC("CommunicationDisabledUntil"), &DpGuildMember::GetCommunicationDisabledUntil, &DpGuildMember::SetCommunicationDisabledUntil)
.Prop(_SC("JoinedAt"), &DpGuildMember::GetJoinedAt)
.Prop(_SC("PremiumSince"), &DpGuildMember::GetPremiumSince)
.Prop(_SC("Flags"), &DpGuildMember::GetFlags, &DpGuildMember::SetFlags)
.Prop(_SC("CommunicationDisabled"), &DpGuildMember::IsCommunicationDisabled)
.Prop(_SC("Deaf"), &DpGuildMember::GetDeaf, &DpGuildMember::SetDeaf)
.Prop(_SC("Muted"), &DpGuildMember::GetMuted, &DpGuildMember::SetMuted)
.Prop(_SC("IsPending"), &DpGuildMember::IsPending)
.Prop(_SC("HasAnimatedGuildAvatar"), &DpGuildMember::HasAnimatedGuildAvatar)
.Prop(_SC("Mention"), &DpGuildMember::GetMention)
// Member Methods
.Func(_SC("BuildJSON"), &DpGuildMember::BuildJSON_)
.Func(_SC("GetNickname"), &DpGuildMember::ApplyNickname)
.Func(_SC("AddRole"), &DpGuildMember::AddRole)
.Func(_SC("EachRole"), &DpGuildMember::EachRole)
.Func(_SC("ClearRoles"), &DpGuildMember::ClearRoles)
.Func(_SC("FilterRoles"), &DpGuildMember::FilterRoles)
.Func(_SC("GetFlags"), &DpGuildMember::ApplyFlags)
.Func(_SC("GetAvatarURL"), &DpGuildMember::GetAvatarURL)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Guild"),
Class< DpGuild, NoConstructor< DpGuild > >(vm, SqDpGuild::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpGuild::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpGuild::IsValid)
.Prop(_SC("JSON"), &DpGuild::BuildJSON)
.Prop(_SC("Name"), &DpGuild::GetName, &DpGuild::SetName)
.Prop(_SC("Description"), &DpGuild::GetDescription, &DpGuild::SetDescription)
// Member Methods
.Func(_SC("BuildJSON"), &DpGuild::BuildJSON_)
.Func(_SC("GetName"), &DpGuild::ApplyName)
.Func(_SC("GetDescription"), &DpGuild::ApplyDescription)
);
}
} // Namespace:: SqMod

View File

@ -0,0 +1,421 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
#include <chrono>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Represents a guild on Discord (AKA a server).
*/
struct DpGuildMember
{
using Ptr = std::unique_ptr< dpp::guild_member >;
/* --------------------------------------------------------------------------------------------
* Referenced guild member instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpGuildMember() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpGuildMember(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpGuildMember(const Ptr::element_type & o) noexcept
: DpGuildMember(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpGuildMember(Ptr::element_type && o) noexcept
: DpGuildMember(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpGuildMember(const DpGuildMember & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpGuildMember(DpGuildMember && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpGuildMember() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpGuildMember & operator = (const DpGuildMember & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpGuildMember & operator = (DpGuildMember && o) noexcept
{
if (this != &o) {
// Do we own this to try delete it?
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord voice state handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Build json representation of the object.
*/
SQMOD_NODISCARD std::string BuildJSON() const { return Valid().build_json(); }
SQMOD_NODISCARD std::string BuildJSON_(bool with_id) const { return Valid().build_json(with_id); }
/* --------------------------------------------------------------------------------------------
* Check if this member is equal to another member object.
*/
SQMOD_NODISCARD SQInteger SqCmp(const DpGuildMember & o) const
{
if (Valid() == o.Valid()) {
return 0;
// Nonsense...
} else if (Valid().user_id > o.Valid().user_id) {
return 1;
} else {
return -1;
}
}
/* --------------------------------------------------------------------------------------------
* Retrieve the nickname, or empty string if they don't have a nickname on this guild.
*/
SQMOD_NODISCARD const std::string & GetNickname() const { return Valid().nickname; }
/* --------------------------------------------------------------------------------------------
* Modify the nickname.
*/
void SetNickname(StackStrF & name) const { Valid().set_nickname(name.ToStr()); }
/* --------------------------------------------------------------------------------------------
* Modify the nickname.
*/
DpGuildMember & ApplyNickname(StackStrF & name) { SetNickname(name); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the list of roles this user has on this guild.
*/
SQMOD_NODISCARD Array GetRoles() const
{
return Array(SqVM()).Reserve(static_cast< SQInteger >(Valid().roles.size()))
.AppendFromVector(Valid().roles);
}
/* --------------------------------------------------------------------------------------------
* Retrieve the number of roles.
*/
SQMOD_NODISCARD SQInteger RolesCount() const { return static_cast< SQInteger >(Valid().roles.size()); }
/* --------------------------------------------------------------------------------------------
* Add a new role.
*/
DpGuildMember & AddRole(dpp::snowflake role) { Valid().roles.push_back(role); return *this; }
/* --------------------------------------------------------------------------------------------
* Iterate all roles.
*/
DpGuildMember & EachRole(Function & fn)
{
for (const auto & a : Valid().roles)
{
fn.Execute(a);
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the number of roles.
*/
DpGuildMember & ClearRoles(dpp::snowflake role) { Valid().roles.clear(); return *this; }
/* --------------------------------------------------------------------------------------------
* Filter roles.
*/
DpGuildMember & FilterRoles(Function & fn)
{
std::vector< dpp::snowflake > list;
// Reserve memory in advance
list.reserve(Valid().roles.size());
// Process each role individually
for (const auto & role : Valid().roles)
{
auto ret = fn.Eval(role);
// (null || true) == keep & false == skip
if (!ret.IsNull() || !ret.template Cast< bool >())
{
list.push_back(role); // Keep this role
}
}
// Use filtered roles
Valid().roles.swap(list);
// Allow chaining
return *this;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the guild id.
*/
SQMOD_NODISCARD dpp::snowflake GetGuildID() const { return Valid().guild_id; }
/* --------------------------------------------------------------------------------------------
* Modify the guild id.
*/
void SetGuildID(dpp::snowflake id) { Valid().guild_id = id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the user id.
*/
SQMOD_NODISCARD dpp::snowflake GetUserID() const { return Valid().user_id; }
/* --------------------------------------------------------------------------------------------
* Modify the guild id.
*/
void SetUserID(dpp::snowflake id) { Valid().guild_id = id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the user avatar (per-server avatar is a nitro only feature).
*/
SQMOD_NODISCARD const dpp::utility::iconhash & GetAvatar() const { return Valid().avatar; }
/* --------------------------------------------------------------------------------------------
* Modify the user avatar (per-server avatar is a nitro only feature).
*/
void SetAvatar(const dpp::utility::iconhash & a) const { Valid().avatar = a; }
/* --------------------------------------------------------------------------------------------
* Retrieve the date and time when the time out will be removed; until then, they cannot interact with the guild.
*/
SQMOD_NODISCARD SQInteger GetCommunicationDisabledUntil() const
{
return std::chrono::time_point_cast< std::chrono::seconds >(
std::chrono::system_clock::from_time_t(Valid().communication_disabled_until)
).time_since_epoch().count();
}
/* --------------------------------------------------------------------------------------------
* Assign a timestamp until communication is disabled.
*/
void SetCommunicationDisabledUntil(SQInteger ts) const
{
Valid().set_communication_disabled_until(
std::chrono::system_clock::to_time_t(std::chrono::time_point< std::chrono::system_clock >(std::chrono::seconds(ts)))
);
}
/* --------------------------------------------------------------------------------------------
* Retrieve the date and time the user joined the guild.
*/
SQMOD_NODISCARD SQInteger GetJoinedAt() const
{
return std::chrono::time_point_cast< std::chrono::seconds >(
std::chrono::system_clock::from_time_t(Valid().joined_at)
).time_since_epoch().count();
}
/* --------------------------------------------------------------------------------------------
* Retrieve the date and time since the user is boosting.
*/
SQMOD_NODISCARD SQInteger GetPremiumSince() const
{
return std::chrono::time_point_cast< std::chrono::seconds >(
std::chrono::system_clock::from_time_t(Valid().premium_since)
).time_since_epoch().count();
}
/* --------------------------------------------------------------------------------------------
* Retrieve the guild flags. Built from the bitmask defined by SqDiscordGuildMemberFlags.
*/
SQMOD_NODISCARD SQInteger GetFlags() const { return static_cast< SQInteger >(Valid().flags); }
/* --------------------------------------------------------------------------------------------
* Modify the guild flags.
*/
void SetFlags(SQInteger f) const { Valid().flags = static_cast< uint8_t >(f); }
/* --------------------------------------------------------------------------------------------
* Modify the guild flags.
*/
DpGuildMember & ApplyFlags(SQInteger f) { SetFlags(f); return *this; }
/* --------------------------------------------------------------------------------------------
* Check whether the user is in time-out (communication disabled).
*/
SQMOD_NODISCARD bool IsCommunicationDisabled() const { return Valid().is_communication_disabled(); }
/* --------------------------------------------------------------------------------------------
* Check whether the user is deafened.
*/
SQMOD_NODISCARD bool GetDeaf() const { return Valid().is_deaf(); }
/* --------------------------------------------------------------------------------------------
* Check whether the user is deafened.
*/
void SetDeaf(bool is_deafened) const { Valid().set_deaf(is_deafened); }
/* --------------------------------------------------------------------------------------------
* Check whether the user is muted.
*/
SQMOD_NODISCARD bool GetMuted() const { return Valid().is_muted(); }
/* --------------------------------------------------------------------------------------------
* Check whether the user is muted.
*/
void SetMuted(bool is_muted) const { Valid().set_mute(is_muted); }
/* --------------------------------------------------------------------------------------------
* Check whether the user is pending verification by membership screening.
*/
SQMOD_NODISCARD bool IsPending() const { return Valid().is_pending(); }
/* --------------------------------------------------------------------------------------------
* Check whether the the user's per-guild custom avatar is animated.
*/
SQMOD_NODISCARD bool HasAnimatedGuildAvatar() const { return Valid().has_animated_guild_avatar(); }
/* --------------------------------------------------------------------------------------------
* Check whether the the user's per-guild custom avatar is animated.
*/
SQMOD_NODISCARD std::string GetAvatarURL(SQInteger size, SQInteger format, bool animated) const
{ return Valid().get_avatar_url(static_cast< uint16_t >(size), static_cast< dpp::image_type >(format), animated); }
/* --------------------------------------------------------------------------------------------
* Retrieve a ping/mention for the user by nickname.
*/
SQMOD_NODISCARD std::string GetMention() const { return Valid().get_mention(); }
};
/* ------------------------------------------------------------------------------------------------
* Represents a guild on Discord (AKA a server)
*/
struct DpGuild
{
using Ptr = std::unique_ptr< dpp::guild >;
/* --------------------------------------------------------------------------------------------
* Referenced guild instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpGuild() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpGuild(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpGuild(const Ptr::element_type & o) noexcept
: DpGuild(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpGuild(Ptr::element_type && o) noexcept
: DpGuild(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpGuild(const DpGuild & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpGuild(DpGuild && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpGuild() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpGuild & operator = (const DpGuild & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpGuild & operator = (DpGuild && o) noexcept
{
if (this != &o) {
// Do we own this to try delete it?
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord guild handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Build json representation of the object.
*/
SQMOD_NODISCARD std::string BuildJSON() const { return Valid().build_json(); }
SQMOD_NODISCARD std::string BuildJSON_(bool with_id) const { return Valid().build_json(with_id); }
/* --------------------------------------------------------------------------------------------
* Retrieve the guild name. Min length: 2, Max length: 100 (not including leading/trailing spaces)
*/
SQMOD_NODISCARD const std::string & GetName() const { return Valid().name; }
/* --------------------------------------------------------------------------------------------
* Modify the guild name. Min length: 2, Max length: 100 (not including leading/trailing spaces)
*/
void SetName(StackStrF & name) const { Valid().set_name(name.ToStr()); }
/* --------------------------------------------------------------------------------------------
* Modify the guild name. Min length: 2, Max length: 100 (not including leading/trailing spaces)
*/
DpGuild & ApplyName(StackStrF & name) { SetName(name); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the server description.
*/
SQMOD_NODISCARD const std::string & GetDescription() const { return Valid().description; }
/* --------------------------------------------------------------------------------------------
* Modify the server description.
*/
void SetDescription(StackStrF & description) const { Valid().description = description.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the server description.
*/
DpGuild & ApplyDescription(StackStrF & description) { SetDescription(description); return *this; }
};
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Integration.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Message.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,117 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Misc.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqDpCachePolicy, _SC("SqDiscordCachePolicy"))
SQMOD_DECL_TYPENAME(SqDpUptime, _SC("SqDiscordUptime"))
SQMOD_DECL_TYPENAME(SqDpIconHash, _SC("SqDiscordIconHash"))
SQMOD_DECL_TYPENAME(SqDpVoiceState, _SC("SqDiscordVoiceState"))
SQMOD_DECL_TYPENAME(SqDpEmoji, _SC("SqDiscordEmoji"))
// ------------------------------------------------------------------------------------------------
void Register_Discord_Misc(HSQUIRRELVM vm, Table & ns)
{
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Uptime"),
Class< dpp::utility::uptime >(vm, SqDpUptime::Str)
// Constructors
.Ctor()
.Ctor< double >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpUptime::Fn)
.Func(_SC("_tostring"), &dpp::utility::uptime::to_string)
// Member Variables
.Var(_SC("Days"), &dpp::utility::uptime::days)
.Var(_SC("Hours"), &dpp::utility::uptime::hours)
.Var(_SC("Minutes"), &dpp::utility::uptime::mins)
.Var(_SC("Seconds"), &dpp::utility::uptime::secs)
// Member Methods
.Func(_SC("ToSeconds"), &dpp::utility::uptime::to_secs)
.Func(_SC("ToMilliseconds"), &dpp::utility::uptime::to_msecs)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("IconHash"),
Class< dpp::utility::iconhash >(vm, SqDpIconHash::Str)
// Constructors
.Ctor()
.Ctor< const std::string & >()
.Ctor< uint64_t, uint64_t >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpIconHash::Fn)
.Func(_SC("_tostring"), &dpp::utility::iconhash::to_string)
// Member Variables
.Var(_SC("High"), &dpp::utility::iconhash::first)
.Var(_SC("Low"), &dpp::utility::iconhash::second)
// Member Methods
.Func(_SC("Set"), &dpp::utility::iconhash::set)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("CachePolicy"),
Class< DpCachePolicy >(vm, SqDpCachePolicy::Str)
// Constructors
.Ctor()
.Ctor< SQInteger >()
.Ctor< SQInteger, SQInteger >()
.Ctor< SQInteger, SQInteger, SQInteger >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpCachePolicy::Fn)
// Member Variables
.Var(_SC("UserPolicy"), &DpCachePolicy::mUserPolicy)
.Var(_SC("EmojiPolicy"), &DpCachePolicy::mEmojiPolicy)
.Var(_SC("RolePolicy"), &DpCachePolicy::mRolePolicy)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("VoiceState"),
Class< DpVoiceState, NoConstructor< DpVoiceState > >(vm, SqDpVoiceState::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpVoiceState::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpVoiceState::IsValid)
.Prop(_SC("JSON"), &DpVoiceState::BuildJSON)
.Prop(_SC("GuildID"), &DpVoiceState::GetGuildID)
.Prop(_SC("ChannelID"), &DpVoiceState::GetChannelID)
.Prop(_SC("UserID"), &DpVoiceState::GetUserID)
.Prop(_SC("SessionID"), &DpVoiceState::GetSessionID)
.Prop(_SC("Flags"), &DpVoiceState::GetFlags, &DpVoiceState::SetFlags)
.Prop(_SC("RequestToSpeak"), &DpVoiceState::GetRequestToSpeak)
.Prop(_SC("IsDeaf"), &DpVoiceState::IsDeaf)
.Prop(_SC("IsMute"), &DpVoiceState::IsMute)
.Prop(_SC("IsSelfMute"), &DpVoiceState::IsSelfMute)
.Prop(_SC("IsSelfDeaf"), &DpVoiceState::IsSelfDeaf)
.Prop(_SC("SelfStream"), &DpVoiceState::SelfStream)
.Prop(_SC("SelfVideo"), &DpVoiceState::SelfVideo)
.Prop(_SC("IsSuppressed"), &DpVoiceState::IsSuppressed)
// Member Methods
.Func(_SC("BuildJSON"), &DpVoiceState::BuildJSON_)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Emoji"),
Class< DpEmoji, NoCopy< DpEmoji > >(vm, SqDpEmoji::Str)
// Constructors
.Ctor()
.Ctor< StackStrF &, dpp::snowflake, SQInteger >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpEmoji::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpEmoji::IsValid)
.Prop(_SC("JSON"), &DpEmoji::BuildJSON)
.Prop(_SC("Name"), &DpEmoji::GetName, &DpEmoji::SetName)
.Prop(_SC("ImageData"), &DpEmoji::GetImageData)
.Prop(_SC("RequiresColons"), &DpEmoji::GetRequiresColons)
.Prop(_SC("IsManaged"), &DpEmoji::GetIsManaged)
.Prop(_SC("IsAnimated"), &DpEmoji::GetIsAnimated)
.Prop(_SC("IsAvailable"), &DpEmoji::GetIsAvailable)
.Prop(_SC("Format"), &DpEmoji::Format)
.Prop(_SC("Mention"), &DpEmoji::GetMention)
// Member Methods
.Func(_SC("SetName"), &DpEmoji::ApplyName)
.Func(_SC("GetMention"), &DpEmoji::GetMention_)
.Func(_SC("BuildJSON"), &DpEmoji::BuildJSON_)
.Func(_SC("LoadImage"), &DpEmoji::LoadImage)
);
}
} // Namespace:: SqMod

View File

@ -0,0 +1,393 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Utilities.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
#include <chrono>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Represents the caching policy of the cluster.
*/
struct DpCachePolicy
{
SQInteger mUserPolicy{dpp::cp_aggressive};
SQInteger mEmojiPolicy{dpp::cp_aggressive};
SQInteger mRolePolicy{dpp::cp_aggressive};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpCachePolicy() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpCachePolicy(SQInteger user) noexcept
: mUserPolicy(user), mEmojiPolicy(dpp::cp_aggressive), mRolePolicy(dpp::cp_aggressive)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpCachePolicy(SQInteger user, SQInteger emoji) noexcept
: mUserPolicy(user), mEmojiPolicy(emoji), mRolePolicy(dpp::cp_aggressive)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpCachePolicy(SQInteger user, SQInteger emoji, SQInteger role) noexcept
: mUserPolicy(user), mEmojiPolicy(emoji), mRolePolicy(role)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
DpCachePolicy(const DpCachePolicy &) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Convert to native cache policy type.
*/
SQMOD_NODISCARD dpp::cache_policy_t ToNative() const noexcept
{
return dpp::cache_policy_t{
static_cast< dpp::cache_policy_setting_t >(mUserPolicy),
static_cast< dpp::cache_policy_setting_t >(mEmojiPolicy),
static_cast< dpp::cache_policy_setting_t >(mRolePolicy)
};
}
};
/* ------------------------------------------------------------------------------------------------
* Represents the voice state of a user on a guild.
* These are stored in the DpGuild object, and accessible there, or via DpChannel::GetVoiceMembers.
*/
struct DpVoiceState
{
using Ptr = std::unique_ptr< dpp::voicestate >;
/* --------------------------------------------------------------------------------------------
* Referenced voice state instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpVoiceState() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpVoiceState(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpVoiceState(const Ptr::element_type & o) noexcept
: DpVoiceState(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpVoiceState(Ptr::element_type && o) noexcept
: DpVoiceState(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpVoiceState(const DpVoiceState & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpVoiceState(DpVoiceState && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpVoiceState() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpVoiceState & operator = (const DpVoiceState & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpVoiceState & operator = (DpVoiceState && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord voice state handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the guild id this voice state is for (optional).
*/
SQMOD_NODISCARD dpp::snowflake GetGuildID() const { return Valid().guild_id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the channel id this user is connected to (may be empty).
*/
SQMOD_NODISCARD dpp::snowflake GetChannelID() const { return Valid().channel_id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the user id this voice state is for.
*/
SQMOD_NODISCARD dpp::snowflake GetUserID() const { return Valid().user_id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the session id for this voice state.
*/
SQMOD_NODISCARD const std::string & GetSessionID() const { return Valid().session_id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the voice state flags (see SqDiscordVoiceStateFlags).
*/
SQMOD_NODISCARD SQInteger GetFlags() const { return Valid().flags; }
/* --------------------------------------------------------------------------------------------
* Modify the voice state flags (see SqDiscordVoiceStateFlags).
*/
void SetFlags(SQInteger flags) const { Valid().flags = flags; }
/* --------------------------------------------------------------------------------------------
* Retrieve the time at which the user requested to speak, or 0.
*/
SQMOD_NODISCARD SQInteger GetRequestToSpeak() const {
return static_cast< SQInteger >(std::chrono::duration_cast< std::chrono::seconds >(
std::chrono::system_clock::from_time_t(Valid().request_to_speak).time_since_epoch()
).count());
}
/* --------------------------------------------------------------------------------------------
* Build json representation of the object.
*/
SQMOD_NODISCARD std::string BuildJSON() const { return Valid().build_json(); }
SQMOD_NODISCARD std::string BuildJSON_(bool with_id) const { return Valid().build_json(with_id); }
/* --------------------------------------------------------------------------------------------
* Check if the user is deafened by the server.
*/
SQMOD_NODISCARD bool IsDeaf() const { return Valid().is_deaf(); }
/* --------------------------------------------------------------------------------------------
* Check if the user is muted by the server.
*/
SQMOD_NODISCARD bool IsMute() const { return Valid().is_mute(); }
/* --------------------------------------------------------------------------------------------
* Check if the user muted themselves.
*/
SQMOD_NODISCARD bool IsSelfMute() const { return Valid().is_self_mute(); }
/* --------------------------------------------------------------------------------------------
* Check if the user deafened themselves.
*/
SQMOD_NODISCARD bool IsSelfDeaf() const { return Valid().is_self_deaf(); }
/* --------------------------------------------------------------------------------------------
* Check if the user is streaming using "Go Live".
*/
SQMOD_NODISCARD bool SelfStream() const { return Valid().self_stream(); }
/* --------------------------------------------------------------------------------------------
* Check if the user's camera is enabled.
*/
SQMOD_NODISCARD bool SelfVideo() const { return Valid().self_video(); }
/* --------------------------------------------------------------------------------------------
* Check if user is suppressed. "HELP HELP I'M BEING SUPPRESSED!"
*/
SQMOD_NODISCARD bool IsSuppressed() const { return Valid().is_suppressed(); }
};
/* ------------------------------------------------------------------------------------------------
* Represents the voice state of a user on a guild.
*/
struct DpEmoji
{
using Ptr = std::unique_ptr< dpp::emoji >;
/* --------------------------------------------------------------------------------------------
* Referenced voice state instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpEmoji() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpEmoji(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpEmoji(const Ptr::element_type & o) noexcept
: DpEmoji(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpEmoji(Ptr::element_type && o) noexcept
: DpEmoji(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpEmoji(StackStrF & name, dpp::snowflake id, SQInteger flags)
: DpEmoji(new Ptr::element_type(name.ToStr(), id, static_cast< uint8_t >(flags)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpEmoji(const DpEmoji & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpEmoji(DpEmoji && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpEmoji() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpEmoji & operator = (const DpEmoji & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpEmoji & operator = (DpEmoji && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord voice state handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the name of the emoji.
*/
SQMOD_NODISCARD const std::string & GetName() const { return Valid().name; }
/* --------------------------------------------------------------------------------------------
* Modify the name of the emoji.
*/
void SetName(StackStrF & name) const { Valid().name = name.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the name of the emoji.
*/
DpEmoji & ApplyName(StackStrF & name) { SetName(name); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the user who uploaded the emoji.
*/
SQMOD_NODISCARD dpp::snowflake GetUserID() const { return Valid().user_id; }
/* --------------------------------------------------------------------------------------------
* Modify the user who uploaded the emoji.
*/
void SetUserID(dpp::snowflake id) const { Valid().user_id = id; }
/* --------------------------------------------------------------------------------------------
* Modify the user who uploaded the emoji.
*/
DpEmoji & ApplyUserID(dpp::snowflake id) { SetUserID(id); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the flags for the emoji from SqDiscordEmojiFlags.
*/
SQMOD_NODISCARD SQInteger GetFlags() const { return Valid().flags; }
/* --------------------------------------------------------------------------------------------
* Modify the flags for the emoji from SqDiscordEmojiFlags.
*/
void SetFlags(SQInteger flags) const { Valid().flags = static_cast< uint8_t >(flags); }
/* --------------------------------------------------------------------------------------------
* Modify the flags for the emoji from SqDiscordEmojiFlags.
*/
DpEmoji & ApplyFlags(SQInteger flags) { SetFlags(flags); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the image data for the emoji if uploading.
*/
SQMOD_NODISCARD LightObj GetImageData() const { return !Valid().image_data ? LightObj{} : LightObj(*Valid().image_data); }
/* --------------------------------------------------------------------------------------------
* Create a mentionable emoji.
*/
SQMOD_NODISCARD std::string GetMention_(StackStrF & name, dpp::snowflake id, bool is_animated = false) const
{ return Valid().get_mention(name.ToStr(), id, is_animated); }
/* --------------------------------------------------------------------------------------------
* Build json representation of the object.
*/
SQMOD_NODISCARD std::string BuildJSON() const { return Valid().build_json(); }
SQMOD_NODISCARD std::string BuildJSON_(bool with_id) const { return Valid().build_json(with_id); }
/* --------------------------------------------------------------------------------------------
* Retrieve whether the Emoji requires colons.
*/
SQMOD_NODISCARD bool GetRequiresColons() const { return Valid().requires_colons(); }
/* --------------------------------------------------------------------------------------------
* Retrieve whether the Emoji is managed.
*/
SQMOD_NODISCARD bool GetIsManaged() const { return Valid().is_managed(); }
/* --------------------------------------------------------------------------------------------
* Retrieve whether the Emoji is animated.
*/
SQMOD_NODISCARD bool GetIsAnimated() const { return Valid().is_animated(); }
/* --------------------------------------------------------------------------------------------
* Retrieve whether the Emoji is available.
*/
SQMOD_NODISCARD bool GetIsAvailable() const { return Valid().is_available(); }
/* --------------------------------------------------------------------------------------------
* Load an image into the object as base64.
*/
DpEmoji & LoadImage(StackStrF & data, SQInteger type) { Valid().load_image(data.ToStr(), static_cast< dpp::image_type >(type)); return *this; }
/* --------------------------------------------------------------------------------------------
* Format to name if unicode, name:id if has id or a:name:id if animated.
*/
SQMOD_NODISCARD std::string Format() const { return Valid().format(); }
/* --------------------------------------------------------------------------------------------
* Retrieve the mention/ping for the emoji.
*/
SQMOD_NODISCARD std::string GetMention() const { return Valid().get_mention(); }
};
} // Namespace:: SqMod

View File

@ -0,0 +1,143 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Presence.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqDpActivityButton, _SC("SqDiscordActivityButton"))
SQMOD_DECL_TYPENAME(SqDpActivityButtons, _SC("SqDiscordActivityButtons"))
SQMOD_DECL_TYPENAME(SqDpActivityAssets, _SC("SqDiscordActivityAssets"))
SQMOD_DECL_TYPENAME(SqDpActivitySecrets, _SC("SqDiscordActivitySecrets"))
SQMOD_DECL_TYPENAME(SqDpActivity, _SC("SqDiscordActivity"))
SQMOD_DECL_TYPENAME(SqDpActivities, _SC("SqDiscordActivities"))
SQMOD_DECL_TYPENAME(SqDpPresence, _SC("SqDiscordPresence"))
// ------------------------------------------------------------------------------------------------
void Register_Discord_Presence(HSQUIRRELVM vm, Table & ns)
{
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ActivityButton"),
Class< DpActivityButton, NoCopy< DpActivityButton > >(vm, SqDpActivityButton::Str)
// Constructors
.Ctor()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpActivityButton::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpActivityButton::IsValid)
.Prop(_SC("Label"), &DpActivityButton::GetLabel, &DpActivityButton::SetLabel)
.Prop(_SC("URL"), &DpActivityButton::GetURL, &DpActivityButton::SetURL)
// Member Methods
.Func(_SC("SetLabel"), &DpActivityButton::ApplyLabel)
.Func(_SC("SetURL"), &DpActivityButton::ApplyURL)
);
// --------------------------------------------------------------------------------------------
Register_Discord_VectorProxy< dpp::activity_button, DpActivityButton, SqDpActivityButton >(vm, ns, _SC("ActivityButtons"));
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ActivityAssets"),
Class< DpActivityAssets, NoCopy< DpActivityAssets > >(vm, SqDpActivityAssets::Str)
// Constructors
.Ctor()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpActivityAssets::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpActivityAssets::IsValid)
.Prop(_SC("LargeImage"), &DpActivityAssets::GetLargeImage, &DpActivityAssets::SetLargeImage)
.Prop(_SC("LargeText"), &DpActivityAssets::GetLargeText, &DpActivityAssets::SetLargeText)
.Prop(_SC("SmallImage"), &DpActivityAssets::GetSmallImage, &DpActivityAssets::SetSmallImage)
.Prop(_SC("SmallText"), &DpActivityAssets::GetSmallText, &DpActivityAssets::SetSmallText)
// Member Methods
.Func(_SC("SetLargeImage"), &DpActivityAssets::ApplyLargeImage)
.Func(_SC("SetLargeText"), &DpActivityAssets::ApplyLargeText)
.Func(_SC("SetSmallImage"), &DpActivityAssets::ApplySmallImage)
.Func(_SC("SetSmallText"), &DpActivityAssets::ApplySmallText)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("ActivitySecrets"),
Class< DpActivitySecrets, NoCopy< DpActivitySecrets > >(vm, SqDpActivitySecrets::Str)
// Constructors
.Ctor()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpActivitySecrets::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpActivitySecrets::IsValid)
.Prop(_SC("Join"), &DpActivitySecrets::GetJoin, &DpActivitySecrets::SetJoin)
.Prop(_SC("Spectate"), &DpActivitySecrets::GetSpectate, &DpActivitySecrets::SetSpectate)
.Prop(_SC("Match"), &DpActivitySecrets::GetMatch, &DpActivitySecrets::SetMatch)
// Member Methods
.Func(_SC("SetJoin"), &DpActivitySecrets::ApplyJoin)
.Func(_SC("SetSpectate"), &DpActivitySecrets::ApplySpectate)
.Func(_SC("SetMatch"), &DpActivitySecrets::ApplyMatch)
);
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Activity"),
Class< DpActivity, NoCopy< DpActivity > >(vm, SqDpActivity::Str)
// Constructors
.Ctor()
.Ctor< SQInteger, StackStrF &, StackStrF &, StackStrF & >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpActivity::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpActivity::IsValid)
.Prop(_SC("Name"), &DpActivity::GetName, &DpActivity::SetName)
.Prop(_SC("State"), &DpActivity::GetState, &DpActivity::SetState)
.Prop(_SC("Details"), &DpActivity::GetDetails, &DpActivity::SetDetails)
.Prop(_SC("Assets"), &DpActivity::GetAssets)
.Prop(_SC("Buttons"), &DpActivity::GetButtons)
.Prop(_SC("Emoji"), &DpActivity::GetEmoji)
.Prop(_SC("PartyID"), &DpActivity::GetPartyID)
.Prop(_SC("CurrentPartySize"), &DpActivity::GetCurrentPartySize)
.Prop(_SC("MaxPartySize"), &DpActivity::GetMaxPartySize)
.Prop(_SC("Secrets"), &DpActivity::GetSecrets)
.Prop(_SC("URL"), &DpActivity::GetURL, &DpActivity::SetURL)
.Prop(_SC("Type"), &DpActivity::GetType, &DpActivity::SetType)
.Prop(_SC("CreatedAt"), &DpActivity::GetCreatedAt, &DpActivity::SetCreatedAt)
.Prop(_SC("Start"), &DpActivity::GetStart, &DpActivity::SetStart)
.Prop(_SC("End"), &DpActivity::GetEnd, &DpActivity::SetEnd)
.Prop(_SC("ApplicationID"), &DpActivity::GetApplicationID)
.Prop(_SC("Flags"), &DpActivity::GetFlags, &DpActivity::SetFlags)
.Prop(_SC("Instance"), &DpActivity::IsInstance)
// Member Methods
.Func(_SC("SetName"), &DpActivity::ApplyName)
.Func(_SC("SetState"), &DpActivity::ApplyState)
.Func(_SC("SetDetails"), &DpActivity::ApplyDetails)
.Func(_SC("SetURL"), &DpActivity::ApplyURL)
.Func(_SC("SetType"), &DpActivity::ApplyType)
.Func(_SC("SetCreatedAt"), &DpActivity::ApplyCreatedAt)
.Func(_SC("SetStart"), &DpActivity::ApplyStart)
.Func(_SC("SetEnd"), &DpActivity::ApplyEnd)
.Func(_SC("SetFlags"), &DpActivity::ApplyFlags)
.Func(_SC("GetLargeAssetURL"), &DpActivity::GetLargeAssetURL)
.Func(_SC("GetSmallAssetURL"), &DpActivity::GetSmallAssetURL)
);
// --------------------------------------------------------------------------------------------
Register_Discord_VectorProxy< dpp::activity, DpActivity, SqDpActivities >(vm, ns, _SC("Activities"));
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("Presence"),
Class< DpPresence, NoCopy< DpPresence > >(vm, SqDpPresence::Str)
// Constructors
.Ctor()
.Ctor< SQInteger, DpActivity & >()
.Ctor< SQInteger, SQInteger, StackStrF & >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &SqDpPresence::Fn)
// Member Properties
.Prop(_SC("Valid"), &DpPresence::IsValid)
.Prop(_SC("JSON"), &DpPresence::BuildJSON)
.Prop(_SC("UserID"), &DpPresence::GetUserID, &DpPresence::SetUserID)
.Prop(_SC("GuildID"), &DpPresence::GetGuildID, &DpPresence::SetGuildID)
.Prop(_SC("Flags"), &DpPresence::GetFlags, &DpPresence::SetFlags)
.Prop(_SC("Activities"), &DpPresence::GetActivities)
.Prop(_SC("DesktopStatus"), &DpPresence::GetDesktopStatus)
.Prop(_SC("WebStatus"), &DpPresence::GetWebStatus)
.Prop(_SC("MobileStatus"), &DpPresence::GetMobileStatus)
.Prop(_SC("Status"), &DpPresence::GetStatus)
// Member Methods
.Func(_SC("SetUserID"), &DpPresence::ApplyUserID)
.Func(_SC("SetGuildID"), &DpPresence::ApplyGuildID)
.Func(_SC("SetFlags"), &DpPresence::ApplyFlags)
.Func(_SC("BuildJSON"), &DpVoiceState::BuildJSON_)
);
}
} // Namespace:: SqMod

View File

@ -0,0 +1,928 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Misc.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
#include <chrono>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* An activity button is a custom button shown in the rich presence. Can be to join a game or whatever.
*/
struct DpActivityButton
{
using Ptr = std::unique_ptr< dpp::activity_button >;
/* --------------------------------------------------------------------------------------------
* Referenced activity instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpActivityButton() noexcept
: DpActivityButton(new Ptr::element_type(), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpActivityButton(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpActivityButton(const Ptr::element_type & o) noexcept
: DpActivityButton(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpActivityButton(Ptr::element_type && o) noexcept
: DpActivityButton(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpActivityButton(const DpActivityButton & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpActivityButton(DpActivityButton && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpActivityButton() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpActivityButton & operator = (const DpActivityButton & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpActivityButton & operator = (DpActivityButton && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord activity button handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the text shown on the button (1-32 characters).
*/
SQMOD_NODISCARD const std::string & GetLabel() const { return Valid().label; }
/* --------------------------------------------------------------------------------------------
* Modify the text shown on the button (1-32 characters).
*/
void SetLabel(StackStrF & label) const { Valid().label = label.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the text shown on the button (1-32 characters).
*/
DpActivityButton & ApplyLabel(StackStrF & label) { SetLabel(label); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the url opened when clicking the button (1-512 characters). It's may be empty.
*/
SQMOD_NODISCARD const std::string & GetURL() const { return Valid().url; }
/* --------------------------------------------------------------------------------------------
* Modify the url opened when clicking the button (1-512 characters).
*/
void SetURL(StackStrF & url) const { Valid().url = url.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the url opened when clicking the button (1-512 characters).
*/
DpActivityButton & ApplyURL(StackStrF & url) { SetURL(url); return *this; }
};
/* ------------------------------------------------------------------------------------------------
* An activity asset are the images and the hover text displayed in the rich presence.
*/
struct DpActivityAssets
{
using Ptr = std::unique_ptr< dpp::activity_assets >;
/* --------------------------------------------------------------------------------------------
* Referenced activity instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpActivityAssets() noexcept
: DpActivityAssets(new Ptr::element_type(), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpActivityAssets(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpActivityAssets(const Ptr::element_type & o) noexcept
: DpActivityAssets(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpActivityAssets(Ptr::element_type && o) noexcept
: DpActivityAssets(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpActivityAssets(const DpActivityAssets & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpActivityAssets(DpActivityAssets && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpActivityAssets() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpActivityAssets & operator = (const DpActivityAssets & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpActivityAssets & operator = (DpActivityAssets && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord activity assets handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the large asset image which usually contain snowflake ID or prefixed image ID.
*/
SQMOD_NODISCARD const std::string & GetLargeImage() const { return Valid().large_image; }
/* --------------------------------------------------------------------------------------------
* Modify the large asset image.
*/
void SetLargeImage(StackStrF & large_image) const { Valid().large_image = large_image.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the large asset image.
*/
DpActivityAssets & ApplyLargeImage(StackStrF & large_image) { SetLargeImage(large_image); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the text displayed when hovering over the large image of the activity.
*/
SQMOD_NODISCARD const std::string & GetLargeText() const { return Valid().large_text; }
/* --------------------------------------------------------------------------------------------
* Modify the text displayed when hovering over the large image of the activity.
*/
void SetLargeText(StackStrF & large_text) const { Valid().large_text = large_text.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the text displayed when hovering over the large image of the activity.
*/
DpActivityAssets & ApplyLargeText(StackStrF & large_text) { SetLargeText(large_text); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the small asset image which usually contain snowflake ID or prefixed image ID.
*/
SQMOD_NODISCARD const std::string & GetSmallImage() const { return Valid().small_image; }
/* --------------------------------------------------------------------------------------------
* Modify the small asset image.
*/
void SetSmallImage(StackStrF & small_image) const { Valid().small_image = small_image.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the small asset image.
*/
DpActivityAssets & ApplySmallImage(StackStrF & small_image) { SetSmallImage(small_image); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the text displayed when hovering over the small image of the activity.
*/
SQMOD_NODISCARD const std::string & GetSmallText() const { return Valid().small_text; }
/* --------------------------------------------------------------------------------------------
* Modify the text displayed when hovering over the small image of the activity.
*/
void SetSmallText(StackStrF & small_text) const { Valid().small_text = small_text.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the text displayed when hovering over the small image of the activity.
*/
DpActivityAssets & ApplySmallText(StackStrF & small_text) { SetSmallText(small_text); return *this; }
};
/* ------------------------------------------------------------------------------------------------
* Secrets for Rich Presence joining and spectating.
*/
struct DpActivitySecrets
{
using Ptr = std::unique_ptr< dpp::activity_secrets >;
/* --------------------------------------------------------------------------------------------
* Referenced activity instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpActivitySecrets() noexcept
: DpActivitySecrets(new Ptr::element_type(), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpActivitySecrets(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpActivitySecrets(const Ptr::element_type & o) noexcept
: DpActivitySecrets(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpActivitySecrets(Ptr::element_type && o) noexcept
: DpActivitySecrets(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpActivitySecrets(const DpActivitySecrets & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpActivitySecrets(DpActivitySecrets && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpActivitySecrets() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpActivitySecrets & operator = (const DpActivitySecrets & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpActivitySecrets & operator = (DpActivitySecrets && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord activity secrets handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the secret for joining a party.
*/
SQMOD_NODISCARD const std::string & GetJoin() const { return Valid().join; }
/* --------------------------------------------------------------------------------------------
* Modify the secret for joining a party.
*/
void SetJoin(StackStrF & join) const { Valid().join = join.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the secret for joining a party.
*/
DpActivitySecrets & ApplyJoin(StackStrF & join) { SetJoin(join); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the secret for spectating a game.
*/
SQMOD_NODISCARD const std::string & GetSpectate() const { return Valid().spectate; }
/* --------------------------------------------------------------------------------------------
* Modify the secret for spectating a game.
*/
void SetSpectate(StackStrF & spectate) const { Valid().spectate = spectate.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the secret for spectating a game.
*/
DpActivitySecrets & ApplySpectate(StackStrF & spectate) { SetSpectate(spectate); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the secret for a specific instanced match.
*/
SQMOD_NODISCARD const std::string & GetMatch() const { return Valid().match; }
/* --------------------------------------------------------------------------------------------
* Modify the secret for a specific instanced match.
*/
void SetMatch(StackStrF & match) const { Valid().match = match.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the secret for a specific instanced match.
*/
DpActivitySecrets & ApplyMatch(StackStrF & match) { SetMatch(match); return *this; }
};
/* ------------------------------------------------------------------------------------------------
* An activity is a representation of what a user is doing. It might be a game, or a website, or a movie. Whatever.
*/
struct DpActivity
{
using Ptr = std::unique_ptr< dpp::activity >;
/* --------------------------------------------------------------------------------------------
* Referenced activity instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
// --------------------------------------------------------------------------------------------
using Buttons = DpVectorProxy< dpp::activity_button, DpActivityButton >;
// --------------------------------------------------------------------------------------------
LightObj mSqAssets{};
LightObj mSqButtons{};
LightObj mSqEmoji{};
LightObj mSqSecrets{};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpActivity() noexcept
: DpActivity(new Ptr::element_type(), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpActivity(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpActivity(const Ptr::element_type & o) noexcept
: DpActivity(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpActivity(Ptr::element_type && o) noexcept
: DpActivity(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpActivity(SQInteger type, StackStrF & name, StackStrF & state, StackStrF & url)
: DpActivity(new Ptr::element_type(static_cast< dpp::activity_type >(type), name.ToStr(), state.ToStr(), url.ToStr()), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpActivity(const DpActivity & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpActivity(DpActivity && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpActivity() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpActivity & operator = (const DpActivity & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpActivity & operator = (DpActivity && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Cleanup activity assets, if any
if (!mSqAssets.IsNull())
{
mSqAssets.CastI< DpActivityAssets >()->Cleanup();
// Release script resources
mSqAssets.Release();
}
// Cleanup activity buttons, if any
if (!mSqButtons.IsNull())
{
mSqButtons.CastI< Buttons >()->Cleanup();
// Release script resources
mSqButtons.Release();
}
// Cleanup activity emoji, if any
if (!mSqEmoji.IsNull())
{
mSqEmoji.CastI< DpEmoji >()->Cleanup();
// Release script resources
mSqEmoji.Release();
}
// Cleanup activity secrets, if any
if (!mSqSecrets.IsNull())
{
mSqSecrets.CastI< DpActivitySecrets >()->Cleanup();
// Release script resources
mSqSecrets.Release();
}
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord activity handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the name of the activity. e.g. "Vice City"
*/
SQMOD_NODISCARD const std::string & GetName() const { return Valid().name; }
/* --------------------------------------------------------------------------------------------
* Modify the name of the activity.
*/
void SetName(StackStrF & name) const { Valid().name = name.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the name of the activity.
*/
DpActivity & ApplyName(StackStrF & name) { SetName(name); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the state of the activity. e.g. "Waiting in lobby"
*/
SQMOD_NODISCARD const std::string & GetState() const { return Valid().state; }
/* --------------------------------------------------------------------------------------------
* Modify the state of the activity.
*/
void SetState(StackStrF & state) const { Valid().state = state.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the state of the activity.
*/
DpActivity & ApplyState(StackStrF & state) { SetState(state); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the details of the activity. What the player is currently doing.
*/
SQMOD_NODISCARD const std::string & GetDetails() const { return Valid().details; }
/* --------------------------------------------------------------------------------------------
* Modify the details of the activity.
*/
void SetDetails(StackStrF & details) const { Valid().details = details.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the details of the activity.
*/
DpActivity & ApplyDetails(StackStrF & details) { SetDetails(details); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the images for the presence and their hover texts.
*/
SQMOD_NODISCARD LightObj & GetAssets()
{
if (mSqAssets.IsNull())
{
mSqAssets = LightObj{SqTypeIdentity< DpActivityAssets >{}, SqVM(), &Valid().assets, false};
}
// Return the associated script object
return mSqAssets;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the url of the activity. Only applicable for certain sites such a YouTube.
*/
SQMOD_NODISCARD const std::string & GetURL() const { return Valid().url; }
/* --------------------------------------------------------------------------------------------
* Modify the url of the activity.
*/
void SetURL(StackStrF & url) const { Valid().url = url.ToStr(); }
/* --------------------------------------------------------------------------------------------
* Modify the url of the activity.
*/
DpActivity & ApplyURL(StackStrF & url) { SetURL(url); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the custom buttons shown in the Rich Presence (max 2).
*/
SQMOD_NODISCARD LightObj & GetButtons()
{
if (mSqButtons.IsNull())
{
mSqButtons = LightObj{SqTypeIdentity< Buttons >{}, SqVM(), &Valid().buttons, false};
}
// Return the associated script object
return mSqButtons;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the emoji used for the custom status.
*/
SQMOD_NODISCARD LightObj & GetEmoji()
{
if (mSqEmoji.IsNull())
{
mSqEmoji = LightObj{SqTypeIdentity< DpEmoji >{}, SqVM(), &Valid().emoji, false};
}
// Return the associated script object
return mSqEmoji;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the ID of the party.
*/
SQMOD_NODISCARD dpp::snowflake GetPartyID() const { return Valid().party.id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the party's current size. Used to show the party's current size.
*/
SQMOD_NODISCARD SQInteger GetCurrentPartySize() const { return Valid().party.current_size; }
/* --------------------------------------------------------------------------------------------
* Retrieve the party's maximum size. Used to show the party's maximum size.
*/
SQMOD_NODISCARD SQInteger GetMaxPartySize() const { return Valid().party.maximum_size; }
/* --------------------------------------------------------------------------------------------
* Retrieve the secrets for rich presence joining and spectating.
*/
SQMOD_NODISCARD LightObj & GetSecrets()
{
if (mSqSecrets.IsNull())
{
mSqSecrets = LightObj{SqTypeIdentity< DpActivitySecrets >{}, SqVM(), &Valid().secrets, false};
}
// Return the associated script object
return mSqSecrets;
}
/* --------------------------------------------------------------------------------------------
* Retrieve the type for the activity from SqDiscordActivityType.
*/
SQMOD_NODISCARD SQInteger GetType() const { return Valid().type; }
/* --------------------------------------------------------------------------------------------
* Modify the type for the activity from SqDiscordActivityType.
*/
void SetType(SQInteger type) const { Valid().type = static_cast< dpp::activity_type >(type); }
/* --------------------------------------------------------------------------------------------
* Modify the type for the activity from SqDiscordActivityType.
*/
DpActivity & ApplyType(SQInteger type) { SetType(type); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve when the activity was created.
*/
SQMOD_NODISCARD SQInteger GetCreatedAt() const
{
return static_cast< SQInteger >(std::chrono::duration_cast< std::chrono::seconds >(std::chrono::system_clock::from_time_t(Valid().created_at).time_since_epoch()).count());
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was created.
*/
void SetCreatedAt(SQInteger s) const
{
Valid().created_at = std::chrono::system_clock::to_time_t(std::chrono::time_point< std::chrono::system_clock >{std::chrono::seconds{s}});
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was created.
*/
DpActivity & ApplyCreatedAt(SQInteger s) { SetCreatedAt(s); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve when the activity was started.
*/
SQMOD_NODISCARD SQInteger GetStart() const
{
return static_cast< SQInteger >(std::chrono::duration_cast< std::chrono::seconds >(std::chrono::system_clock::from_time_t(Valid().start).time_since_epoch()).count());
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was started.
*/
void SetStart(SQInteger s) const
{
Valid().start = std::chrono::system_clock::to_time_t(std::chrono::time_point< std::chrono::system_clock >{std::chrono::seconds{s}});
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was started.
*/
DpActivity & ApplyStart(SQInteger s) { SetStart(s); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve when the activity was stopped.
*/
SQMOD_NODISCARD SQInteger GetEnd() const
{
return static_cast< SQInteger >(std::chrono::duration_cast< std::chrono::seconds >(std::chrono::system_clock::from_time_t(Valid().end).time_since_epoch()).count());
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was stopped.
*/
void SetEnd(SQInteger s) const
{
Valid().end = std::chrono::system_clock::to_time_t(std::chrono::time_point< std::chrono::system_clock >{std::chrono::seconds{s}});
}
/* --------------------------------------------------------------------------------------------
* Modify when the activity was stopped.
*/
DpActivity & ApplyEnd(SQInteger s) { SetEnd(s); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the creating application (e.g. a linked account on the user's client)
*/
SQMOD_NODISCARD dpp::snowflake GetApplicationID() const { return Valid().application_id; }
/* --------------------------------------------------------------------------------------------
* Retrieve the flags for the activity from SqDiscordActivityFlags.
*/
SQMOD_NODISCARD SQInteger GetFlags() const { return Valid().flags; }
/* --------------------------------------------------------------------------------------------
* Modify the flags for the activity from SqDiscordActivityFlags.
*/
void SetFlags(SQInteger flags) const { Valid().flags = static_cast< uint8_t >(flags); }
/* --------------------------------------------------------------------------------------------
* Modify the flags for the activity from SqDiscordActivityFlags.
*/
DpActivity & ApplyFlags(SQInteger flags) { SetFlags(flags); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve whether or not the activity is an instanced game session.
*/
SQMOD_NODISCARD bool IsInstance() const { return Valid().is_instance; }
/* --------------------------------------------------------------------------------------------
* Get the assets large image url if they have one, otherwise returns an empty string.
* In case of prefixed image IDs (mp:{image_id}) it returns an empty string.
* See: https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-asset-image
*/
SQMOD_NODISCARD std::string GetLargeAssetURL(SQInteger size, SQInteger format) const
{ return Valid().get_large_asset_url(static_cast< uint16_t >(size), static_cast< dpp::image_type >(format)); }
/* --------------------------------------------------------------------------------------------
* Get the assets small image url if they have one, otherwise returns an empty string.
* In case of prefixed image IDs (mp:{image_id}) it returns an empty string.
* See: https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-asset-image
*/
SQMOD_NODISCARD std::string GetSmallAssetURL(SQInteger size, SQInteger format) const
{ return Valid().get_small_asset_url(static_cast< uint16_t >(size), static_cast< dpp::image_type >(format)); }
};
/* ------------------------------------------------------------------------------------------------
* Represents user presence, e.g. what game they are playing and if they are online.
*/
struct DpPresence
{
using Ptr = std::unique_ptr< dpp::presence >;
/* --------------------------------------------------------------------------------------------
* Referenced presence instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
// --------------------------------------------------------------------------------------------
using Activities = DpVectorProxy< dpp::activity, DpActivity >;
// --------------------------------------------------------------------------------------------
LightObj mSqActivities{};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpPresence() noexcept
: DpPresence(new Ptr::element_type(), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpPresence(Ptr::pointer ptr, bool owned = false) noexcept
: mPtr(ptr), mOwned(owned)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor.
*/
explicit DpPresence(const Ptr::element_type & o) noexcept
: DpPresence(new Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpPresence(Ptr::element_type && o) noexcept
: DpPresence(new Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpPresence(SQInteger status, DpActivity & activity)
: DpPresence(new Ptr::element_type(static_cast< dpp::presence_status >(status), activity.Valid()), true)
{ }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
DpPresence(SQInteger status, SQInteger type, StackStrF & description)
: DpPresence(new Ptr::element_type(static_cast< dpp::presence_status >(status), static_cast< dpp::activity_type >(status), description.ToStr()), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpPresence(const DpPresence & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpPresence(DpPresence && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpPresence() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpPresence & operator = (const DpPresence & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpPresence & operator = (DpPresence && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Cleanup presence activities, if any
if (!mSqActivities.IsNull())
{
mSqActivities.CastI< Activities >()->Cleanup();
// Release script resources
mSqActivities.Release();
}
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord presence handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Retrieve the user that the presence applies to.
*/
SQMOD_NODISCARD dpp::snowflake GetUserID() const { return Valid().user_id; }
/* --------------------------------------------------------------------------------------------
* Modify the user that the presence applies to.
*/
void SetUserID(dpp::snowflake id) const { Valid().user_id = id; }
/* --------------------------------------------------------------------------------------------
* Modify the user that the presence applies to.
*/
DpPresence & ApplyUserID(dpp::snowflake id) { SetUserID(id); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the guild that the presence applies to.
*/
SQMOD_NODISCARD dpp::snowflake GetGuildID() const { return Valid().guild_id; }
/* --------------------------------------------------------------------------------------------
* Modify the guild that the presence applies to.
*/
void SetGuildID(dpp::snowflake id) const { Valid().guild_id = id; }
/* --------------------------------------------------------------------------------------------
* Modify the guild that the presence applies to.
*/
DpPresence & ApplyGuildID(dpp::snowflake id) { SetGuildID(id); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the presence bit-mask.
*/
SQMOD_NODISCARD SQInteger GetFlags() const { return static_cast< SQInteger >(Valid().flags); }
/* --------------------------------------------------------------------------------------------
* Modify the presence bit-mask.
*/
void SetFlags(SQInteger f) const { Valid().flags = static_cast< uint8_t >(f); }
/* --------------------------------------------------------------------------------------------
* Modify the presence bit-mask.
*/
DpPresence & ApplyFlags(SQInteger f) { SetFlags(f); return *this; }
/* --------------------------------------------------------------------------------------------
* Retrieve the list of activities.
*/
SQMOD_NODISCARD LightObj & GetActivities()
{
if (mSqActivities.IsNull())
{
mSqActivities = LightObj{SqTypeIdentity< Activities >{}, SqVM(), &Valid().activities, false};
}
// Return the associated script object
return mSqActivities;
}
/* --------------------------------------------------------------------------------------------
* Build JSON string from this object.
*/
SQMOD_NODISCARD std::string BuildJSON() const { return Valid().build_json(); }
SQMOD_NODISCARD std::string BuildJSON_(bool with_id) const { return Valid().build_json(with_id); }
/* --------------------------------------------------------------------------------------------
* Retrieve the users status on desktop.
*/
SQMOD_NODISCARD SQInteger GetDesktopStatus() const { return static_cast< SQInteger >(Valid().desktop_status()); }
/* --------------------------------------------------------------------------------------------
* Retrieve the user's status on web.
*/
SQMOD_NODISCARD SQInteger GetWebStatus() const { return static_cast< SQInteger >(Valid().web_status()); }
/* --------------------------------------------------------------------------------------------
* Retrieve the user's status on mobile.
*/
SQMOD_NODISCARD SQInteger GetMobileStatus() const { return static_cast< SQInteger >(Valid().mobile_status()); }
/* --------------------------------------------------------------------------------------------
* Retrieve the user's status as shown to other users.
*/
SQMOD_NODISCARD SQInteger GetStatus() const { return static_cast< SQInteger >(Valid().status()); }
};
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Role.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/User.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,13 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,9 @@
// ------------------------------------------------------------------------------------------------
#include "Library/Discord/Utilities.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
} // Namespace:: SqMod

View File

@ -0,0 +1,462 @@
#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <dpp/dpp.h>
// ------------------------------------------------------------------------------------------------
#include <memory>
// ------------------------------------------------------------------------------------------------
namespace Sqrat {
// Allow the VM to treat the dpp::snowflake type as a integer.
template<> struct Var<dpp::snowflake>
{
dpp::snowflake value;
Var(HSQUIRRELVM vm, SQInteger idx)
{
sq_getinteger(vm, idx, reinterpret_cast<SQInteger*>(&static_cast<uint64_t&>(value)));
}
inline static void push(HSQUIRRELVM vm, const dpp::snowflake& value) noexcept
{
sq_pushinteger(vm, static_cast<SQInteger>(static_cast<uint64_t>(value)));
}
};
// Allow the VM to treat the dpp::snowflake type as a integer.
template<> struct Var<const dpp::snowflake&>
{
dpp::snowflake value;
Var(HSQUIRRELVM vm, SQInteger idx)
{
sq_getinteger(vm, idx, reinterpret_cast<SQInteger*>(&static_cast<uint64_t&>(value)));
}
inline static void push(HSQUIRRELVM vm, const dpp::snowflake& value) noexcept
{
sq_pushinteger(vm, static_cast<SQInteger>(static_cast<uint64_t>(value)));
}
};
}
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Wrapper around a std::vector of DPP values.
*/
template < class T, class W > struct DpVectorProxy
{
using Ptr = std::unique_ptr< std::vector< T > >;
using Vec = std::vector< std::pair< LightObj, W * > >;
/* --------------------------------------------------------------------------------------------
* Referenced vector instance.
*/
Ptr mPtr{nullptr};
/* --------------------------------------------------------------------------------------------
* Cached script objects vector.
*/
Vec mVec{};
/* --------------------------------------------------------------------------------------------
* Whether the referenced pointer is owned.
*/
bool mOwned{false};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
DpVectorProxy() noexcept = default;
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpVectorProxy(typename Ptr::pointer ptr, bool owned = false)
: mPtr(ptr), mVec(), mOwned(owned)
{ if (mPtr) mVec.resize(mPtr->size()); }
/* --------------------------------------------------------------------------------------------
* Explicit constructor.
*/
explicit DpVectorProxy(const typename Ptr::element_type & o) noexcept
: DpVectorProxy(new typename Ptr::element_type(o), true)
{ }
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
explicit DpVectorProxy(typename Ptr::element_type && o) noexcept
: DpVectorProxy(new typename Ptr::element_type(std::forward< Ptr::element_type >(o)), true)
{ }
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
DpVectorProxy(const DpVectorProxy & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor.
*/
DpVectorProxy(DpVectorProxy && o) noexcept = default;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~DpVectorProxy() noexcept { Cleanup(); }
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
DpVectorProxy & operator = (const DpVectorProxy & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator.
*/
DpVectorProxy & operator = (DpVectorProxy && o) noexcept
{
if (this != &o) {
Cleanup();
// Transfer members values
mPtr = std::move(o.mPtr);
mVec = std::move(o.mVec);
mOwned = o.mOwned;
}
return *this;
}
/* --------------------------------------------------------------------------------------------
* Release any referenced resources and default to an empty/invalid state.
*/
void Cleanup()
{
// Invalidate cached instances
ClearCache();
// Do we own this to try delete it?
if (!mOwned && mPtr) {
// Not our job, simply forget about it
[[maybe_unused]] auto p = mPtr.release();
} else mPtr.reset(); // We own this so delete the instance
}
/* --------------------------------------------------------------------------------------------
* Validate the managed handle.
*/
void Validate() const { if (!mPtr) STHROWF("Invalid discord vector handle"); }
/* --------------------------------------------------------------------------------------------
* Validate the managed handle and retrieve a const reference to it.
*/
SQMOD_NODISCARD typename Ptr::element_type & Valid() const { Validate(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check whether a valid instance is managed.
*/
SQMOD_NODISCARD bool IsValid() const { return static_cast< bool >(mPtr); }
/* --------------------------------------------------------------------------------------------
* Make sure an index is within range and return the container. Container must exist.
*/
void ValidIdx_(SQInteger i)
{
if (static_cast< size_t >(i) >= Valid().size())
{
STHROWF("Invalid vector container index({})", i);
}
}
typename Ptr::element_type & ValidIdx(SQInteger i) { ValidIdx_(i); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Make sure an index is within range and return the container. Container must exist.
*/
void ValidIdx_(SQInteger i) const
{
if (static_cast< size_t >(i) >= Valid().size())
{
STHROWF("Invalid vector container index({})", i);
}
}
const typename Ptr::element_type & ValidIdx(SQInteger i) const { ValidIdx_(i); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Make sure a container instance is referenced and is populated, then return it.
*/
void ValidPop_()
{
if (Valid().empty())
{
STHROWF("Vector container is empty");
}
}
typename Ptr::element_type & ValidPop() { ValidPop_(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Make sure a container instance is referenced and is populated, then return it.
*/
void ValidPop_() const
{
if (Valid().empty())
{
STHROWF("Vector container is empty");
}
}
const typename Ptr::element_type & ValidPop() const { ValidPop_(); return *mPtr; }
/* --------------------------------------------------------------------------------------------
* Check if a container instance is referenced.
*/
SQMOD_NODISCARD bool IsNull() const { return !mPtr; }
/* --------------------------------------------------------------------------------------------
* Retrieve a value from the container.
*/
SQMOD_NODISCARD LightObj & Get_(SQInteger i)
{
// Is the element cached?
if (mVec[static_cast< size_t >(i)].first.IsNull())
{
mVec[static_cast< size_t >(i)] = Obj(&mPtr->at(static_cast< size_t >(i)));
}
// Return the object from the cache
return mVec[static_cast< size_t >(i)].first;
}
SQMOD_NODISCARD LightObj & Get(SQInteger i)
{
// Was the referenced vector modified?
if (mVec.size() < Valid().size())
{
// Synchronize the size
mVec.resize(mPtr->size());
// Synchronize the cache
CacheSync();
}
// Validate index
ValidIdx_(i);
// Perform the request
return Get_(i);
}
/* --------------------------------------------------------------------------------------------
* Modify a value from the container.
*/
void Set(SQInteger i, const W & v) { ValidIdx(i)[static_cast< size_t >(i)] = v.Valid(); }
/* --------------------------------------------------------------------------------------------
* Check if the container has no elements.
*/
SQMOD_NODISCARD bool Empty() const { return Valid().empty(); }
/* --------------------------------------------------------------------------------------------
* Retrieve the number of elements in the container.
*/
SQMOD_NODISCARD SQInteger Size() const { return static_cast< SQInteger >(Valid().size()); }
/* --------------------------------------------------------------------------------------------
* Retrieve the number of elements that the container has currently allocated space for.
*/
SQMOD_NODISCARD SQInteger Capacity() const { return static_cast< SQInteger >(Valid().capacity()); }
/* --------------------------------------------------------------------------------------------
* Synchronize cache container instances.
*/
void CacheSync()
{
// Invalidate cached instances, if any
for (size_t i = 0; i < mVec.size(); ++i)
{
// Is this element cached?
if (mVec[i].second != nullptr)
{
// Discard previous instance, if any
[[maybe_unused]] auto _ = mVec[i].second->mPtr.release();
// Sync to new instance
mVec[i].second->mPtr.reset(&mPtr->at(i));
}
}
}
/* --------------------------------------------------------------------------------------------
* Increase the capacity of the container to a value that's greater or equal to the one specified.
*/
DpVectorProxy & Reserve(SQInteger n)
{
Valid().reserve(ClampL< SQInteger, size_t >(n));
mVec.reserve(mPtr->size());
CacheSync();
return *this;
}
/* --------------------------------------------------------------------------------------------
* Request the removal of unused capacity.
*/
void Compact() { Valid().shrink_to_fit(); CacheSync(); mVec.shrink_to_fit(); }
/* --------------------------------------------------------------------------------------------
* Erase all elements from the cache container.
*/
void ClearCache()
{
// Invalidate cached instances, if any
for (auto & e : mVec)
{
// Is this element cached?
if (e.second != nullptr)
{
// Invalidate the instance
e.second->Cleanup();
// Forget about it
e.second = nullptr;
// Release script object
e.first.Release();
}
}
// Clear the cache vector
mVec.clear();
}
/* --------------------------------------------------------------------------------------------
* Erase all elements from the container.
*/
void Clear() { Validate(); ClearCache(); mPtr->clear(); }
/* --------------------------------------------------------------------------------------------
* Push a value at the back of the container.
*/
void Push(const W & v)
{
Valid().push_back(v.Valid());
mVec.emplace_back();
CacheSync();
}
/* --------------------------------------------------------------------------------------------
* Extends the Container by appending all the items in the given container.
*/
void Extend(DpVectorProxy & v)
{
Valid().insert(Valid().end(), v.Valid().begin(), v.Valid().end());
mVec.resize(mPtr->size());
CacheSync();
}
/* --------------------------------------------------------------------------------------------
* Pop the last element in the container.
*/
void Pop()
{
Validate();
// Is this element cached?
if (mVec.back().second != nullptr)
{
// Invalidate the instance
mVec.back().second->Cleanup();
mVec.back().first.Release();
}
// Safe to remove
mPtr->pop_back();
mVec.pop_back();
}
/* --------------------------------------------------------------------------------------------
* Erase the element at a certain position.
*/
void EraseAt(SQInteger i)
{
ValidIdx_(i);
// Is this element cached?
if (mVec[static_cast< size_t >(i)].second != nullptr)
{
// Invalidate the instance
mVec[static_cast< size_t >(i)].second->Cleanup();
mVec[static_cast< size_t >(i)].first.Release();
}
// Safe to remove
mPtr->erase(mPtr->begin() + static_cast< size_t >(i));
mVec.erase(mVec.begin() + static_cast< size_t >(i));
// Synchronize cache
CacheSync();
}
/* --------------------------------------------------------------------------------------------
* Iterate all values through a functor.
*/
void Each(Function & fn)
{
Validate();
// Iterate referenced vector elements
for (size_t i = 0; i < mVec.size(); ++i)
{
fn.Execute(Get(static_cast< SQInteger >(i)));
}
}
/* --------------------------------------------------------------------------------------------
* Iterate values in range through a functor.
*/
void EachRange(SQInteger p, SQInteger n, Function & fn)
{
ValidIdx_(p);
ValidIdx_(p + n);
// Iterate specified range
for (n += p; p < n; ++p)
{
fn.Execute(Get(static_cast< SQInteger >(p)));
}
}
/* --------------------------------------------------------------------------------------------
* Iterate all values through a functor until stopped (i.e false is returned).
*/
void While(Function & fn)
{
Validate();
// Iterate referenced vector elements
for (size_t i = 0; i < mVec.size(); ++i)
{
auto ret = fn.Eval(Get(static_cast< SQInteger >(i)));
// (null || true) == continue & false == break
if (!ret.IsNull() || !ret.template Cast< bool >())
{
break;
}
}
}
/* --------------------------------------------------------------------------------------------
* Iterate values in range through a functor until stopped (i.e false is returned).
*/
void WhileRange(SQInteger p, SQInteger n, Function & fn)
{
ValidIdx_(p);
ValidIdx_(p + n);
// Iterate specified range
for (n += p; p < n; ++p)
{
auto ret = fn.Eval(Get(static_cast< SQInteger >(p)));
// (null || true) == continue & false == break
if (!ret.IsNull() || !ret.template Cast< bool >())
{
break;
}
}
}
/* --------------------------------------------------------------------------------------------
* Retrieve a wrapped instance as a script object.
*/
SQMOD_NODISCARD static std::pair< LightObj, W * > Obj(T * ptr, bool owned = false)
{
// Create the wrapper instance for given pointer
auto wp = std::make_unique< W >(ptr, false);
// Create script object for wrapper instance
std::pair< LightObj, W * > p{LightObj{wp.get()}, wp.get()};
// Release ownership of the wrapper instance
[[maybe_unused]] auto _ = wp.release();
// Return the script object and wrapper instance
return p;
}
/* --------------------------------------------------------------------------------------------
* Retrieve a wrapped instance as a script object.
*/
SQMOD_NODISCARD static std::pair< LightObj, W * > Obj(const T * ptr, bool owned = false)
{
return Obj(const_cast< T * >(ptr), owned);
}
};
template < class T, class W, class U > inline void Register_Discord_VectorProxy(HSQUIRRELVM vm, Table & ns, const SQChar * name)
{
using Container = DpVectorProxy< T, W >;
// --------------------------------------------------------------------------------------------
ns.Bind(name,
Class< Container, NoConstructor< Container > >(vm, U::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &U::Fn)
// Properties
.Prop(_SC("Null"), &Container::IsNull)
.Prop(_SC("Empty"), &Container::Empty)
.Prop(_SC("Size"), &Container::Size)
.Prop(_SC("Capacity"), &Container::Capacity, &Container::Reserve)
// Member Methods
.Func(_SC("Get"), &Container::Get)
.Func(_SC("Set"), &Container::Set)
.Func(_SC("Reserve"), &Container::Reserve)
.Func(_SC("Compact"), &Container::Compact)
.Func(_SC("Clear"), &Container::Clear)
.Func(_SC("Push"), &Container::Push)
.Func(_SC("Append"), &Container::Push)
.Func(_SC("Extend"), &Container::Extend)
.Func(_SC("Pop"), &Container::Pop)
.Func(_SC("EraseAt"), &Container::EraseAt)
.Func(_SC("Each"), &Container::Each)
.Func(_SC("EachRange"), &Container::EachRange)
.Func(_SC("While"), &Container::While)
.Func(_SC("WhileRange"), &Container::WhileRange)
);
}
} // Namespace:: SqMod

View File

@ -88,6 +88,7 @@ static SQInteger SqExtractIPv4(HSQUIRRELVM vm)
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
extern void Register_IdPool(HSQUIRRELVM vm, Table & ns); extern void Register_IdPool(HSQUIRRELVM vm, Table & ns);
extern void Register_Vector(HSQUIRRELVM vm, Table & ns); extern void Register_Vector(HSQUIRRELVM vm, Table & ns);
extern void Register_Template(HSQUIRRELVM vm, Table & ns);
extern void Register_Native_String(HSQUIRRELVM vm, Table & ns); extern void Register_Native_String(HSQUIRRELVM vm, Table & ns);
extern void Register_ServerAnnouncer(HSQUIRRELVM vm, Table & ns); extern void Register_ServerAnnouncer(HSQUIRRELVM vm, Table & ns);
@ -99,6 +100,7 @@ void Register_Utils(HSQUIRRELVM vm)
Register_IdPool(vm, ns); Register_IdPool(vm, ns);
Register_Vector(vm, ns); Register_Vector(vm, ns);
Register_Template(vm, ns);
Register_Native_String(vm, ns); Register_Native_String(vm, ns);
Register_ServerAnnouncer(vm, ns); Register_ServerAnnouncer(vm, ns);
@ -110,7 +112,6 @@ void Register_Utils(HSQUIRRELVM vm)
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void Register_IdPool(HSQUIRRELVM vm, Table & ns) void Register_IdPool(HSQUIRRELVM vm, Table & ns)
{ {
// --------------------------------------------------------------------------------------------
ns.Bind(_SC("IdPool"), ns.Bind(_SC("IdPool"),
Class< SqIdPool, NoCopy< SqIdPool > >(vm, SqIdPoolTypename::Str) Class< SqIdPool, NoCopy< SqIdPool > >(vm, SqIdPoolTypename::Str)
// Constructors // Constructors

View File

@ -24,6 +24,9 @@ extern void ProcessRoutines();
extern void ProcessTasks(); extern void ProcessTasks();
extern void ProcessThreads(); extern void ProcessThreads();
extern void ProcessNet(); extern void ProcessNet();
#ifdef SQMOD_DISCORD
extern void ProcessDiscord();
#endif
/* ------------------------------------------------------------------------------------------------ /* ------------------------------------------------------------------------------------------------
* Will the scripts be reloaded at the end of the current event? * Will the scripts be reloaded at the end of the current event?
@ -172,6 +175,10 @@ static void OnServerFrame(float elapsed_time)
ProcessThreads(); ProcessThreads();
// Process network // Process network
ProcessNet(); ProcessNet();
// Process Discord
#ifdef SQMOD_DISCORD
ProcessDiscord();
#endif
// Process log messages from other threads // Process log messages from other threads
Logger::Get().ProcessQueue(); Logger::Get().ProcessQueue();
// See if a reload was requested // See if a reload was requested

View File

@ -30,6 +30,9 @@ extern void Register_CVehicle(HSQUIRRELVM vm);
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
extern void Register_Chrono(HSQUIRRELVM vm); extern void Register_Chrono(HSQUIRRELVM vm);
extern void Register_CURL(HSQUIRRELVM vm); extern void Register_CURL(HSQUIRRELVM vm);
#ifdef SQMOD_DISCORD
extern void Register_Discord(HSQUIRRELVM vm);
#endif
extern void Register_Format(HSQUIRRELVM vm); extern void Register_Format(HSQUIRRELVM vm);
extern void Register_IO(HSQUIRRELVM vm); extern void Register_IO(HSQUIRRELVM vm);
extern void Register_JSON(HSQUIRRELVM vm); extern void Register_JSON(HSQUIRRELVM vm);
@ -98,6 +101,9 @@ bool RegisterAPI(HSQUIRRELVM vm)
Register_Chrono(vm); Register_Chrono(vm);
Register_CURL(vm); Register_CURL(vm);
#ifdef SQMOD_DISCORD
Register_Discord(vm);
#endif
Register_Format(vm); Register_Format(vm);
Register_IO(vm); Register_IO(vm);
Register_JSON(vm); Register_JSON(vm);

25
vendor/CMakeLists.txt vendored
View File

@ -8,6 +8,8 @@ add_subdirectory(TinyDir)
add_subdirectory(SAJSON) add_subdirectory(SAJSON)
add_subdirectory(CPR) add_subdirectory(CPR)
add_subdirectory(UTF8) add_subdirectory(UTF8)
add_subdirectory(JSON)
add_subdirectory(Inja)
add_subdirectory(PUGIXML) add_subdirectory(PUGIXML)
add_subdirectory(CivetWeb) add_subdirectory(CivetWeb)
if (ENABLE_BUILTIN_MYSQL_C) if (ENABLE_BUILTIN_MYSQL_C)
@ -71,3 +73,26 @@ if (WIN32 OR MINGW)
set(ZMQ_HAVE_IPC OFF CACHE INTERNAL "" FORCE) set(ZMQ_HAVE_IPC OFF CACHE INTERNAL "" FORCE)
endif() endif()
add_subdirectory(ZMQ) add_subdirectory(ZMQ)
if(ENABLE_DISCORD)
set(BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
set(BUILD_VOICE_SUPPORT OFF CACHE INTERNAL "" FORCE)
set(DPP_INSTALL OFF CACHE INTERNAL "" FORCE)
set(DPP_BUILD_TEST OFF CACHE INTERNAL "" FORCE)
set(DPP_NO_VCPKG ON CACHE INTERNAL "" FORCE)
set(DPP_CORO OFF CACHE INTERNAL "" FORCE)
set(DPP_USE_EXTERNAL_JSON ON CACHE INTERNAL "" FORCE)
if (WIN32 OR MINGW)
set(BUILD_SHARED_LIBS ON CACHE INTERNAL "" FORCE)
endif()
add_subdirectory(DPP)
target_link_libraries(dpp PRIVATE nlohmann_json)
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE)
# We don't care about DPP warnings
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
target_compile_options(dpp PRIVATE -w)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
target_compile_options(dpp PRIVATE -w)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
target_compile_options(dpp PRIVATE /w)
endif()
endif()