Module: Lich::Messaging

Defined in:
documented/messaging.rb

Overview

The Messaging module contains methods for handling messaging capabilities in Lich.

Examples:

Using the Messaging module

Lich::Messaging.msg("info", "This is a message")

Class Method Summary collapse

Class Method Details

Creates a command link message.

Examples:

Creating a command link

link = Lich::Messaging.make_cmd_link("Click here", "do_something")

Parameters:

  • link_text (String)

    The text to display for the link.

  • link_action (String)

    The action to perform when the link is clicked.

  • encode (Boolean) (defaults to: true)

    Whether to encode the message (default: true).

Returns:

  • (String)

    The formatted command link message.



178
179
180
# File 'documented/messaging.rb', line 178

def self.make_cmd_link(link_text, link_action, encode: true)
  return msg_format("cmd", link_text, cmd_link: link_action, encode: encode)
end

.mono(msg, encode: false) ⇒ void

This method returns an undefined value.

defaulting encoding here to false instead of true like other methods due to backwards compatibility that it never encoded before whereas all the other methods were already encoding and therefor should default to allow for them. Sends a message in mono format.

Examples:

Sending a mono message

Lich::Messaging.mono("This is a mono message.")

Parameters:

  • msg (String)

    The message to send.

  • encode (Boolean) (defaults to: false)

    Whether to encode the message (default: false).

Raises:

  • (StandardError)

    If msg is not a String.



191
192
193
194
195
196
197
198
199
# File 'documented/messaging.rb', line 191

def self.mono(msg, encode: false)
  return raise StandardError.new 'Lich::Messaging.mono only works with String parameters!' unless msg.is_a?(String)
  msg = xml_encode(msg) if encode
  if $frontend =~ /^(?:stormfront|wrayth|genie)$/i
    _respond "<output class=\"mono\"/>\n" + msg + "\n<output class=\"\"/>"
  else
    _respond msg.split("\n")
  end
end

.monsterbold(msg, encode: true) ⇒ String

Formats a message to be displayed in monster bold style.

Examples:

Formatting a monster bold message

bold_msg = Lich::Messaging.monsterbold("A fierce dragon appears!")

Parameters:

  • msg (String)

    The message to format.

  • encode (Boolean) (defaults to: true)

    Whether to encode the message (default: true).

Returns:

  • (String)

    The formatted message.



33
34
35
36
# File 'documented/messaging.rb', line 33

def self.monsterbold(msg, encode: true)
  # return monsterbold_start + self.xml_encode(msg) + monsterbold_end
  return msg_format("monster", msg, encode: encode)
end

.msg(type = "info", msg = "", encode: true) ⇒ void

This method returns an undefined value.

Sends a formatted message to the user.

Examples:

Sending a message

Lich::Messaging.msg("info", "This is a test message.")

Parameters:

  • type (String) (defaults to: "info")

    The type of message (default: “info”).

  • msg (String) (defaults to: "")

    The message to send.

  • encode (Boolean) (defaults to: true)

    Whether to encode the message (default: true).



166
167
168
169
# File 'documented/messaging.rb', line 166

def self.msg(type = "info", msg = "", encode: true)
  return if type == "debug" && (Lich.debug_messaging.nil? || Lich.debug_messaging == "false" || Lich.debug_messaging == false)
  _respond msg_format(type, msg, encode: encode)
end

.msg_format(type = "info", msg = "", cmd_link: nil, encode: true) ⇒ String

Formats a message with specific styling based on type.

Examples:

Formatting an info message

formatted_msg = Lich::Messaging.msg_format("info", "This is an info message.")

Parameters:

  • type (String) (defaults to: "info")

    The type of message (default: “info”).

  • msg (String) (defaults to: "")

    The message to format.

  • cmd_link (String, nil) (defaults to: nil)

    Optional command link for formatting.

  • encode (Boolean) (defaults to: true)

    Whether to encode the message (default: true).

Returns:

  • (String)

    The formatted message.



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'documented/messaging.rb', line 82

def self.msg_format(type = "info", msg = "", cmd_link: nil, encode: true)
  msg = xml_encode(msg) if encode
  preset_color_before = ""
  preset_color_after = ""

  wizard_color = { "white" => 128, "black" => 129, "dark blue" => 130, "dark green" => 131, "dark teal" => 132,
    "dark red" => 133, "purple" => 134, "gold" => 135, "light grey" => 136, "blue" => 137,
    "bright green" => 138, "teal" => 139, "red" => 140, "pink" => 141, "yellow" => 142 }

  if $frontend =~ /^(?:stormfront|frostbite|profanity|wrayth)$/
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = monsterbold_end
    when "warn", "orange", "gold", "thought"
      preset_color_before = "<preset id='thought'>"
      preset_color_after = "</preset>"
    when "info", "teal", "whisper"
      preset_color_before = "<preset id='whisper'>"
      preset_color_after = "</preset>"
    when "green", "speech", "debug", "light green"
      preset_color_before = "<preset id='speech'>"
      preset_color_after = "</preset>"
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd"
      preset_color_before = "<d cmd='#{xml_encode(cmd_link)}'>"
      preset_color_after = "</d>"
    end
  elsif $frontend =~ /^(?:wizard|avalon)$/
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = (monsterbold_end + " ")
    when "warn", "orange", "gold", "thought"
      preset_color_before = wizard_color["gold"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "info", "teal", "whisper"
      preset_color_before = wizard_color["teal"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "green", "speech", "debug", "light green"
      preset_color_before = wizard_color["bright green"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd" # these browsers can't handle links
      preset_color_before = ""
      preset_color_after = ""
    end
  else
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = monsterbold_end
    when "warn", "orange", "gold", "thought"
      preset_color_before = "!! "
      preset_color_after = ""
    when "info", "teal", "whisper"
      preset_color_before = "-- "
      preset_color_after = ""
    when "green", "speech", "debug", "light green"
      preset_color_before = ">> "
      preset_color_after = ""
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd" # these browsers can't handle links
      preset_color_before = ""
      preset_color_after = ""
    end
  end

  return (preset_color_before + msg + preset_color_after)
end

.stream_window(msg, window = "familiar", encode: true) ⇒ void

This method returns an undefined value.

Prepares a message for display in a specific stream window.

Examples:

Displaying a message in the familiar stream

Lich::Messaging.stream_window("Hello, familiar!", "familiar")

Parameters:

  • msg (String)

    The message to display.

  • window (String) (defaults to: "familiar")

    The name of the stream window (default: “familiar”).

  • encode (Boolean) (defaults to: true)

    Whether to encode the message (default: true).



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'documented/messaging.rb', line 45

def self.stream_window(msg, window = "familiar", encode: true)
  msg = xml_encode(msg) if encode
  if XMLData.game =~ /^GS/
    allowed_streams = ["familiar", "speech", "thoughts", "loot", "voln"]
  elsif XMLData.game =~ /^DR/
    allowed_streams = ["familiar", "speech", "thoughts", "combat"]
  end

  stream_window_before_txt = ""
  stream_window_after_txt = ""
  if $frontend =~ /stormfront|profanity/i && allowed_streams.include?(window)
    stream_window_before_txt = "<pushStream id=\"#{window}\" ifClosedStyle=\"watching\"/>"
    stream_window_after_txt = "\r\n<popStream/>\r\n"
  else
    if window =~ /familiar/i
      stream_window_before_txt = "\034GSe\r\n"
      stream_window_after_txt = "\r\n\034GSf\r\n"
    elsif window =~ /thoughts/i
      stream_window_before_txt = "You hear the faint thoughts of LICH-MESSAGE echo in your mind:\r\n"
      stream_window_after_txt = ""
    elsif window =~ /voln/i
      stream_window_before_txt = %{The Symbol of Thought begins to burn in your mind and you hear LICH-MESSAGE thinking, "}
      stream_window_after_txt = %{"\r\n}
    end
  end

  _respond stream_window_before_txt + msg + stream_window_after_txt
end

.xml_encode(msg) ⇒ String

Encodes a message into XML format.

Examples:

Encoding a message

encoded_msg = Lich::Messaging.xml_encode("Hello, World!")

Parameters:

  • msg (String)

    The message to encode.

Returns:

  • (String)

    The XML-encoded message.



19
20
21
22
23
24
25
# File 'documented/messaging.rb', line 19

def self.xml_encode(msg)
  if $frontend =~ /^(wizard|avalon)$/i
    sf_to_wiz(msg.encode(:xml => :text), bypass_multiline: true)
  else
    msg.encode(:xml => :text)
  end
end