Move event generators to seperate modules
This commit is contained in:
parent
e2cb61e2d8
commit
072ef27480
3 changed files with 242 additions and 192 deletions
|
@ -73,184 +73,6 @@ defmodule MatrixServer.Event do
|
|||
}
|
||||
end
|
||||
|
||||
@spec create_room(Room.t(), Account.t(), String.t()) :: t()
|
||||
def create_room(room, %Account{localpart: localpart} = creator, room_version) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
new(room, creator)
|
||||
| type: "m.room.create",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"creator" => mxid,
|
||||
"room_version" => room_version || MatrixServer.default_room_version()
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec join(Room.t(), Account.t()) :: t()
|
||||
def join(room, %Account{localpart: localpart} = sender) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: mxid,
|
||||
content: %{
|
||||
"membership" => "join"
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec power_levels(Room.t(), Account.t()) :: t()
|
||||
def power_levels(room, %Account{localpart: localpart} = sender) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.power_levels",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"ban" => 50,
|
||||
"events" => %{},
|
||||
"events_default" => 0,
|
||||
"invite" => 50,
|
||||
"kick" => 50,
|
||||
"redact" => 50,
|
||||
"state_default" => 50,
|
||||
"users" => %{
|
||||
mxid => 50
|
||||
},
|
||||
"users_default" => 0,
|
||||
"notifications" => %{
|
||||
"room" => 50
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec name(Room.t(), Account.t(), String.t()) :: %Event{}
|
||||
def name(room, sender, name) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.name",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"name" => name
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec topic(Room.t(), Account.t(), String.t()) :: t()
|
||||
def topic(room, sender, topic) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.topic",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"topic" => topic
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec join_rules(Room.t(), Account.t(), String.t()) :: t()
|
||||
def join_rules(room, sender, join_rule) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.join_rules",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"join_rule" => join_rule
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec history_visibility(Room.t(), Account.t(), String.t()) :: t()
|
||||
def history_visibility(room, sender, history_visibility) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.history_visibility",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"history_visibility" => history_visibility
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec guest_access(Room.t(), Account.t(), String.t()) :: t()
|
||||
def guest_access(room, sender, guest_access) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.guest_access",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"guest_access" => guest_access
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec invite(Room.t(), Account.t(), String.t()) :: t()
|
||||
def invite(room, sender, user_id) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: %{
|
||||
"membership" => "invite"
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec leave(Room.t(), Account.t()) :: t()
|
||||
def leave(room, sender) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: Account.get_mxid(sender),
|
||||
content: %{
|
||||
"membership" => "leave"
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec kick(Room.t(), Account.t(), String.t(), String.t() | nil) :: t()
|
||||
def kick(room, sender, user_id, reason \\ nil) do
|
||||
content = %{"membership" => "leave"}
|
||||
content = if reason, do: Map.put(content, "reason", reason), else: content
|
||||
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: content
|
||||
}
|
||||
end
|
||||
|
||||
@spec ban(Room.t(), Account.t(), String.t(), String.t() | nil) :: t()
|
||||
def ban(room, sender, user_id, reason \\ nil) do
|
||||
content = %{"membership" => "ban"}
|
||||
content = if reason, do: Map.put(content, "reason", reason), else: content
|
||||
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: content
|
||||
}
|
||||
end
|
||||
|
||||
@spec unban(Room.t(), Account.t(), String.t()) :: t()
|
||||
def unban(room, sender, user_id) do
|
||||
%Event{
|
||||
new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: %{
|
||||
"membership" => "leave"
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
@spec is_control_event(t()) :: boolean()
|
||||
def is_control_event(%Event{type: "m.room.power_levels", state_key: ""}), do: true
|
||||
def is_control_event(%Event{type: "m.room.join_rules", state_key: ""}), do: true
|
||||
|
|
228
lib/matrix_server/schema/event/generators.ex
Normal file
228
lib/matrix_server/schema/event/generators.ex
Normal file
|
@ -0,0 +1,228 @@
|
|||
defmodule MatrixServer.Event.Join do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t()) :: Event.t()
|
||||
def new(room, %Account{localpart: localpart} = sender) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: mxid,
|
||||
content: %{
|
||||
"membership" => "join"
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.CreateRoom do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, %Account{localpart: localpart} = creator, room_version) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
Event.new(room, creator)
|
||||
| type: "m.room.create",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"creator" => mxid,
|
||||
"room_version" => room_version || MatrixServer.default_room_version()
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.PowerLevels do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t()) :: Event.t()
|
||||
def new(room, %Account{localpart: localpart} = sender) do
|
||||
mxid = MatrixServer.get_mxid(localpart)
|
||||
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.power_levels",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"ban" => 50,
|
||||
"events" => %{},
|
||||
"events_default" => 0,
|
||||
"invite" => 50,
|
||||
"kick" => 50,
|
||||
"redact" => 50,
|
||||
"state_default" => 50,
|
||||
"users" => %{
|
||||
mxid => 50
|
||||
},
|
||||
"users_default" => 0,
|
||||
"notifications" => %{
|
||||
"room" => 50
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Name do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, name) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.name",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"name" => name
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Topic do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, topic) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.topic",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"topic" => topic
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.JoinRules do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, join_rule) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.join_rules",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"join_rule" => join_rule
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.HistoryVisibility do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, history_visibility) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.history_visibility",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"history_visibility" => history_visibility
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.GuestAccess do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, guest_access) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.guest_access",
|
||||
state_key: "",
|
||||
content: %{
|
||||
"guest_access" => guest_access
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Invite do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, user_id) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: %{
|
||||
"membership" => "invite"
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Leave do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t()) :: Event.t()
|
||||
def new(room, sender) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: Account.get_mxid(sender),
|
||||
content: %{
|
||||
"membership" => "leave"
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Kick do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t(), String.t() | nil) :: Event.t()
|
||||
def new(room, sender, user_id, reason \\ nil) do
|
||||
content = %{"membership" => "leave"}
|
||||
content = if reason, do: Map.put(content, "reason", reason), else: content
|
||||
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: content
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Ban do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
|
||||
@spec new(Room.t(), Account.t(), String.t(), String.t() | nil) :: Event.t()
|
||||
def new(room, sender, user_id, reason \\ nil) do
|
||||
content = %{"membership" => "ban"}
|
||||
content = if reason, do: Map.put(content, "reason", reason), else: content
|
||||
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: content
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule MatrixServer.Event.Unban do
|
||||
alias MatrixServer.{Event, Account, Room}
|
||||
@spec new(Room.t(), Account.t(), String.t()) :: Event.t()
|
||||
def new(room, sender, user_id) do
|
||||
%Event{
|
||||
Event.new(room, sender)
|
||||
| type: "m.room.member",
|
||||
state_key: user_id,
|
||||
content: %{
|
||||
"membership" => "leave"
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue