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