lib/alexia/behaviour.ex

defmodule Alexia.Behaviour do
  alias Alexia.Model.{User, Message, Update, UserProfilePhotos, File, Error}

  @callback get_me(binary) :: {:ok, User.t()} | {:error, Error.t()}
  @callback send_message(binary, integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback forward_message(binary, integer, integer, integer) :: {:ok, Message.t()} | {:error, Error.t()}
  @callback send_photo(binary, integer, binary, [{atom, any}]) :: {:ok, Message.t()} | {:error, Error.t()}
  @callback send_audio(binary, integer, binary, [{atom, any}]) :: {:ok, Message.t()} | {:error, Error.t()}
  @callback send_document(binary, integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_sticker(binary, integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_video(binary, integer, binary, [{atom, any}]) :: {:ok, Message.t()} | {:error, Error.t()}
  @callback send_voice(binary, integer, binary, [{atom, any}]) :: {:ok, Message.t()} | {:error, Error.t()}
  @callback send_animation(integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_location(binary, integer, float, float, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_venue(binary, integer, float, float, binary, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_contact(binary, integer, binary, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback send_chat_action(binary, integer, binary) :: :ok | {:error, Error.t()}
  @callback get_user_profile_photos(binary, integer, [{atom, any}]) ::
              {:ok, UserProfilePhotos.t()} | {:error, Error.t()}
  @callback get_updates(binary,[{atom, any}]) :: {:ok, [Update.t()]} | {:error, Error.t()}
  @callback set_webhook(binary, [{atom, any}]) :: :ok | {:error, Error.t()}
  @callback get_file(binary,binary) :: {:ok, File.t()} | {:error, Error.t()}
  @callback get_file_link(binary,File.t()) :: {:ok, binary} | {:error, Error.t()}
  @callback kick_chat_member(binary,integer | binary, integer) :: :ok | {:error, Error.t()}
  @callback leave_chat(binary,integer | binary) :: :ok | {:error, Error.t()}
  @callback unban_chat_member(binary,integer | binary, integer) :: :ok | {:error, Error.t()}
  @callback get_chat(binary,integer | binary) :: {:ok, Chat.t()} | {:error, Error.t()}
  @callback get_chat_administrators(binary,integer | binary) ::
              {:ok, [ChatMember.t()]} | {:error, Error.t()}
  @callback get_chat_members_count(binary,integer | binary) :: {:ok, integer} | {:error, Error.t()}
  @callback get_chat_member(binary,integer | binary, integer) ::
              {:ok, ChatMember.t()} | {:error, Error.t()}
  @callback answer_callback_query(binary,binary, [{atom, any}]) :: :ok | {:error, Error.t()}
  @callback edit_message_text(binary,integer | binary, integer, binary, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback edit_message_caption(binary,integer | binary, integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback edit_message_reply_markup(binary,integer | binary, integer, binary, [{atom, any}]) ::
              {:ok, Message.t()} | {:error, Error.t()}
  @callback answer_inline_query(binary, binary, [Alexia.Model.InlineQueryResult.t()], [{atom, any}]) ::
              :ok | {:error, Error.t()}
end