Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F77378
wolfram_alpha.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
wolfram_alpha.ex
View Options
defmodule
Nola.Plugins.WolframAlpha
do
use
GenServer
require
Logger
@moduledoc
"""
#
wolfram alpha
* **`!wa <requête>`** lance `<requête>` sur WolframAlpha
"""
def
irc_doc
,
do
:
@moduledoc
def
start_link
()
do
GenServer
.
start_link
(
__MODULE__
,
[],
name
:
__MODULE__
)
end
def
init
(
_
)
do
{
:ok
,
_
}
=
Registry
.
register
(
Nola.PubSub
,
"trigger:wa"
,
[
plugin
:
__MODULE__
])
{
:ok
,
nil
}
end
def
handle_info
({
:irc
,
:trigger
,
_
,
m
=
%
Nola.Message
{
trigger
:
%
Nola.Trigger
{
type
:
:bang
,
args
:
query
}}},
state
)
do
query
=
Enum
.
join
(
query
,
" "
)
params
=
%{
"appid"
=>
Keyword
.
get
(
Application
.
get_env
(
:nola
,
:wolframalpha
,
[]),
:app_id
,
"NO_APP_ID"
),
"units"
=>
"metric"
,
"i"
=>
query
}
url
=
"https://www.wolframalpha.com/input/?i="
<>
URI
.
encode
(
query
)
case
HTTPoison
.
get
(
"http://api.wolframalpha.com/v1/result"
,
[],
[
params
:
params
])
do
{
:ok
,
%
HTTPoison.Response
{
status_code
:
200
,
body
:
body
}}
->
m
.
replyfun
.
([
"
#{
query
}
->
#{
body
}
"
,
url
])
{
:ok
,
%
HTTPoison.Response
{
status_code
:
code
,
body
:
body
}}
->
error
=
case
{
code
,
body
}
do
{
501
,
b
}
->
"input invalide:
#{
body
}
"
{
code
,
error
}
->
"erreur
#{
code
}
:
#{
body
||
""
}
"
end
m
.
replyfun
.
(
"wa:
#{
error
}
"
)
{
:error
,
%
HTTPoison.Error
{
reason
:
reason
}}
->
m
.
replyfun
.
(
"wa: erreur http:
#{
to_string
(
reason
)
}
"
)
_
->
m
.
replyfun
.
(
"wa: erreur http"
)
end
{
:noreply
,
state
}
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Mon, Jul 7, 7:28 AM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
49871
Default Alt Text
wolfram_alpha.ex (1 KB)
Attached To
rNOLA Nola
Event Timeline
Log In to Comment