Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F665225
say_plugin.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
say_plugin.ex
View Options
defmodule
LSG.IRC.SayPlugin
do
def
irc_doc
do
"""
#
say
Say something...
* **!say `<channel>` `<text>`** say something on `channel`
* **!asay `<channel>` `<text>`** same but anonymously
You must be a member of the channel.
"""
end
def
start_link
()
do
GenServer
.
start_link
(
__MODULE__
,
[],
name
:
__MODULE__
)
end
def
init
([])
do
regopts
=
[
type
:
__MODULE__
]
{
:ok
,
_
}
=
Registry
.
register
(
IRC.PubSub
,
"trigger:say"
,
regopts
)
{
:ok
,
_
}
=
Registry
.
register
(
IRC.PubSub
,
"trigger:asay"
,
regopts
)
{
:ok
,
_
}
=
Registry
.
register
(
IRC.PubSub
,
"messages:private"
,
regopts
)
{
:ok
,
nil
}
end
def
handle_info
({
:irc
,
:trigger
,
"say"
,
m
=
%{
trigger
:
%{
type
:
:bang
,
args
:
[
target
|
text
]}}},
state
)
do
text
=
Enum
.
join
(
text
,
" "
)
say_for
(
m
.
account
,
target
,
text
,
true
)
{
:noreply
,
state
}
end
def
handle_info
({
:irc
,
:trigger
,
"asay"
,
m
=
%{
trigger
:
%{
type
:
:bang
,
args
:
[
target
|
text
]}}},
state
)
do
text
=
Enum
.
join
(
text
,
" "
)
say_for
(
m
.
account
,
target
,
text
,
false
)
{
:noreply
,
state
}
end
def
handle_info
({
:irc
,
:text
,
m
=
%{
text
:
"say "
<>
rest
}},
state
)
do
case
String
.
split
(
rest
,
" "
,
parts
:
2
)
do
[
target
,
text
]
->
say_for
(
m
.
account
,
target
,
text
,
true
)
_
->
nil
end
{
:noreply
,
state
}
end
def
handle_info
({
:irc
,
:text
,
m
=
%{
text
:
"asay "
<>
rest
}},
state
)
do
case
String
.
split
(
rest
,
" "
,
parts
:
2
)
do
[
target
,
text
]
->
say_for
(
m
.
account
,
target
,
text
,
false
)
_
->
nil
end
{
:noreply
,
state
}
end
def
handle_info
(
_
,
state
)
do
{
:noreply
,
state
}
end
defp
say_for
(
account
,
target
,
text
,
with_nick?
)
do
for
{
net
,
chan
}
<-
IRC.Membership
.
of_account
(
account
)
do
chan2
=
String
.
replace
(
chan
,
"
#
"
,
""
)
if
(
target
==
"
#{
net
}
/
#{
chan
}
"
||
target
==
"
#{
net
}
/
#{
chan2
}
"
||
target
==
chan
||
target
==
chan2
)
do
if
with_nick?
do
IRC
.
send_message_as
(
account
,
net
,
chan
,
text
)
else
IRC.Connection
.
broadcast_message
(
net
,
chan
,
text
)
end
end
end
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Fri, Feb 27, 1:56 PM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
86624
Default Alt Text
say_plugin.ex (2 KB)
Attached To
rNOLA Nola
Event Timeline
Log In to Comment