Current section

Files

Jump to
discord_gleam src discord_gleam.erl
Raw

src/discord_gleam.erl

-module(discord_gleam).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([bot/3, run/2, send_message/4, create_dm_channel/2, send_direct_message/4, reply/5, kick_member/4, ban_member/4, delete_message/4, edit_message/5, wipe_global_commands/1, wipe_guild_commands/2, register_global_commands/2, register_guild_commands/3, interaction_reply_message/3]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" The primary module of discord_gleam. \\\n"
" This module contains high-level functions to interact with the Discord API. \\\n"
" But you can always implement stuff yourself using the low-level functions from the rest of the library. \\\n"
).
-file("src/discord_gleam.gleam", 32).
?DOC(
" Create a new bot instance.\n"
" \n"
" Example:\n"
" ```gleam\n"
" import discord_gleam/discord/intents\n"
" \n"
" fn main() {\n"
" let bot = discord_gleam.bot(\"TOKEN\", \"CLIENT_ID\", intents.default()))\n"
" }\n"
" ```\n"
).
-spec bot(binary(), binary(), discord_gleam@discord@intents:intents()) -> discord_gleam@types@bot:bot().
bot(Token, Client_id, Intents) ->
{bot,
Token,
Client_id,
Intents,
{cache, case bravo@uset:new(<<"MessagesCache"/utf8>>, 1, public) of
{ok, Cache} ->
{some, Cache};
{error, _} ->
none
end}}.
-file("src/discord_gleam.gleam", 73).
?DOC(
" Start the event loop, with a set of event handlers.\n"
"\n"
" Example:\n"
" ```gleam\n"
" import discord_gleam/discord/intents\n"
" import discord_gleam/event_handler\n"
" \n"
" fn main() {\n"
" let bot = discord_gleam.bot(\"TOKEN\", \"CLIENT_ID\", intents.default())\n"
" \n"
" let event_handlers = [handler]\n"
" \n"
" discord_gleam.run(bot, event_handlers)\n"
" }\n"
" \n"
" fn handler(bot: bot.Bot, packet: event_handler.Packet) {\n"
" case packet {\n"
" event_handler.ReadyPacket(ready) -> {\n"
" logging.log(logging.Info, \"Logged in as \" <> ready.d.user.username)\n"
" }\n"
" \n"
" _ -> Nil\n"
" }\n"
" }\n"
).
-spec run(
discord_gleam@types@bot:bot(),
list(fun((discord_gleam@types@bot:bot(), discord_gleam@event_handler:packet()) -> nil))
) -> nil.
run(Bot, Event_handlers) ->
_assert_subject = bravo@uset:new(<<"State"/utf8>>, 1, public),
{ok, State_uset} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"discord_gleam"/utf8>>,
function => <<"run"/utf8>>,
line => 77})
end,
discord_gleam@ws@event_loop:main(
Bot,
Event_handlers,
<<"gateway.discord.gg"/utf8>>,
false,
<<""/utf8>>,
State_uset
).
-file("src/discord_gleam.gleam", 105).
?DOC(
" Send a message to a channel.\n"
" \n"
" Example:\n"
" ```gleam\n"
" import discord_gleam\n"
" \n"
" fn main() {\n"
" ...\n"
" \n"
" let msg = discord_gleam.send_message(\n"
" bot, \n"
" \"CHANNEL_ID\",\n"
" \"Hello world!\",\n"
" [] // embeds\n"
" )\n"
" }\n"
).
-spec send_message(
discord_gleam@types@bot:bot(),
binary(),
binary(),
list(discord_gleam@types@message:embed())
) -> {ok, discord_gleam@types@message_send_response:message_send_response()} |
{error, discord_gleam@internal@error:discord_error()}.
send_message(Bot, Channel_id, Message, Embeds) ->
Msg = {message, Message, Embeds},
discord_gleam@http@endpoints:send_message(
erlang:element(2, Bot),
Channel_id,
Msg
).
-file("src/discord_gleam.gleam", 118).
?DOC(
" Create a DM channel with a user. \\\n"
" Returns a channel object, or a DiscordError if it fails.\n"
).
-spec create_dm_channel(discord_gleam@types@bot:bot(), binary()) -> {ok,
discord_gleam@types@channel:channel()} |
{error, discord_gleam@internal@error:discord_error()}.
create_dm_channel(Bot, User_id) ->
discord_gleam@http@endpoints:create_dm_channel(
erlang:element(2, Bot),
User_id
).
-file("src/discord_gleam.gleam", 130).
?DOC(
" Send a direct message to a user. \\\n"
" Same use as `send_message`, but use user_id instead of channel_id. \\\n"
" `discord_gleam.send_direct_message(bot, \"USER_ID\", \"Hello world!\", [])`\n"
" \n"
" Note: This will return a DiscordError if the DM channel cant be made\n"
).
-spec send_direct_message(
discord_gleam@types@bot:bot(),
binary(),
binary(),
list(discord_gleam@types@message:embed())
) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}.
send_direct_message(Bot, User_id, Message, Embeds) ->
Msg = {message, Message, Embeds},
discord_gleam@http@endpoints:send_direct_message(
erlang:element(2, Bot),
User_id,
Msg
).
-file("src/discord_gleam.gleam", 154).
?DOC(
" Reply to a message in a channel.\n"
" \n"
" Example:\n"
" \n"
" ```gleam\n"
" import discord_gleam\n"
" \n"
" fn main() {\n"
" ...\n"
" \n"
" discord_gleam.reply(bot, \"CHANNEL_ID\", \"MESSAGE_ID\", \"Hello world!\", [])\n"
" }\n"
" ```\n"
).
-spec reply(
discord_gleam@types@bot:bot(),
binary(),
binary(),
binary(),
list(discord_gleam@types@message:embed())
) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}.
reply(Bot, Channel_id, Message_id, Message, Embeds) ->
Msg = {reply, Message, Message_id, Embeds},
discord_gleam@http@endpoints:reply(erlang:element(2, Bot), Channel_id, Msg).
-file("src/discord_gleam.gleam", 182).
?DOC(
" Kicks an member from an server. \\\n"
" The reason will be what is shown in the audit log.\n"
" \n"
" Example:\n"
" \n"
" ```gleam\n"
" import discord_gleam\n"
" \n"
" fn main() {\n"
" ...\n"
" \n"
" discord_gleam.kick_member(bot, \"GUILD_ID\", \"USER_ID\", \"REASON\")\n"
" }\n"
" \n"
" For an full example, see the `examples/kick.gleam` file.\n"
).
-spec kick_member(discord_gleam@types@bot:bot(), binary(), binary(), binary()) -> {ok,
nil} |
{error, discord_gleam@internal@error:discord_error()}.
kick_member(Bot, Guild_id, User_id, Reason) ->
discord_gleam@http@endpoints:kick_member(
erlang:element(2, Bot),
Guild_id,
User_id,
Reason
).
-file("src/discord_gleam.gleam", 191).
-spec ban_member(discord_gleam@types@bot:bot(), binary(), binary(), binary()) -> {ok,
nil} |
{error, discord_gleam@internal@error:discord_error()}.
ban_member(Bot, Guild_id, User_id, Reason) ->
discord_gleam@http@endpoints:ban_member(
erlang:element(2, Bot),
Guild_id,
User_id,
Reason
).
-file("src/discord_gleam.gleam", 219).
?DOC(
" Deletes an message from a channel. \\\n"
" The reason will be what is shown in the audit log.\n"
" \n"
" Example:\n"
" ```gleam\n"
" import discord_gleam\n"
" \n"
" fn main() {\n"
" ...\n"
" \n"
" discord_gleam.delete_message(\n"
" bot, \n"
" \"CHANNEL_ID\",\n"
" \"MESSAGE_ID\",\n"
" \"REASON\",\n"
" )\n"
" }\n"
" \n"
" For an full example, see the `examples/delete_message.gleam` file.\n"
).
-spec delete_message(
discord_gleam@types@bot:bot(),
binary(),
binary(),
binary()
) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}.
delete_message(Bot, Channel_id, Message_id, Reason) ->
discord_gleam@http@endpoints:delete_message(
erlang:element(2, Bot),
Channel_id,
Message_id,
Reason
).
-file("src/discord_gleam.gleam", 230).
?DOC(
" Edits an existing message in a channel. \\\n"
" The message must have been sent by the bot itself.\n"
).
-spec edit_message(
discord_gleam@types@bot:bot(),
binary(),
binary(),
binary(),
list(discord_gleam@types@message:embed())
) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}.
edit_message(Bot, Channel_id, Message_id, Content, Embeds) ->
Msg = {message, Content, Embeds},
discord_gleam@http@endpoints:edit_message(
erlang:element(2, Bot),
Channel_id,
Message_id,
Msg
).
-file("src/discord_gleam.gleam", 244).
?DOC(
" Wipes all the global slash commands for the bot. \\\n"
" Restarting your client might be required to see the changes. \\\n"
).
-spec wipe_global_commands(discord_gleam@types@bot:bot()) -> {ok, nil} |
{error, discord_gleam@internal@error:discord_error()}.
wipe_global_commands(Bot) ->
discord_gleam@http@endpoints:wipe_global_commands(
erlang:element(2, Bot),
erlang:element(3, Bot)
).
-file("src/discord_gleam.gleam", 250).
?DOC(
" Wipes all the guild slash commands for the bot. \\\n"
" Restarting your client might be required to see the changes. \\\n"
).
-spec wipe_guild_commands(discord_gleam@types@bot:bot(), binary()) -> {ok, nil} |
{error, discord_gleam@internal@error:discord_error()}.
wipe_guild_commands(Bot, Guild_id) ->
discord_gleam@http@endpoints:wipe_guild_commands(
erlang:element(2, Bot),
erlang:element(3, Bot),
Guild_id
).
-file("src/discord_gleam.gleam", 259).
?DOC(
" Registers a global slash command. \\\n"
" Restarting your client might be required to see the changes. \\\n"
).
-spec register_global_commands(
discord_gleam@types@bot:bot(),
list(discord_gleam@types@slash_command:slash_command())
) -> {ok, nil} |
{error,
{discord_gleam@types@slash_command:slash_command(),
discord_gleam@internal@error:discord_error()}}.
register_global_commands(Bot, Commands) ->
gleam@list:try_each(
Commands,
fun(Command) ->
case discord_gleam@http@endpoints:register_global_command(
erlang:element(2, Bot),
erlang:element(3, Bot),
Command
) of
{ok, _} ->
{ok, nil};
{error, Err} ->
{error, {Command, Err}}
end
end
).
-file("src/discord_gleam.gleam", 273).
?DOC(
" Registers a guild-specific slash command. \\\n"
" Restarting your client might be required to see the changes. \\\n"
).
-spec register_guild_commands(
discord_gleam@types@bot:bot(),
binary(),
list(discord_gleam@types@slash_command:slash_command())
) -> {ok, nil} |
{error,
{discord_gleam@types@slash_command:slash_command(),
discord_gleam@internal@error:discord_error()}}.
register_guild_commands(Bot, Guild_id, Commands) ->
gleam@list:try_each(
Commands,
fun(Command) ->
case discord_gleam@http@endpoints:register_guild_command(
erlang:element(2, Bot),
erlang:element(3, Bot),
Guild_id,
Command
) of
{ok, _} ->
{ok, nil};
{error, Err} ->
{error, {Command, Err}}
end
end
).
-file("src/discord_gleam.gleam", 294).
?DOC(" Make a basic text reply to an interaction.\n").
-spec interaction_reply_message(
discord_gleam@ws@packets@interaction_create:interaction_create_packet(),
binary(),
boolean()
) -> {ok, nil} | {error, discord_gleam@internal@error:discord_error()}.
interaction_reply_message(Interaction, Message, Ephemeral) ->
discord_gleam@http@endpoints:interaction_send_text(
Interaction,
Message,
Ephemeral
).