modifications to make credo happy mostly

master
Rachel Fae Fox 2022-11-07 09:24:39 -05:00
parent 8b1e19b56d
commit d34a78cb99
6 changed files with 46 additions and 24 deletions

View File

@ -1,8 +1,10 @@
defmodule Discordirc.ChannelMap do defmodule Discordirc.ChannelMap do
@cmap Application.fetch_env!(:discordirc, :channels) @moduledoc """
maps discord channels to irc channels
"""
def discord(network, channel) do def discord(network, channel) do
id = id =
@cmap Application.fetch_env!(:discordirc, :channels)
|> Enum.filter(&(&1.ircnetwork == network and &1.ircchannel == channel)) |> Enum.filter(&(&1.ircnetwork == network and &1.ircchannel == channel))
|> List.first() |> List.first()
@ -17,7 +19,7 @@ defmodule Discordirc.ChannelMap do
def irc(id) do def irc(id) do
channel = channel =
@cmap Application.fetch_env!(:discordirc, :channels)
|> Enum.filter(&(&1.discordid == id)) |> Enum.filter(&(&1.discordid == id))
|> List.first() |> List.first()
@ -31,7 +33,7 @@ defmodule Discordirc.ChannelMap do
end end
def getircchannels(network) do def getircchannels(network) do
@cmap Application.fetch_env!(:discordirc, :channels)
|> Enum.filter(&(&1.ircnetwork == network)) |> Enum.filter(&(&1.ircnetwork == network))
|> Enum.map(& &1.ircchannel) |> Enum.map(& &1.ircchannel)
end end

View File

@ -1,4 +1,7 @@
defmodule Discordirc.DiscordHandler do defmodule Discordirc.DiscordHandler do
@moduledoc """
discord bot
"""
use Nostrum.Consumer use Nostrum.Consumer
alias Nostrum.Api alias Nostrum.Api
alias Discordirc.ChannelMap alias Discordirc.ChannelMap

View File

@ -1,5 +1,7 @@
defmodule Discordirc do defmodule Discordirc do
@networks Application.get_env(:discordirc, :networks) @moduledoc """
Entrypoint
"""
use Application use Application
alias Discordirc.IRC alias Discordirc.IRC
@ -7,7 +9,9 @@ defmodule Discordirc do
def start(_type, _args) do def start(_type, _args) do
import Supervisor.Spec import Supervisor.Spec
ircnets = @networks |> Enum.map(fn net -> worker(IRC, [net], id: net.network) end) ircnets =
Application.get_env(:discordirc, :networks)
|> Enum.map(fn net -> worker(IRC, [net], id: net.network) end)
children = children =
ircnets ++ ircnets ++

View File

@ -1,4 +1,7 @@
defmodule Discordirc.Formatter do defmodule Discordirc.Formatter do
@moduledoc """
Transforms messages to/from discord from/to irc
"""
alias Nostrum.Api, as: DiscordAPI alias Nostrum.Api, as: DiscordAPI
def from_irc(nick, msg, ctcp \\ false) do def from_irc(nick, msg, ctcp \\ false) do
@ -136,14 +139,14 @@ defmodule Discordirc.Formatter do
%{str: fst, id: lst, cui: DiscordChannelInfo.from_id(String.to_integer(lst))} %{str: fst, id: lst, cui: DiscordChannelInfo.from_id(String.to_integer(lst))}
end) end)
unless matches == [] do if matches == [] do
content
else
doallreplacements( doallreplacements(
Regex.split(pattern, content, include_captures: true), Regex.split(pattern, content, include_captures: true),
matches, matches,
{"", matches} {"", matches}
) )
else
content
end end
end end

View File

@ -1,4 +1,7 @@
defmodule Discordirc.IRC do defmodule Discordirc.IRC do
@moduledoc """
IRC bot portion
"""
use GenServer use GenServer
require Logger require Logger
@ -98,9 +101,10 @@ defmodule Discordirc.IRC do
def discord_ircsplit(msg, nick, target) do def discord_ircsplit(msg, nick, target) do
pfx = "PRIVMSG #{target} :" |> String.length() pfx = "PRIVMSG #{target} :" |> String.length()
nkl = "<#{nick}> " |> String.length() nkl = "<#{nick}> " |> String.length()
msg msg
|> String.split("\n") |> String.split("\n")
|> Enum.map(&ircsplit(&1, pfx+nkl)) |> Enum.map(&ircsplit(&1, pfx + nkl))
|> List.flatten() |> List.flatten()
end end

View File

@ -1,4 +1,8 @@
defmodule Discordirc.WebhookService do defmodule Discordirc.WebhookService do
@moduledoc """
This module manages the webhooks that we output
to discord channels with
"""
use GenServer use GenServer
require Logger require Logger
alias Nostrum.Api, as: DiscordAPI alias Nostrum.Api, as: DiscordAPI
@ -11,11 +15,13 @@ defmodule Discordirc.WebhookService do
def clear_old_hooks(channel_id) do def clear_old_hooks(channel_id) do
{:ok, webhooks} = DiscordAPI.get_channel_webhooks(channel_id) {:ok, webhooks} = DiscordAPI.get_channel_webhooks(channel_id)
webhooks deadhooks =
|> Enum.filter(fn wh -> webhooks
wh.user.id == Nostrum.Snowflake.dump(DiscordAPI.get_current_user!().id) |> Enum.filter(fn wh ->
end) wh.user.id == Nostrum.Snowflake.dump(DiscordAPI.get_current_user!().id)
|> Enum.map(&DiscordAPI.delete_webhook(&1.id, "clearing old hooks")) end)
for h <- deadhooks, do: DiscordAPI.delete_webhook(h.id, "clearing old hooks")
:ok :ok
end end
@ -40,19 +46,19 @@ defmodule Discordirc.WebhookService do
{:error, e} -> {:error, e} ->
case e.response.code do case e.response.code do
10003 -> 10_003 ->
raise "unknown channel" raise "unknown channel"
30007 -> 30_007 when retry < 1 ->
if retry < 1 do clear_old_hooks(channel_id)
clear_old_hooks(channel_id) create_hook(state, channel_id, retry + 1)
create_hook(state, channel_id, retry + 1)
else
raise "too many webhooks"
end
40001 -> 30_007 when retry >= 1 ->
raise "too many webhooks"
40_001 ->
raise "no permissions" raise "no permissions"
50_035 ->
raise "invalid form body"
end end
end end
end end