Initial commit

This commit is contained in:
2025-04-15 22:27:20 -04:00
parent 5b7b68f81f
commit 771d8fe8e8
597 changed files with 149544 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
methodmap DiscordGuildUser < Handle {
//Returns User Object
public DiscordUser GetUser() {
return view_as<DiscordUser>(json_object_get(this, "user"));
}
//Returns player's nick
public void GetNickname(char[] buffer, int maxlength) {
JsonObjectGetString(this, "nick", buffer, maxlength);
}
//Returns JSON array list of roles. You can manually loop through them for now.
public Handle GetRoles() {
return json_object_get(this, "roles");
}
//Returns the date the user joined the guild in format: "2015-04-26T06:26:56.936000+00:00"
public void GetJoinedAt(char[] buffer, int maxlength) {
JsonObjectGetString(this, "joined_at", buffer, maxlength);
}
public bool IsDeaf() {
return JsonObjectGetBool(this, "deaf");
}
public bool IsMute() {
return JsonObjectGetBool(this, "mute");
}
}

View File

@@ -0,0 +1,231 @@
methodmap DiscordBot < StringMap {
public DiscordBot(const char[] token) {
Handle json = json_object();
json_object_set_new(json, "token", json_string(token));
return view_as<DiscordBot>(json);
}
public void StopListening() {
json_object_del(this, "listeningChannels");
}
property float MessageCheckInterval {
public get() {
return JsonObjectGetFloat(this, "messageInterval", 3.0);
}
public set(float value) {
json_object_set_new(this, "messageInterval", json_real(value));
}
}
public native void StartTimer(DiscordChannel Channel, OnChannelMessage fCallback);
/**
* Retrieves a list of Channels the bot is listening to for messages
*/
public Handle GetListeningChannels() {
return json_object_get(this, "listeningChannels");
}
/**
* Checks if the bot is listening to channel for messages
* @param DiscordChannel Channel
*/
public bool IsListeningToChannel(DiscordChannel Channel) {
char id[32];
Channel.GetID(id, sizeof(id));
Handle hChannels = this.GetListeningChannels();
if(hChannels == null) return false;
for(int i = 0; i < json_array_size(hChannels); i++) {
DiscordChannel tempChannel = view_as<DiscordChannel>(json_array_get(hChannels, i));
static char tempID[32];
tempChannel.GetID(tempID, sizeof(tempID));
if(StrEqual(id, tempID, false)) {
delete tempChannel;
delete hChannels;
return true;
}
delete tempChannel;
}
delete hChannels;
return false;
}
/**
* Checks if the bot is listening to channel for messages
* @param DiscordChannel Channel
*/
public bool IsListeningToChannelID(char[] id) {
Handle hChannels = this.GetListeningChannels();
if(hChannels == null) return false;
for(int i = 0; i < json_array_size(hChannels); i++) {
DiscordChannel tempChannel = view_as<DiscordChannel>(json_array_get(hChannels, i));
static char tempID[32];
tempChannel.GetID(tempID, sizeof(tempID));
if(StrEqual(id, tempID, false)) {
delete tempChannel;
delete hChannels;
return true;
}
delete tempChannel;
}
delete hChannels;
return false;
}
/**
* Stops the bot from listening to that channel for messages
* @param DiscordChannel Channel
*/
public void StopListeningToChannel(DiscordChannel Channel) {
char id[32];
Channel.GetID(id, sizeof(id));
Handle channels = this.GetListeningChannels();
if(channels == null) return;
for(int i = 0; i < json_array_size(channels); i++) {
DiscordChannel tempChannel = view_as<DiscordChannel>(json_array_get(channels, i));
static char tempID[32];
tempChannel.GetID(tempID, sizeof(tempID));
if(StrEqual(id, tempID, false)) {
json_array_remove(channels, i);
i--;
delete tempChannel;
}
}
delete channels;
}
/**
* Stops the bot from listening to that channel id for messages
* @param DiscordChannel Channel
*/
public void StopListeningToChannelID(char[] id) {
Handle channels = this.GetListeningChannels();
if(channels == null) return;
for(int i = 0; i < json_array_size(channels); i++) {
DiscordChannel tempChannel = view_as<DiscordChannel>(json_array_get(channels, i));
static char tempID[32];
tempChannel.GetID(tempID, sizeof(tempID));
if(StrEqual(id, tempID, false)) {
json_array_remove(channels, i);
i--;
delete tempChannel;
}
}
delete channels;
}
public DiscordChannel GetListeningChannelByID(char[] id) {
Handle channels = this.GetListeningChannels();
if(channels == null) return null;
for(int i = 0; i < json_array_size(channels); i++) {
DiscordChannel tempChannel = view_as<DiscordChannel>(json_array_get(channels, i));
static char tempID[32];
tempChannel.GetID(tempID, sizeof(tempID));
if(StrEqual(id, tempID, false)) {
delete channels;
return tempChannel;
}
}
delete channels;
return null;
}
/**
* Start listening to the channel for messages.
* The Channel handle is duplicated. Feel free to close yours.
* @param DiscordChannel Channel
*/
public void StartListeningToChannel(DiscordChannel Channel, OnChannelMessage fCallback) {
if(this.IsListeningToChannel(Channel)) return;
Handle channels = this.GetListeningChannels();
if(channels == null) {
channels = json_array();
json_object_set(this, "listeningChannels", channels);
}
json_array_append(channels, Channel);
//Handle fForward = CreateForward(ET_Ignore, Param_Cell, Param_Cell, Param_String, Param_String, Param_String, Param_String, Param_String, Param_Cell);
//AddToForward(fForward, GetMyHandle(), callback);
this.StartTimer(Channel, fCallback);
}
public native void AddReactionID(char[] channel, char[] messageid, char[] emoji);
public void AddReaction(DiscordChannel channel, char[] messageid, char[] emoji) {
char channelid[64];
channel.GetID(channelid, sizeof(channelid));
this.AddReactionID(channelid, messageid, emoji);
}
public native void DeleteReactionID(char[] channel, char[] messageid, char[] emoji, char[] user);
public void DeleteReaction(DiscordChannel channel, char[] messageid, char[] emoji, char[] user) {
char chid[64];
channel.GetID(chid, sizeof(chid));
this.DeleteReactionID(chid, messageid, emoji, user);
}
public void DeleteReactionSelf(DiscordChannel channel, char[] messageid, char[] emoji) {
this.DeleteReaction(channel, messageid, emoji, "@me");
}
public void DeleteReactionAll(DiscordChannel channel, char[] messageid, char[] emoji) {
this.DeleteReaction(channel, messageid, emoji, "@all");
}
public void DeleteReactionSelfID(char[] channel, char[] messageid, char[] emoji) {
this.DeleteReactionID(channel, messageid, emoji, "@me");
}
public void DeleteReactionAllID(char[] channel, char[] messageid, char[] emoji) {
this.DeleteReactionID(channel, messageid, emoji, "@all");
}
public native void GetReactionID(char[] channel, char[] messageid, char[] emoji, OnGetReactions fCallback=INVALID_FUNCTION, any data=0);
public void GetReaction(DiscordChannel channel, char[] messageid, char[] emoji, OnGetReactions fCallback=INVALID_FUNCTION, any data=0) {
char id[64];
channel.GetID(id, sizeof(id));
this.GetReactionID(id, messageid, emoji, fCallback, data);
}
public native void GetToken(char[] token, int maxlength);
public native void SendMessage(DiscordChannel channel, char[] message, OnMessageSent fCallback=INVALID_FUNCTION, any data=0);
public native void SendMessageToChannelID(char[] channel, char[] message, OnMessageSent fCallback=INVALID_FUNCTION, any data=0);
public native void DeleteMessageID(char[] channel, char[] message, OnMessageDeleted fCallback=INVALID_FUNCTION, any data=0);
public native void DeleteMessage(DiscordChannel channel, DiscordMessage message, OnMessageDeleted fCallback=INVALID_FUNCTION, any data=0);
public native void GetGuilds(DiscordGuildsRetrieve fCallback = INVALID_FUNCTION, DiscordGuildsRetrievedAll fCallbackAll = INVALID_FUNCTION, any data=0);
public native void GetGuildChannels(char[] guild, DiscordGuildChannelsRetrieve fCallback = INVALID_FUNCTION, DiscordGuildChannelsRetrieveAll fCallbackAll = INVALID_FUNCTION, any data=0);
/**
* ATM takes guild id, hopefully later on i will implement guild objects.
* Limit is from 1-1000
*/
public native void GetGuildMembers(char[] guild, OnGetMembers fCallback, int limit=250, char[] afterUserID="");
/**
* Same as above but displays ALL members, paginating automatically.
* perPage is how many it should display per callback. 1-1000
*/
public native void GetGuildMembersAll(char[] guild, OnGetMembers fCallback, int perPage=250, char[] afterUserID="");
public native void GetGuildRoles(char[] guild, DiscordGuildGetRoles fCallback, any data);
}

View File

@@ -0,0 +1,69 @@
methodmap DiscordChannel < StringMap {
public DiscordChannel() {
Handle hObj = json_object();
return view_as<DiscordChannel>(hObj);
}
public native void SendMessage(DiscordBot Bot, char[] message, OnMessageSent fCallback=INVALID_FUNCTION, any data=0);
public void GetGuildID(char[] buffer, int maxlength) {
JsonObjectGetString(this, "guild_id", buffer, maxlength);
}
public void GetID(char[] buffer, int maxlength) {
JsonObjectGetString(this, "id", buffer, maxlength);
}
public void GetName(char[] buffer, int maxlength) {
JsonObjectGetString(this, "name", buffer, maxlength);
}
public void GetType(char[] buffer, int maxlength) {
JsonObjectGetString(this, "type", buffer, maxlength);
}
property int Position {
public get() {
return JsonObjectGetInt(this, "position");
}
}
property bool IsPrivate {
public get() {
return JsonObjectGetBool(this, "is_private");
}
}
public void GetTopic(char[] buffer, int maxlength) {
JsonObjectGetString(this, "topic", buffer, maxlength);
}
public void GetLastMessageID(char[] buffer, int maxlength) {
JsonObjectGetString(this, "last_message_id", buffer, maxlength);
}
public void SetLastMessageID(char[] id) {
json_object_set_new(this, "last_message_id", json_string(id));
}
property int Bitrate {
public get() {
return JsonObjectGetInt(this, "bitrate");
}
}
property int UserLimit {
public get() {
return JsonObjectGetInt(this, "user_limit");
}
}
property bool IsText {
public get() {
char type[8];
this.GetType(type, sizeof(type));
if(StrEqual(type, "text", false)) return true;
return false;
}
}
}

View File

@@ -0,0 +1,128 @@
methodmap MessageEmbed < Handle {
public MessageEmbed() {
Handle hObj = json_object();
return view_as<MessageEmbed>(hObj);
}
public bool GetColor(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "color", buffer, maxlength);
}
public void SetColor(char[] color) {
json_object_set_new(this, "color", json_string(color));
}
public bool GetTitle(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "title", buffer, maxlength);
}
public void SetTitle(char[] title) {
json_object_set_new(this, "title", json_string(title));
}
public bool GetTitleLink(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "title_link", buffer, maxlength);
}
public void SetImageLink(char[] title_link) {
json_object_set_new(this, "title_link", json_string(title_link));
}
public bool GetImage(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "image_url", buffer, maxlength);
}
public void SetImage(char[] image_url) {
json_object_set_new(this, "image_url", json_string(image_url));
}
public bool GetAuthor(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "author_name", buffer, maxlength);
}
public void SetAuthor(char[] author_name) {
json_object_set_new(this, "author_name", json_string(author_name));
}
public bool GetAuthorLink(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "author_link", buffer, maxlength);
}
public void SetAuthorLink(char[] author_link) {
json_object_set_new(this, "author_link", json_string(author_link));
}
public bool GetAuthorIcon(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "author_icon", buffer, maxlength);
}
public void SetAuthorIcon(char[] author_icon) {
json_object_set_new(this, "author_icon", json_string(author_icon));
}
public bool GetThumb(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "thumb_url", buffer, maxlength);
}
public void SetThumb(char[] thumb_url) {
json_object_set_new(this, "thumb_url", json_string(thumb_url));
}
public bool GetFooter(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "footer", buffer, maxlength);
}
public void SetFooter(char[] footer) {
json_object_set_new(this, "footer", json_string(footer));
}
public bool GetFooterIcon(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "footer_icon", buffer, maxlength);
}
public void SetFooterIcon(char[] footer_icon) {
json_object_set_new(this, "footer_icon", json_string(footer_icon));
}
/**
* Note: Setting Fields will delete the handle!
*/
property Handle Fields {
public get() {
return json_object_get(this, "fields");
}
public set(Handle value) {
json_object_set_new(this, "fields", value);
}
}
public void AddField(char[] name, char[] value, bool inline) {
Handle hObj = json_object();
json_object_set_new(hObj, "name", json_string(name));
json_object_set_new(hObj, "value", json_string(value));
json_object_set_new(hObj, "inline", json_boolean(inline));
Handle hArray = this.Fields;
if(this.Fields == null) {
hArray = json_array();
}
json_array_append_new(hArray, hObj);
this.Fields = hArray;
}
//Below don't support Slack Mode
public bool GetDescription(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "description", buffer, maxlength);
}
public void SetDescription(char[] description) {
json_object_set_new(this, "description", json_string(description));
}
public bool GetURL(char[] buffer, int maxlength) {
return JsonObjectGetString(this, "url", buffer, maxlength);
}
public void SetURL(char[] url) {
json_object_set_new(this, "url", json_string(url));
}
}

View File

@@ -0,0 +1,82 @@
stock int JsonObjectGetInt(Handle hElement, char[] key) {
Handle hObject = json_object_get(hElement, key);
if(hObject == INVALID_HANDLE) return 0;
int value;
if(json_is_integer(hObject)) {
value = json_integer_value(hObject);
}else if(json_is_string(hObject)) {
char buffer[12];
json_string_value(hObject, buffer, sizeof(buffer));
value = StringToInt(buffer);
}
CloseHandle(hObject);
return value;
}
stock bool JsonObjectGetString(Handle hElement, char[] key, char[] buffer, maxlength) {
Handle hObject = json_object_get(hElement, key);
if(hObject == INVALID_HANDLE) return false;
if(json_is_integer(hObject)) {
IntToString(json_integer_value(hObject), buffer, maxlength);
}else if(json_is_string(hObject)) {
json_string_value(hObject, buffer, maxlength);
}else if(json_is_real(hObject)) {
FloatToString(json_real_value(hObject), buffer, maxlength);
}else if(json_is_true(hObject)) {
FormatEx(buffer, maxlength, "true");
}else if(json_is_false(hObject)) {
FormatEx(buffer, maxlength, "false");
}
CloseHandle(hObject);
return true;
}
stock bool JsonObjectGetBool(Handle hElement, char[] key, bool defaultvalue=false) {
Handle hObject = json_object_get(hElement, key);
if(hObject == INVALID_HANDLE) return defaultvalue;
bool ObjectBool = defaultvalue;
if(json_is_integer(hObject)) {
ObjectBool = view_as<bool>(json_integer_value(hObject));
}else if(json_is_string(hObject)) {
char buffer[11];
json_string_value(hObject, buffer, sizeof(buffer));
if(StrEqual(buffer, "true", false)) {
ObjectBool = true;
}else if(StrEqual(buffer, "false", false)) {
ObjectBool = false;
}else {
int x = StringToInt(buffer);
ObjectBool = view_as<bool>(x);
}
}else if(json_is_real(hObject)) {
ObjectBool = view_as<bool>(RoundToFloor(json_real_value(hObject)));
}else if(json_is_true(hObject)) {
ObjectBool = true;
}else if(json_is_false(hObject)) {
ObjectBool = false;
}
CloseHandle(hObject);
return ObjectBool;
}
stock float JsonObjectGetFloat(Handle hJson, char[] key, float defaultValue=0.0) {
Handle hObject = json_object_get(hJson, key);
if(hObject == INVALID_HANDLE) return defaultValue;
float value = defaultValue;
if(json_is_integer(hObject)) {
value = float(json_integer_value(hObject));
}else if(json_is_real(hObject)) {
value = json_real_value(hObject);
}else if(json_is_string(hObject)) {
char buffer[12];
json_string_value(hObject, buffer, sizeof(buffer));
value = StringToFloat(buffer);
}
CloseHandle(hObject);
return value;
}

View File

@@ -0,0 +1,142 @@
methodmap DiscordWebHook < Handle {
public DiscordWebHook(char[] url) {
Handle mp = json_object();
json_object_set_new(mp, "__url", json_string(url));
Handle data = json_object();
json_object_set_new(mp, "__data", data);
return view_as<DiscordWebHook>(mp);
}
public void GetUrl(char[] buffer, int maxlength) {
JsonObjectGetString(this, "__url", buffer, maxlength);
}
/**
* Gets/Sets if the hook should be sent as Slack.
* Note: color is different for slack than discord msg.
*
* @return True if Slack, otherwise false.
*/
property bool SlackMode {
public get() {
return JsonObjectGetBool(this, "__slack", false);
}
public set(bool value) {
json_object_set_new(this, "__slack", (value) ? json_true() : json_false());
}
}
property Handle Data {
public get() {
return json_object_get(this, "__data");
}
public set(Handle value) {
json_object_set_new(this, "__data", value);
}
}
public void UpdateDataObject(char[] key, Handle hObject) {
Handle data = this.Data;
json_object_set_new(data, key, hObject);
delete data;
}
public bool GetDataBool(char[] key, bool defaultValue=false) {
Handle data = this.Data;
bool value = JsonObjectGetBool(data, key, defaultValue);
delete data;
return value;
}
public bool GetDataString(char[] key, char[] buffer, int maxlength) {
Handle data = this.Data;
bool success = JsonObjectGetString(data, key, buffer, maxlength);
delete data;
return success;
}
/**
* Note: Deletes the MessageEmbed Object!
*/
public void Embed(MessageEmbed Object) {
//this.UpdateDataObject("embeds", Object);
Handle data = this.Data;
Handle hArray = json_object_get(data, "embeds");
if(hArray == null) {
hArray = json_array();
json_object_set(data, "embeds", hArray);
}
json_array_append_new(hArray, Object);
delete hArray;
delete data;
}
property bool tts {
public get() {
return this.GetDataBool("tts", false);
}
public set(bool value) {
this.UpdateDataObject("tts", json_boolean(value));
}
}
public bool GetUsername(char[] buffer, int maxlength) {
return this.GetDataString("username", buffer, maxlength);
}
public void SetUsername(char[] name) {
this.UpdateDataObject("username", json_string(name));
}
public bool GetAvatar(char[] buffer, int maxlength) {
return this.GetDataString("icon_url", buffer, maxlength);
}
public void SetAvatar(char[] icon_url) {
this.UpdateDataObject("icon_url", json_string(icon_url));
}
public bool GetContent(char[] buffer, int maxlength) {
return this.GetDataString("content", buffer, maxlength);
}
public void SetContent(char[] content) {
this.UpdateDataObject("content", json_string(content));
}
/*property Handle OnComplete {
public get() {
Handle fForward = null;
if(!GetTrieValue(this, "callback", fForward)) {
return null;
}
return fForward;
}
public set(Handle value) {
SetTrieValue(this, "callback", value);
SetTrieValue(this, "plugin", GetMyHandle());
}
}
property Handle CallbackPlugin {
public get() {
Handle value = null;
if(!GetTrieValue(this, "plugin", value)) {
return null;
}
return value;
}
}*/
public native void Send();
}