Bug-Report/scripting/include/discord.inc
2023-12-17 01:33:47 +01:00

186 lines
No EOL
5.8 KiB
SourcePawn

#if defined _discord_included
#endinput
#endif
#define _discord_included
#include <smjansson>
#include <discord/stocks>
typedef DiscordGuildsRetrieve = function void (DiscordBot bot, char[] id, char[] name, char[] icon, bool owner, int permissions, any data);
typedef DiscordGuildsRetrievedAll = function void (DiscordBot bot, ArrayList id, ArrayList name, ArrayList icon, ArrayList owner, ArrayList permissions, any data);
//Channel are Handles that are closed immediately after forwards called. To keep, clone. Or store id if thats what you want
typedef DiscordGuildChannelsRetrieve = function void (DiscordBot bot, char[] guild, DiscordChannel Channel, any data);
typedef DiscordGuildChannelsRetrieveAll = function void (DiscordBot bot, char[] guild, ArrayList Channels, any data);
typedef DiscordGuildGetRoles = function void (DiscordBot bot, char[] guild, RoleList Roles, any data);
/**
* Called when message is received
* bot/channel/message are all destroyed after callback is sent.
* You can clone it if need to keep.
*/
typeset OnChannelMessage {
function void(DiscordBot bot, DiscordChannel channel, DiscordMessage message);
};
typedef OnGetReactions = function void (DiscordBot bot, ArrayList Users, char[] channelID, const char[] messageID, const char[] emoji, any data);
typedef OnMessageSent = function void(DiscordBot bot, char[] channel, DiscordMessage message, any data);
typedef OnMessageDeleted = function void(DiscordBot bot, any data);
//hMemberList is JSON array containing guild members
typedef OnGetMembers = function void(DiscordBot bot, char[] guild, Handle hMemberList);
methodmap Role < Handle {
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 int GetColor() {
return JsonObjectGetInt(this, "color");
}
public int GetPosition() {
return JsonObjectGetInt(this, "position");
}
public int GetPermissions() {
return JsonObjectGetInt(this, "permissions");
}
public bool Hoist() {
return JsonObjectGetBool(this, "hoist");
}
public bool Managed() {
return JsonObjectGetBool(this, "managed");
}
public bool Mentionable() {
return JsonObjectGetBool(this, "mentionable");
}
};
methodmap RoleList < Handle {
property int Size {
public get() {
return json_array_size(this);
}
}
public Role GetRole(int i) {
return view_as<Role>(
json_array_get(this, i)
);
}
public Role Get(int i) {
return this.GetRole(i);
}
};
/*
{
"id": "80351110224678912",
"username": "Nelly",
"discriminator": "1337",
"avatar": "8342729096ea3675442027381ff50dfe",
"verified": true,
"email": "nelly@discord.com"
}
*/
//It's a JSON Handle with the above info TODO stop using natives!
methodmap DiscordUser < Handle {
public native void GetID(char[] buffer, int maxlength);
public native void GetUsername(char[] buffer, int maxlength);
public native void GetDiscriminator(char[] buffer, int maxlength);
public int GetDiscriminatorInt() {
char buffer[16];
this.GetDiscriminator(buffer, sizeof(buffer));
return StringToInt(buffer);
}
public native void GetAvatar(char[] buffer, int maxlength);
public native bool IsVerified();
public native void GetEmail(char[] buffer, int maxlength);
public native bool IsBot();
};
/*
{"timestamp": "2017-01-15T20:26:35.353000+00:00", "mention_everyone": false, "id": "270287641155469313", "pinned": false, "edited_timestamp": null, "author": {"username": "DK-Bot", "discriminator": "6274", "bot": true, "id": "186256454863290369", "avatar": null}, "mention_roles": [], "content": "ab", "channel_id": "229677130483499008", "mentions": [], "type": 0}
*/
methodmap DiscordMessage < Handle {
public native void GetID(char[] buffer, int maxlength);
public native bool IsPinned();
public native DiscordUser GetAuthor();
public native void GetContent(char[] buffer, int maxlength);
public native void GetChannelID(char[] buffer, int maxlength);
};
#include <discord/channel>
#include <discord/message_embed>
#include <discord/webhook>
#include <discord/bot>
#include <discord/GuildMember>
public SharedPlugin __pl_discordapi =
{
name = "discord-api",
file = "discord-api.smx",
#if defined REQUIRE_PLUGIN
required = 1,
#else
required = 0,
#endif
};
#if !defined REQUIRE_PLUGIN
public void __pl_discordapi_SetNTVOptional()
{
MarkNativeAsOptional("DiscordUser.GetID");
MarkNativeAsOptional("DiscordUser.GetUsername");
MarkNativeAsOptional("DiscordUser.GetDiscriminator");
MarkNativeAsOptional("DiscordUser.GetAvatar");
MarkNativeAsOptional("DiscordUser.IsVerified");
MarkNativeAsOptional("DiscordUser.GetEmail");
MarkNativeAsOptional("DiscordUser.IsBot");
MarkNativeAsOptional("DiscordMessage.GetID");
MarkNativeAsOptional("DiscordMessage.IsPinned");
MarkNativeAsOptional("DiscordMessage.DiscordUser GetAuthor");
MarkNativeAsOptional("DiscordMessage.GetContent");
MarkNativeAsOptional("DiscordMessage.GetChannelID");
MarkNativeAsOptional("DiscordBot.StartTimer");
MarkNativeAsOptional("DiscordBot.AddReactionID");
MarkNativeAsOptional("DiscordBot.DeleteReactionID");
MarkNativeAsOptional("DiscordBot.GetReactionID");
MarkNativeAsOptional("DiscordBot.GetToken");
MarkNativeAsOptional("DiscordBot.SendMessage");
MarkNativeAsOptional("DiscordBot.SendMessageToChannelID");
MarkNativeAsOptional("DiscordBot.DeleteMessageID");
MarkNativeAsOptional("DiscordBot.DeleteMessage");
MarkNativeAsOptional("DiscordBot.GetGuilds");
MarkNativeAsOptional("DiscordBot.GetGuildChannels");
MarkNativeAsOptional("DiscordBot.GetGuildMembers");
MarkNativeAsOptional("DiscordBot.GetGuildMembersAll");
MarkNativeAsOptional("DiscordBot.GetGuildRoles");
MarkNativeAsOptional("DiscordChannel.SendMessage");
MarkNativeAsOptional("DiscordWebHook.Send");
}
#endif