-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 ).