diff --git a/lib/contrib/linkbot.ex b/lib/contrib/linkbot.ex
new file mode 100644
index 0000000..22b2ba3
--- /dev/null
+++ b/lib/contrib/linkbot.ex
@@ -0,0 +1,38 @@
+defmodule Omnibot.Contrib.Linkbot do
+ use Omnibot.Module
+ require Logger
+
+ defmodule Client do
+ use Tesla
+
+ plug Tesla.Middleware.Headers, [{"user-agent", "Tesla/Omnibot"}]
+ plug Tesla.Middleware.FollowRedirects, max_redirects: 10
+ plug Tesla.Middleware.Compression, format: "gzip"
+
+ @title_regex ~r"
(?.+)"i
+
+ def get_title(url) do
+ if should_get?(url) do
+ resp = get!(url)
+ %{"title" => title} = Regex.named_captures(@title_regex, resp.body)
+ title
+ end
+ end
+
+ defp should_get?(url) do
+ resp = head!(url)
+ Tesla.get_header(resp, "content-type")
+ |> String.downcase()
+ |> String.contains?(["html", "text"])
+ end
+ end
+
+ @url_regex ~r"\bhttps?://[^\s]+"
+
+ @impl true
+ def on_channel_msg(irc, channel, _nick, line) do
+ Regex.scan(@url_regex, line)
+ |> Enum.map(fn url -> Client.get_title(url) end)
+ |> Enum.each(fn title -> Irc.send_to(irc, channel, title) end)
+ end
+end
diff --git a/mix.exs b/mix.exs
index b742bff..191b72d 100644
--- a/mix.exs
+++ b/mix.exs
@@ -29,9 +29,6 @@ defmodule Omnibot.MixProject do
# Run "mix help deps" to learn about dependencies.
defp deps do
- [
- # {:dep_from_hexpm, "~> 0.3.0"},
- # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
- ]
+ [{:tesla, "~> 1.3.0"}]
end
end