summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/lsg_irc/kick_roulette_handler.ex7
-rw-r--r--lib/lsg_irc/last_fm_handler.ex6
-rw-r--r--lib/lsg_irc/txt_handler.ex42
-rw-r--r--mix.exs1
-rw-r--r--mix.lock3
5 files changed, 50 insertions, 9 deletions
diff --git a/lib/lsg_irc/kick_roulette_handler.ex b/lib/lsg_irc/kick_roulette_handler.ex
index 7bfa90b..3591b5e 100644
--- a/lib/lsg_irc/kick_roulette_handler.ex
+++ b/lib/lsg_irc/kick_roulette_handler.ex
@@ -2,7 +2,7 @@ defmodule LSG.IRC.KickRouletteHandler do
@moduledoc """
# kick roulette
- * **!kick** (à peu près une chance sur 5)
+ * **!kick**
"""
def irc_doc, do: @moduledoc
@@ -17,7 +17,10 @@ defmodule LSG.IRC.KickRouletteHandler do
def handle_info({:received, "!kick", sender, chan}, client) do
if 5 == :crypto.rand_uniform(1, 6) do
- ExIRC.Client.kick(client, chan, sender.nick, "perdu")
+ spawn(fn() ->
+ :timer.sleep(:crypto.rand_uniform(500, 15_000))
+ ExIRC.Client.kick(client, chan, sender.nick, "perdu")
+ end)
end
{:noreply, client}
end
diff --git a/lib/lsg_irc/last_fm_handler.ex b/lib/lsg_irc/last_fm_handler.ex
index 6ecdab9..fe767b1 100644
--- a/lib/lsg_irc/last_fm_handler.ex
+++ b/lib/lsg_irc/last_fm_handler.ex
@@ -34,7 +34,7 @@ defmodule LSG.IRC.LastFmHandler do
def handle_info({:received, "-lastfm", sender, chan}, state) do
text = case :dets.lookup(state.dets, sender.nick) do
[{_nick, username}] ->
- :dets.delete(state.dets, sender.nick)
+ :dets.delete(state.dets, String.downcase(sender.nick))
"#{sender.nick}: nom d'utilisateur last.fm enlevé"
_ -> ""
end
@@ -66,7 +66,7 @@ defmodule LSG.IRC.LastFmHandler do
defp irc_now_playing(nick_or_user, chan, state) do
nick_or_user = String.strip(nick_or_user)
- username = case :dets.lookup(state.dets, nick_or_user) do
+ username = case :dets.lookup(state.dets, String.downcase(nick_or_user)) do
[{^nick_or_user, username}] -> username
_ -> nick_or_user
end
@@ -123,7 +123,7 @@ defmodule LSG.IRC.LastFmHandler do
end
defp lookup_nick(username, state) do
- case :dets.match(state.dets, {:'$1', String.downcase(username)}) do
+ case :dets.match(state.dets, {:'$1', username}) do
[[match]] -> match
[[match] | _many] -> match
_ -> username
diff --git a/lib/lsg_irc/txt_handler.ex b/lib/lsg_irc/txt_handler.ex
index f946092..efe2b68 100644
--- a/lib/lsg_irc/txt_handler.ex
+++ b/lib/lsg_irc/txt_handler.ex
@@ -1,5 +1,6 @@
defmodule LSG.IRC.TxtHandler do
alias LSG.IRC.UserTrack
+ require Logger
@moduledoc """
# [txt](/irc/txt)
@@ -27,12 +28,13 @@ defmodule LSG.IRC.TxtHandler do
GenServer.start_link(__MODULE__, [client])
end
- defstruct client: nil, triggers: %{}, rw: true, locks: nil
+ defstruct client: nil, triggers: %{}, rw: true, locks: nil, markov: nil
def init([client]) do
dets_locks_filename = (LSG.data_path() <> "/" <> "txtlocks.dets") |> String.to_charlist
{:ok, locks} = :dets.open_file(dets_locks_filename, [])
- state = %__MODULE__{client: client, locks: locks}
+ {:ok, markov} = ExChain.MarkovModel.start_link
+ state = %__MODULE__{client: client, locks: locks, markov: markov}
ExIRC.Client.add_handler(client, self())
{:ok, %__MODULE__{state | triggers: load()}}
end
@@ -118,6 +120,25 @@ defmodule LSG.IRC.TxtHandler do
{:noreply, state}
end
+ def handle_info({:received, "~txt", _, chan}, state) do
+ case ExChain.SentenceGenerator.create_filtered_sentence(state.markov) do
+ {:ok, line, _, _} ->
+ ExIRC.Client.msg(state.client, :privmsg, chan, line)
+ error ->
+ Logger.error "Txt Markov error: "<>inspect error
+ end
+ {:noreply, state}
+ end
+ def handle_info({:received, "~txt "<>complete, _, chan}, state) do
+ case ExChain.SentenceGenerator.complete_sentence(state.markov, complete) do
+ {line, _} ->
+ ExIRC.Client.msg(state.client, :privmsg, chan, line)
+ error ->
+ Logger.error "Txt Markov error: "<>inspect error
+ end
+ {:noreply, state}
+ end
+
def handle_info({:received, "!"<>trigger, _, chan}, state) do
{trigger, opts} = clean_trigger(trigger)
line = get_random(state.triggers, trigger, opts)
@@ -174,7 +195,19 @@ defmodule LSG.IRC.TxtHandler do
end
end
+ def handle_info(:reload_markov, state=%__MODULE__{triggers: triggers, markov: markov}) do
+ all_data = triggers
+ |> Enum.map(fn({_, data}) ->
+ for {line, _idx} <- data, do: line
+ end)
+ |> List.flatten
+ for l <- all_data, do: IO.puts(l)
+
+ populate = ExChain.MarkovModel.populate_model(markov, all_data)
+ IO.puts "populated markov: #{inspect(populate)}"
+ {:noreply, state}
+ end
def handle_info(msg, state) do
{:noreply, state}
@@ -182,7 +215,7 @@ defmodule LSG.IRC.TxtHandler do
# Load/Reloads text files from disk
defp load() do
- Path.wildcard(directory() <> "/*.txt")
+ triggers = Path.wildcard(directory() <> "/*.txt")
|> Enum.reduce(%{}, fn(path, m) ->
file = Path.basename(path)
[key, "txt"] = String.split(file, ".", parts: 2)
@@ -201,6 +234,9 @@ defmodule LSG.IRC.TxtHandler do
end)
|> Enum.sort
|> Enum.into(Map.new)
+
+ send(self(), :reload_markov)
+ triggers
end
defp dump(trigger, data) do
diff --git a/mix.exs b/mix.exs
index 473a399..df51af7 100644
--- a/mix.exs
+++ b/mix.exs
@@ -40,6 +40,7 @@ defmodule LSG.Mixfile do
{:earmark, "~> 1.2"},
{:entropy_string, "~> 1.0.0"},
{:abacus, "~> 0.3.3"},
+ {:ex_chain, github: "eljojo/ex_chain"},
]
end
end
diff --git a/mix.lock b/mix.lock
index 0337ca4..051ee62 100644
--- a/mix.lock
+++ b/mix.lock
@@ -5,6 +5,7 @@
"distillery": {:hex, :distillery, "1.5.2", "eec18b2d37b55b0bcb670cf2bcf64228ed38ce8b046bb30a9b636a6f5a4c0080", [:mix], [], "hexpm"},
"earmark": {:hex, :earmark, "1.2.4", "99b637c62a4d65a20a9fb674b8cffb8baa771c04605a80c911c4418c69b75439", [:mix], [], "hexpm"},
"entropy_string": {:hex, :entropy_string, "1.0.7", "61a5a989e78fd2798e35a17a98a17f81fb504e8d4ba620bcd4f19063eb782943", [:mix], [], "hexpm"},
+ "ex_chain": {:git, "https://github.com/eljojo/ex_chain.git", "09d88a10613b6acc33340c9fa1b3540493e431b8", []},
"exirc": {:git, "https://github.com/bitwalker/exirc.git", "a9258d1058815fa0d8c3201a4caf651754621f8e", []},
"file_system": {:hex, :file_system, "0.2.4", "f0bdda195c0e46e987333e986452ec523aed21d784189144f647c43eaf307064", [:mix], [], "hexpm"},
"floki": {:hex, :floki, "0.19.3", "652d1447767f783bd6cae1d882fd2145f25db28c6841ab87659225b468cff101", [:mix], [{:html_entities, "~> 0.4.0", [hex: :html_entities, repo: "hexpm", optional: false]}, {:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"},
@@ -23,7 +24,7 @@
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.1.3", "1d178429fc8950b12457d09c6afec247bfe1fcb6f36209e18fbb0221bdfe4d41", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.0 or ~> 1.2 or ~> 1.3", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "1.0.2", "bfa7fd52788b5eaa09cb51ff9fcad1d9edfeb68251add458523f839392f034c1", [:mix], [], "hexpm"},
"plug": {:hex, :plug, "1.4.4", "279b547662272cd835a8ca089717201dd3be51bb4705354eaf1b0346744acc82", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm"},
- "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},
+ "poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [:mix], [], "hexpm"},
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"}}