Add optional welcome message.
authorlain <lain@soykaf.club>
Sat, 16 Feb 2019 15:42:34 +0000 (16:42 +0100)
committerlain <lain@soykaf.club>
Sat, 16 Feb 2019 15:42:34 +0000 (16:42 +0100)
config/config.exs
docs/config.md
lib/pleroma/user.ex
lib/pleroma/user/welcome_message.ex [new file with mode: 0644]
test/user_test.exs

index e2a239a76baea09e3b986bd42d1fe7602adeb82b..271224e85f2aa70aabb30b31c865b402b00acc21 100644 (file)
@@ -162,7 +162,9 @@ config :pleroma, :instance,
   mrf_transparency: true,
   autofollowed_nicknames: [],
   max_pinned_statuses: 1,
-  no_attachment_links: false
+  no_attachment_links: false,
+  welcome_user_nickname: nil,
+  welcome_message: nil
 
 config :pleroma, :markup,
   # XXX - unfortunately, inline images must be enabled by default right now, because
index 74badd0da29d875e40330b0dafb0f754687fe5de..78daa488e8bf914e178d99eb0baaa932f9a54d2b 100644 (file)
@@ -97,6 +97,8 @@ config :pleroma, Pleroma.Mailer,
 * `max_pinned_statuses`: The maximum number of pinned statuses. `0` will disable the feature.
 * `autofollowed_nicknames`: Set to nicknames of (local) users that every new user should automatically follow.
 * `no_attachment_links`: Set to true to disable automatically adding attachment link text to statuses
+* `welcome_message`: A message that will be send to a newly registered users as a direct message.
+* `welcome_user_nickname`: The nickname of the user that sends the welcome message.
 
 ## :logger
 * `backends`: `:console` is used to send logs to stdout, `{ExSyslogger, :ex_syslogger}` to log to syslog
index 29d2b3d896d20a64e78907df1e847889bbd17651..3c6a9953d8a75d24525cd7bb3d3c8bd1f941e271 100644 (file)
@@ -261,6 +261,7 @@ defmodule Pleroma.User do
   def register(%Ecto.Changeset{} = changeset) do
     with {:ok, user} <- Repo.insert(changeset),
          {:ok, user} <- autofollow_users(user),
+         {:ok, _} <- Pleroma.User.WelcomeMessage.post_welcome_message_to_user(user),
          {:ok, _} <- try_send_confirmation_email(user) do
       {:ok, user}
     end
diff --git a/lib/pleroma/user/welcome_message.ex b/lib/pleroma/user/welcome_message.ex
new file mode 100644 (file)
index 0000000..6a0ec08
--- /dev/null
@@ -0,0 +1,33 @@
+defmodule Pleroma.User.WelcomeMessage do
+  alias Pleroma.User
+  alias Pleroma.Web.CommonAPI
+  import Ecto.Query
+
+  def post_welcome_message_to_user(user) do
+    with %User{} = sender_user <- welcome_user(),
+         message when is_binary(message) <- welcome_message() do
+      CommonAPI.post(sender_user, %{
+        "visibility" => "direct",
+        "status" => "@#{user.nickname}\n#{message}"
+      })
+    else
+      _ -> {:ok, nil}
+    end
+  end
+
+  defp welcome_user() do
+    if nickname = Pleroma.Config.get([:instance, :welcome_user_nickname]) do
+      from(u in User,
+        where: u.local == true,
+        where: u.nickname == ^nickname
+      )
+      |> Pleroma.Repo.one()
+    else
+      nil
+    end
+  end
+
+  defp welcome_message() do
+    Pleroma.Config.get([:instance, :welcome_message])
+  end
+end
index a99b79a0de773e73d369e766197234fe368d353a..d89fe379f9502387de07323d3b341c69a4a1f73c 100644 (file)
@@ -196,6 +196,25 @@ defmodule Pleroma.UserTest do
 
       assert User.following?(registered_user, user)
       refute User.following?(registered_user, remote_user)
+
+      Pleroma.Config.put([:instance, :autofollowed_nicknames], [])
+    end
+
+    test "it sends a welcome message if it is set" do
+      welcome_user = insert(:user)
+
+      Pleroma.Config.put([:instance, :welcome_user_nickname], welcome_user.nickname)
+      Pleroma.Config.put([:instance, :welcome_message], "Hello, this is a cool site")
+
+      cng = User.register_changeset(%User{}, @full_user_data)
+      {:ok, registered_user} = User.register(cng)
+
+      activity = Repo.one(Pleroma.Activity)
+      assert registered_user.ap_id in activity.recipients
+      assert activity.data["object"]["content"] =~ "cool site"
+
+      Pleroma.Config.put([:instance, :welcome_user_nickname], nil)
+      Pleroma.Config.put([:instance, :welcome_message], nil)
     end
 
     test "it requires an email, name, nickname and password, bio is optional" do