Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F77370
untappd.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
untappd.ex
View Options
defmodule
Nola.Plugins.Untappd
do
def
irc_doc
()
do
"""
#
[Untappd](https://untappd.com)
* `!beer <beer name>` Information about the first beer matching `<beer name>`
* `?beer <beer name>` List the 10 firsts beer matching `<beer name>`
_Note_: The best way to search is always "Brewery Name + Beer Name", such as "Dogfish 60 Minute".
Link your Untappd account to the bot (for automated checkins on [alcoolog](
#
alcoolog), ...) with the `enable-untappd` command, in private.
"""
end
def
start_link
()
do
GenServer
.
start_link
(
__MODULE__
,
[],
name
:
__MODULE__
)
end
def
init
(
_
)
do
{
:ok
,
_
}
=
Registry
.
register
(
Nola.PubSub
,
"trigger:beer"
,
[
plugin
:
__MODULE__
])
{
:ok
,
%{}}
end
def
handle_info
({
:irc
,
:trigger
,
_
,
m
=
%
Nola.Message
{
trigger
:
%{
type
:
:bang
,
args
:
args
}}},
state
)
do
case
Untappd
.
search_beer
(
Enum
.
join
(
args
,
" "
),
limit
:
1
)
do
{
:ok
,
%{
"response"
=>
%{
"beers"
=>
%{
"count"
=>
count
,
"items"
=>
[
result
|
_
]}}}}
->
%{
"beer"
=>
beer
,
"brewery"
=>
brewery
}
=
result
description
=
Map
.
get
(
beer
,
"beer_description"
)
|>
String
.
replace
(
"
\n
"
,
" "
)
|>
String
.
replace
(
"
\r
"
,
" "
)
|>
String
.
trim
()
beer_s
=
"
#{
Map
.
get
(
brewery
,
"brewery_name"
)
}
:
#{
Map
.
get
(
beer
,
"beer_name"
)
}
-
#{
Map
.
get
(
beer
,
"beer_abv"
)
}
°"
city
=
get_in
(
brewery
,
[
"location"
,
"brewery_city"
])
location
=
[
Map
.
get
(
brewery
,
"brewery_type"
),
city
,
Map
.
get
(
brewery
,
"country_name"
)]
|>
Enum
.
filter
(
fn
(
x
)
->
x
end
)
|>
Enum
.
join
(
", "
)
extra
=
"
#{
Map
.
get
(
beer
,
"beer_style"
)
}
- IBU:
#{
Map
.
get
(
beer
,
"beer_ibu"
)
}
-
#{
location
}
"
m
.
replyfun
.
([
beer_s
,
extra
,
description
])
err
->
m
.
replyfun
.
(
"Error"
)
end
{
:noreply
,
state
}
end
def
handle_info
({
:irc
,
:trigger
,
_
,
m
=
%
Nola.Message
{
trigger
:
%{
type
:
:query
,
args
:
args
}}},
state
)
do
case
Untappd
.
search_beer
(
Enum
.
join
(
args
,
" "
))
do
{
:ok
,
%{
"response"
=>
%{
"beers"
=>
%{
"count"
=>
count
,
"items"
=>
results
}}}}
->
beers
=
for
%{
"beer"
=>
beer
,
"brewery"
=>
brewery
}
<-
results
do
"
#{
Map
.
get
(
brewery
,
"brewery_name"
)
}
:
#{
Map
.
get
(
beer
,
"beer_name"
)
}
-
#{
Map
.
get
(
beer
,
"beer_abv"
)
}
°"
end
|>
Enum
.
intersperse
(
", "
)
|>
Enum
.
join
(
""
)
m
.
replyfun
.
(
"
#{
count
}
.
#{
beers
}
"
)
err
->
m
.
replyfun
.
(
"Error"
)
end
{
:noreply
,
state
}
end
def
handle_info
(
info
,
state
)
do
{
:noreply
,
state
}
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Mon, Jul 7, 6:05 AM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
49865
Default Alt Text
untappd.ex (2 KB)
Attached To
rNOLA Nola
Event Timeline
Log In to Comment