Packages

a gleam lib for connecting to twitch IRC

Current section

Files

Jump to
gwitch src gwitch.erl
Raw

src/gwitch.erl

-module(gwitch).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([login/2, join_channel/2, get_twitch_subj/0, connect/2]).
-export_type([login_credentials/0]).
-type login_credentials() :: {static, binary(), binary()}.
-spec login(
gleam@erlang@process:subject(stratus:internal_message(internal@websockets:msg())),
gleam@option:option(login_credentials())
) -> nil.
login(Subj, Creds) ->
{Username, Password} = case Creds of
{some, Creds@1} ->
{erlang:element(2, Creds@1), erlang:element(3, Creds@1)};
none ->
{<<"justinfan123"/utf8>>, <<"gibberish"/utf8>>}
end,
stratus:send_message(Subj, {message, <<"NICK "/utf8, Username/binary>>}),
stratus:send_message(Subj, {message, <<"PASS "/utf8, Password/binary>>}).
-spec join_channel(
gleam@erlang@process:subject(stratus:internal_message(internal@websockets:msg())),
binary()
) -> nil.
join_channel(Subj, Channel) ->
stratus:send_message(Subj, {message, <<"JOIN #"/utf8, Channel/binary>>}).
-spec get_twitch_subj() -> gleam@erlang@process:subject(stratus:internal_message(internal@websockets:msg())).
get_twitch_subj() ->
_assert_subject = gleam@http@request:to(
<<"http://irc-ws.chat.twitch.tv"/utf8>>
),
{ok, Req} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"gwitch"/utf8>>,
function => <<"get_twitch_subj"/utf8>>,
line => 27})
end,
Initializer = fun() -> {nil, none} end,
_assert_subject@1 = internal@websockets:create_websockets_builder(
Req,
Initializer
),
{ok, Subj} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"gwitch"/utf8>>,
function => <<"get_twitch_subj"/utf8>>,
line => 31})
end,
Subj.
-spec connect(binary(), gleam@option:option(login_credentials())) -> gleam@erlang@process:subject(stratus:internal_message(internal@websockets:msg())).
connect(Channel, Creds) ->
Twitch_subj = get_twitch_subj(),
login(Twitch_subj, Creds),
join_channel(Twitch_subj, Channel),
Twitch_subj.