cover/Elixir.Tools.Sys.Tell.html

1 defmodule Tools.Sys.Tell.Schema do
2 def get(name, _state) do
3 %{name: name, description: description(), parameters: params()}
4 end
5
6 defp description do
7 "Send message to another agent"
8 end
9
10 defp params do
11 %{type: "object", properties: properties(), required: required()}
12 end
13
14 defp required do
15 ["recipient", "message"]
16 end
17
18 defp properties do
19 %{
20 recipient: %{type: "string", description: "Agent name to send message to"},
21 message: %{type: "string", description: "Message content"}
22 }
23 end
24 end
25
26 defmodule Tools.Sys.Tell do
27 import Agent.Harness, only: [dispatch: 3]
28 import Log, only: [log: 5, agent: 5]
29
30 @icon "📢"
31
32 97 defdelegate spec(name, state), to: Tools.Sys.Tell.Schema, as: :get
33
34
:-(
def icon, do: @icon
35
36 31 def exec(_, %{"recipient" => r, "message" => m}, %{name: s, skip_logs: l} = state) do
37 31 note(@icon, s, r, m, l)
38 31 dispatch(r, "[from #{s}] #{m}", :tell)
39 {"sent", state}
40 end
41
42
:-(
def exec(_, _, state) do
43 {"tell needs recipient and message", state}
44 end
45
46
:-(
defp note(_icon, _sender, _recipient, _message, true) do
47 :ok
48 end
49
50
:-(
defp note(_icon, "el", _recipient, _message, _) do
51 :ok
52 end
53
54 defp note(icon, sender, recipient, message, false) do
55 31 log(icon, "#{sender} → #{recipient}", ": ", message, :yellow)
56 31 agent(icon, "#{sender} → #{recipient}", ": ", message, %{name: sender})
57 end
58 end
Line Hits Source