Migrate A2-D1 (Mac Mini) to A1-D1 (clicks server)

Signed-off-by: Skyler Grey <skyler3665@gmail.com>
diff --git a/services/clicksforms/discordpy.nix b/services/clicksforms/discordpy.nix
new file mode 100644
index 0000000..83aed0f
--- /dev/null
+++ b/services/clicksforms/discordpy.nix
@@ -0,0 +1,64 @@
+{ lib
+, aiohttp
+, buildPythonPackage
+, fetchFromGitHub
+, libopus
+, pynacl
+, pythonOlder
+, withVoice ? true
+, ffmpeg
+}:
+
+buildPythonPackage rec {
+  pname = "discord.py";
+  version = "2.0.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "Rapptz";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Rh3gijm67LVyOaliP7w3YwKviKydnxXvu4snNrM5H1c=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+  ] ++ lib.optionals withVoice [
+    libopus
+    pynacl
+    ffmpeg
+  ];
+
+  patchPhase = ''
+    substituteInPlace "discord/opus.py" \
+      --replace "ctypes.util.find_library('opus')" "'${libopus}/lib/libopus.so.0'"
+  '' + lib.optionalString withVoice ''
+    substituteInPlace "discord/player.py" \
+      --replace "executable='ffmpeg'" "executable='${ffmpeg}/bin/ffmpeg'"
+  '';
+
+  # Only have integration tests with discord
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "discord"
+    "discord.file"
+    "discord.member"
+    "discord.user"
+    "discord.state"
+    "discord.guild"
+    "discord.webhook"
+    "discord.ext.commands.bot"
+  ];
+
+  meta = with lib; {
+    description = "Python wrapper for the Discord API";
+    homepage = "https://discordpy.rtfd.org/";
+    changelog = "https://github.com/Rapptz/discord.py/blob/v${version}/docs/whats_new.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ minion3665 ];
+  };
+}
+