Packages
ex_gram
0.9.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.1
0.55.0
0.54.0
0.53.0
0.52.2
0.52.1
0.52.0
0.51.1
0.51.0
0.50.2
0.50.1
0.50.0
0.41.0
0.40.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.5.0-rc6
0.5.0-rc5
0.5.0-rc4
0.5.0-rc3
0.5.0-rc2
Telegram Bot API low level and framework
Current section
Files
Jump to
Current section
Files
lib/ex_gram/token.ex
defmodule ExGram.Token do
@moduledoc """
Helpers when dealing with bot's tokens
"""
require Logger
@registry Registry.ExGram
@doc """
Main logic to extract the token of the bot.
The options can have the following keys:
- token: Explicit token to be used, this ignore everything else and will use this one
- bot: Bot name to be used, the token will be retrieved from the registry
- registry: Optional. Registry to extract the bot's token. By default will use ExGram.Registry.
Usage:
ExGram.Token.fetch() # Will take it from the config (config :ex_gram, token: "token")
ExGram.Token.fetch(token: "MyToken") # Will use the token
ExGram.Token.fetch(bot: :my_bot) # Will look in ExGram.Registry for :my_bot token
ExGram.Token.fetch(bot: :my_bot, registry: OtherRegistry) # Will look in OtherRegistry for :My_bot token
"""
@spec fetch(keyword) :: String.t()
def fetch(ops \\ []) when is_list(ops) do
case {Keyword.get(ops, :token), Keyword.get(ops, :bot)} do
{nil, nil} ->
ExGram.Config.get(:ex_gram, :token)
{token, nil} ->
token
{nil, bot} ->
fetch_registry_token(bot, ops)
end
end
defp fetch_registry_token(bot, ops) do
registry = Keyword.get(ops, :registry, @registry)
case Registry.lookup(registry, bot) do
[{_, token} | _] when is_binary(token) ->
token
[{_, other} | _] ->
Logger.warn(error_msg(:no_token, bot))
nil
_ ->
Logger.warn(error_msg(:no_bot, bot))
nil
end
end
defp error_msg(:no_token, bot) do
~s(The bot \"#{inspect(bot)}\" does not have a token specified. Did you started the bot with the token?
children = [
# ...
ExGram,
{MyBot, [method: :polling, token: token]}
]
)
end
defp error_msg(:no_bot, bot) do
~s(The bot \"#{inspect(bot)}\" is not registered. Make sure that this bot exists and is started.)
end
end