spox-mod_spox 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +174 -0
- data/INSTALL +15 -0
- data/LICENSE +674 -0
- data/README.rdoc +73 -0
- data/bin/mod_spox +112 -0
- data/data/mod_spox/extras/AOLSpeak.rb +257 -0
- data/data/mod_spox/extras/AutoKick.rb +152 -0
- data/data/mod_spox/extras/AutoMode.rb +122 -0
- data/data/mod_spox/extras/AutoRejoin.rb +37 -0
- data/data/mod_spox/extras/Bash.rb +55 -0
- data/data/mod_spox/extras/Bouncer.rb +220 -0
- data/data/mod_spox/extras/Bullshit.rb +19 -0
- data/data/mod_spox/extras/Bytes.rb +11 -0
- data/data/mod_spox/extras/Confess.rb +244 -0
- data/data/mod_spox/extras/DCC.rb +182 -0
- data/data/mod_spox/extras/DevWatch.rb +153 -0
- data/data/mod_spox/extras/DownForEveryoneOrJustMe.rb +47 -0
- data/data/mod_spox/extras/EightBall.rb +33 -0
- data/data/mod_spox/extras/FML.rb +35 -0
- data/data/mod_spox/extras/FloodKicker.rb +129 -0
- data/data/mod_spox/extras/Fortune.rb +76 -0
- data/data/mod_spox/extras/GoogleIt.rb +13 -0
- data/data/mod_spox/extras/Headers.rb +59 -0
- data/data/mod_spox/extras/Karma.rb +302 -0
- data/data/mod_spox/extras/Locator.rb +44 -0
- data/data/mod_spox/extras/Logger.rb +182 -0
- data/data/mod_spox/extras/LolSpeak.rb +21 -0
- data/data/mod_spox/extras/NickServ.rb +84 -0
- data/data/mod_spox/extras/PhpCli.rb +308 -0
- data/data/mod_spox/extras/PhpFuncLookup.rb +297 -0
- data/data/mod_spox/extras/Pinger.rb +11 -0
- data/data/mod_spox/extras/Quotes.rb +79 -0
- data/data/mod_spox/extras/RegexTracker.rb +158 -0
- data/data/mod_spox/extras/Roulette.rb +267 -0
- data/data/mod_spox/extras/RubyCli.rb +93 -0
- data/data/mod_spox/extras/Search.rb +49 -0
- data/data/mod_spox/extras/Seen.rb +150 -0
- data/data/mod_spox/extras/Slashdot.rb +35 -0
- data/data/mod_spox/extras/SlashdotHeadlineGenerator.rb +500 -0
- data/data/mod_spox/extras/Talk.rb +32 -0
- data/data/mod_spox/extras/Topten.rb +103 -0
- data/data/mod_spox/extras/TracTicket.rb +66 -0
- data/data/mod_spox/extras/Translate.rb +132 -0
- data/data/mod_spox/extras/Twitter.rb +458 -0
- data/data/mod_spox/extras/UrbanDictionary.rb +55 -0
- data/data/mod_spox/extras/Weather.rb +55 -0
- data/data/mod_spox/plugins/Authenticator.rb +289 -0
- data/data/mod_spox/plugins/Banner.rb +585 -0
- data/data/mod_spox/plugins/BotNick.rb +18 -0
- data/data/mod_spox/plugins/Helper.rb +49 -0
- data/data/mod_spox/plugins/Initializer.rb +35 -0
- data/data/mod_spox/plugins/Joiner.rb +23 -0
- data/data/mod_spox/plugins/Nicker.rb +14 -0
- data/data/mod_spox/plugins/Parter.rb +23 -0
- data/data/mod_spox/plugins/Permissions.rb +60 -0
- data/data/mod_spox/plugins/PluginLoader.rb +180 -0
- data/data/mod_spox/plugins/Ponger.rb +70 -0
- data/data/mod_spox/plugins/PoolConfig.rb +52 -0
- data/data/mod_spox/plugins/Quitter.rb +15 -0
- data/data/mod_spox/plugins/Servers.rb +57 -0
- data/data/mod_spox/plugins/Status.rb +31 -0
- data/data/mod_spox/plugins/Triggers.rb +85 -0
- data/lib/mod_spox/BaseConfig.rb +51 -0
- data/lib/mod_spox/Bot.rb +604 -0
- data/lib/mod_spox/BotConfig.rb +65 -0
- data/lib/mod_spox/ConfigurationWizard.rb +180 -0
- data/lib/mod_spox/Database.rb +51 -0
- data/lib/mod_spox/Exceptions.rb +84 -0
- data/lib/mod_spox/Helpers.rb +122 -0
- data/lib/mod_spox/Loader.rb +60 -0
- data/lib/mod_spox/Logger.rb +37 -0
- data/lib/mod_spox/MessageFactory.rb +112 -0
- data/lib/mod_spox/Pipeline.rb +207 -0
- data/lib/mod_spox/Plugin.rb +97 -0
- data/lib/mod_spox/PluginHolder.rb +22 -0
- data/lib/mod_spox/PluginManager.rb +257 -0
- data/lib/mod_spox/PriorityQueue.rb +69 -0
- data/lib/mod_spox/Socket.rb +201 -0
- data/lib/mod_spox/Sockets.rb +226 -0
- data/lib/mod_spox/Timer.rb +60 -0
- data/lib/mod_spox/Version.rb +14 -0
- data/lib/mod_spox/handlers/BadNick.rb +19 -0
- data/lib/mod_spox/handlers/Bounce.rb +24 -0
- data/lib/mod_spox/handlers/Created.rb +27 -0
- data/lib/mod_spox/handlers/Handler.rb +39 -0
- data/lib/mod_spox/handlers/Invite.rb +28 -0
- data/lib/mod_spox/handlers/Join.rb +38 -0
- data/lib/mod_spox/handlers/Kick.rb +36 -0
- data/lib/mod_spox/handlers/LuserChannels.rb +19 -0
- data/lib/mod_spox/handlers/LuserClient.rb +18 -0
- data/lib/mod_spox/handlers/LuserMe.rb +16 -0
- data/lib/mod_spox/handlers/LuserOp.rb +19 -0
- data/lib/mod_spox/handlers/LuserUnknown.rb +19 -0
- data/lib/mod_spox/handlers/Mode.rb +62 -0
- data/lib/mod_spox/handlers/Motd.rb +38 -0
- data/lib/mod_spox/handlers/MyInfo.rb +24 -0
- data/lib/mod_spox/handlers/Names.rb +86 -0
- data/lib/mod_spox/handlers/Nick.rb +50 -0
- data/lib/mod_spox/handlers/NickInUse.rb +19 -0
- data/lib/mod_spox/handlers/Notice.rb +35 -0
- data/lib/mod_spox/handlers/Part.rb +39 -0
- data/lib/mod_spox/handlers/Ping.rb +25 -0
- data/lib/mod_spox/handlers/Pong.rb +23 -0
- data/lib/mod_spox/handlers/Privmsg.rb +39 -0
- data/lib/mod_spox/handlers/Quit.rb +29 -0
- data/lib/mod_spox/handlers/Topic.rb +38 -0
- data/lib/mod_spox/handlers/Welcome.rb +30 -0
- data/lib/mod_spox/handlers/Who.rb +83 -0
- data/lib/mod_spox/handlers/Whois.rb +117 -0
- data/lib/mod_spox/handlers/YourHost.rb +20 -0
- data/lib/mod_spox/messages/Messages.rb +6 -0
- data/lib/mod_spox/messages/incoming/BadNick.rb +16 -0
- data/lib/mod_spox/messages/incoming/Bounce.rb +18 -0
- data/lib/mod_spox/messages/incoming/Created.rb +15 -0
- data/lib/mod_spox/messages/incoming/Invite.rb +21 -0
- data/lib/mod_spox/messages/incoming/Join.rb +19 -0
- data/lib/mod_spox/messages/incoming/Kick.rb +26 -0
- data/lib/mod_spox/messages/incoming/LuserChannels.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserClient.rb +24 -0
- data/lib/mod_spox/messages/incoming/LuserMe.rb +18 -0
- data/lib/mod_spox/messages/incoming/LuserOp.rb +15 -0
- data/lib/mod_spox/messages/incoming/LuserUnknown.rb +15 -0
- data/lib/mod_spox/messages/incoming/Message.rb +22 -0
- data/lib/mod_spox/messages/incoming/Mode.rb +42 -0
- data/lib/mod_spox/messages/incoming/Motd.rb +18 -0
- data/lib/mod_spox/messages/incoming/MyInfo.rb +24 -0
- data/lib/mod_spox/messages/incoming/Names.rb +24 -0
- data/lib/mod_spox/messages/incoming/Nick.rb +26 -0
- data/lib/mod_spox/messages/incoming/NickInUse.rb +15 -0
- data/lib/mod_spox/messages/incoming/Notice.rb +9 -0
- data/lib/mod_spox/messages/incoming/Part.rb +21 -0
- data/lib/mod_spox/messages/incoming/Ping.rb +18 -0
- data/lib/mod_spox/messages/incoming/Pong.rb +9 -0
- data/lib/mod_spox/messages/incoming/Privmsg.rb +90 -0
- data/lib/mod_spox/messages/incoming/Quit.rb +18 -0
- data/lib/mod_spox/messages/incoming/Topic.rb +21 -0
- data/lib/mod_spox/messages/incoming/TopicInfo.rb +21 -0
- data/lib/mod_spox/messages/incoming/Welcome.rb +27 -0
- data/lib/mod_spox/messages/incoming/Who.rb +18 -0
- data/lib/mod_spox/messages/incoming/Whois.rb +49 -0
- data/lib/mod_spox/messages/incoming/YourHost.rb +18 -0
- data/lib/mod_spox/messages/internal/BotInitialized.rb +11 -0
- data/lib/mod_spox/messages/internal/ChangeNick.rb +15 -0
- data/lib/mod_spox/messages/internal/Connected.rb +20 -0
- data/lib/mod_spox/messages/internal/ConnectionFailed.rb +23 -0
- data/lib/mod_spox/messages/internal/DCCListener.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCRequest.rb +12 -0
- data/lib/mod_spox/messages/internal/DCCSocket.rb +19 -0
- data/lib/mod_spox/messages/internal/Disconnected.rb +8 -0
- data/lib/mod_spox/messages/internal/Disconnecting.rb +8 -0
- data/lib/mod_spox/messages/internal/EstablishConnection.rb +22 -0
- data/lib/mod_spox/messages/internal/HaltBot.rb +8 -0
- data/lib/mod_spox/messages/internal/NickRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/NickResponse.rb +15 -0
- data/lib/mod_spox/messages/internal/PluginLoadRequest.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginLoadResponse.rb +17 -0
- data/lib/mod_spox/messages/internal/PluginModuleRequest.rb +14 -0
- data/lib/mod_spox/messages/internal/PluginModuleResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginReload.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginRequest.rb +18 -0
- data/lib/mod_spox/messages/internal/PluginResponse.rb +21 -0
- data/lib/mod_spox/messages/internal/PluginUnloadRequest.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginUnloadResponse.rb +9 -0
- data/lib/mod_spox/messages/internal/PluginsReady.rb +10 -0
- data/lib/mod_spox/messages/internal/QueueSocket.rb +8 -0
- data/lib/mod_spox/messages/internal/Reconnect.rb +8 -0
- data/lib/mod_spox/messages/internal/Request.rb +15 -0
- data/lib/mod_spox/messages/internal/Response.rb +15 -0
- data/lib/mod_spox/messages/internal/Shutdown.rb +8 -0
- data/lib/mod_spox/messages/internal/SignaturesUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/StatusRequest.rb +10 -0
- data/lib/mod_spox/messages/internal/StatusResponse.rb +18 -0
- data/lib/mod_spox/messages/internal/TimerAdd.rb +36 -0
- data/lib/mod_spox/messages/internal/TimerClear.rb +16 -0
- data/lib/mod_spox/messages/internal/TimerRemove.rb +23 -0
- data/lib/mod_spox/messages/internal/TimerResponse.rb +34 -0
- data/lib/mod_spox/messages/internal/TriggersUpdate.rb +8 -0
- data/lib/mod_spox/messages/internal/UnqueueSocket.rb +8 -0
- data/lib/mod_spox/messages/outgoing/Admin.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Away.rb +11 -0
- data/lib/mod_spox/messages/outgoing/ChannelMode.rb +25 -0
- data/lib/mod_spox/messages/outgoing/Connect.rb +24 -0
- data/lib/mod_spox/messages/outgoing/Die.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Info.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Invite.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Ison.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Join.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Kick.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Kill.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Links.rb +19 -0
- data/lib/mod_spox/messages/outgoing/List.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Lusers.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Motd.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Names.rb +20 -0
- data/lib/mod_spox/messages/outgoing/Nick.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Notice.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Oper.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Part.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Pass.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Ping.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Pong.rb +17 -0
- data/lib/mod_spox/messages/outgoing/Privmsg.rb +43 -0
- data/lib/mod_spox/messages/outgoing/Quit.rb +11 -0
- data/lib/mod_spox/messages/outgoing/Raw.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Rehash.rb +9 -0
- data/lib/mod_spox/messages/outgoing/Restart.rb +9 -0
- data/lib/mod_spox/messages/outgoing/ServList.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Simple.rb +12 -0
- data/lib/mod_spox/messages/outgoing/Squery.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Squit.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Stats.rb +18 -0
- data/lib/mod_spox/messages/outgoing/Summon.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Time.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Topic.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Trace.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Unaway.rb +9 -0
- data/lib/mod_spox/messages/outgoing/User.rb +23 -0
- data/lib/mod_spox/messages/outgoing/UserHost.rb +15 -0
- data/lib/mod_spox/messages/outgoing/UserMode.rb +19 -0
- data/lib/mod_spox/messages/outgoing/Users.rb +15 -0
- data/lib/mod_spox/messages/outgoing/Version.rb +16 -0
- data/lib/mod_spox/messages/outgoing/Who.rb +23 -0
- data/lib/mod_spox/messages/outgoing/WhoWas.rb +23 -0
- data/lib/mod_spox/messages/outgoing/Whois.rb +19 -0
- data/lib/mod_spox/migrations/001_initialize_models.rb +115 -0
- data/lib/mod_spox/migrations/002_persistent_sigs.rb +14 -0
- data/lib/mod_spox/migrations/003_auth_restructure.rb +31 -0
- data/lib/mod_spox/migrations/004_mode_index_fix.rb +18 -0
- data/lib/mod_spox/migrations/005_nick_mode_nopark.rb +18 -0
- data/lib/mod_spox/models/Auth.rb +65 -0
- data/lib/mod_spox/models/AuthMask.rb +13 -0
- data/lib/mod_spox/models/Channel.rb +89 -0
- data/lib/mod_spox/models/Config.rb +30 -0
- data/lib/mod_spox/models/Group.rb +30 -0
- data/lib/mod_spox/models/Models.rb +4 -0
- data/lib/mod_spox/models/Nick.rb +195 -0
- data/lib/mod_spox/models/NickMode.rb +32 -0
- data/lib/mod_spox/models/Server.rb +27 -0
- data/lib/mod_spox/models/Setting.rb +52 -0
- data/lib/mod_spox/models/Signature.rb +52 -0
- data/lib/mod_spox/models/Trigger.rb +9 -0
- data/lib/mod_spox/rfc2812.rb +49 -0
- data/populate_gemspec.rb +15 -0
- data/tests/BotHolder.rb +24 -0
- data/tests/handlers/tc_BadNick.rb +21 -0
- data/tests/handlers/tc_Created.rb +24 -0
- data/tests/handlers/tc_Invite.rb +50 -0
- data/tests/handlers/tc_Join.rb +33 -0
- data/tests/handlers/tc_Kick.rb +32 -0
- data/tests/handlers/tc_Mode.rb +85 -0
- data/tests/handlers/tc_Names.rb +35 -0
- data/tests/handlers/tc_Nick.rb +55 -0
- data/tests/handlers/tc_Part.rb +44 -0
- data/tests/handlers/tc_Ping.rb +40 -0
- data/tests/handlers/tc_Pong.rb +28 -0
- data/tests/handlers/tc_Privmsg.rb +85 -0
- data/tests/handlers/tc_Quit.rb +40 -0
- data/tests/handlers/tc_Who.rb +50 -0
- data/tests/handlers/tc_Whois.rb +61 -0
- data/tests/models/tc_Auth.rb +39 -0
- data/tests/models/tc_Channel.rb +52 -0
- data/tests/models/tc_Config.rb +19 -0
- data/tests/models/tc_Nick.rb +144 -0
- data/tests/models/tc_NickMode.rb +40 -0
- data/tests/models/tc_Setting.rb +21 -0
- data/tests/models/tc_Signature.rb +14 -0
- data/tests/run_tests.rb +6 -0
- metadata +362 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'soap/wsdlDriver'
|
2
|
+
|
3
|
+
class UrbanDictionary < ModSpox::Plugin
|
4
|
+
|
5
|
+
include Messages::Outgoing
|
6
|
+
include Models
|
7
|
+
|
8
|
+
def initialize(pipeline)
|
9
|
+
super(pipeline)
|
10
|
+
add_sig(:sig => 'udefine (?!key)((\d+ )?(.+))', :method => :define, :desc => 'Find the definition of a word or phrase', :params => [:fullmatch, :number, :term])
|
11
|
+
add_sig(:sig => 'udefine key (.+)', :method => :key, :group => Models::Group.filter(:name => 'admin').first, :desc => 'Set API key', :params => [:key])
|
12
|
+
end
|
13
|
+
|
14
|
+
def define(message, params)
|
15
|
+
key = Config.val(:urban_key)
|
16
|
+
if(key)
|
17
|
+
site = 'http://api.urbandictionary.com/soap?wsdl'
|
18
|
+
result = params[:number] ? params[:number].to_i - 1 : 0
|
19
|
+
begin
|
20
|
+
proxy = SOAP::WSDLDriverFactory.new(site).create_rpc_driver
|
21
|
+
#udict = SOAP::RPC::Driver.new(site, 'urn:UrbanSearch')
|
22
|
+
#udict.add_method('lookup', 'key', 'term')
|
23
|
+
defs = proxy.lookup(key, params[:term])
|
24
|
+
#defs = udict.lookup(key, params[:term])
|
25
|
+
output = []
|
26
|
+
if defs.size < result + 1
|
27
|
+
reply message.replyto, "Error: Definition number #{result+1} for term: #{params[:term]} not found."
|
28
|
+
else
|
29
|
+
defin = defs[result].definition.length > 390 ? defs[result].definition.slice(0..390) + " *[CUT]*" : defs[result].definition
|
30
|
+
exp = defs[result].example.length > 390 ? defs[result].example.slice(0..390) + " *[CUT]*" : defs[result].example
|
31
|
+
output << "Definition for \2#{defs[result].word}:\2"
|
32
|
+
output << Helpers.convert_entities(defin.gsub(/[\r\n\s]+/, ' '))
|
33
|
+
output << "\2Example usage:\2 #{Helpers.convert_entities(exp.gsub(/[\r\n\s]+/, ' '))}" if exp.length > 0
|
34
|
+
reply message.replyto, output
|
35
|
+
end
|
36
|
+
rescue Timeout::Error
|
37
|
+
reply message.replyto, "Failed to establish connection to server."
|
38
|
+
rescue Object => boom
|
39
|
+
reply message.replyto, "Unexpected error encountered: #{boom}"
|
40
|
+
end
|
41
|
+
else
|
42
|
+
reply message.replyto, "\2Error:\2 No valid key available for dictionary"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def key(message, params)
|
47
|
+
if(message.is_public?)
|
48
|
+
reply message.replyto, 'I don\'t set keys in public'
|
49
|
+
else
|
50
|
+
Config.set(:urban_key, params[:key])
|
51
|
+
reply message.replyto, 'Urban Dictionary API key has been set.'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Weather < ModSpox::Plugin
|
2
|
+
|
3
|
+
include Models
|
4
|
+
|
5
|
+
def initialize(pipeline)
|
6
|
+
super
|
7
|
+
add_sig(:sig => 'weather (\d+)', :method => :weather, :desc => 'Show weather for given zipcode', :params => [:zipcode])
|
8
|
+
end
|
9
|
+
|
10
|
+
def weather(message, params)
|
11
|
+
connection = Net::HTTP.new('www.weather.com', 80)
|
12
|
+
response = connection.request_get("/weather/local/#{params[:zipcode]}?lswe=96094&lwsa=WeatherLocalUndeclared&from=whatwhere", nil)
|
13
|
+
begin
|
14
|
+
response.value
|
15
|
+
page = response.body.gsub(/[\r\n]/, ' ')
|
16
|
+
if page =~ /R for (.+?) \(.+?>([0-9]+)&.+?Like<BR> ([0-9]+)&.+?UV In.+?TextA">(.+?)\s*<.+?Wind.+?TextA">(.+?)\s*<.+?idity.+?TextA">(.+?)\s*<.+?ssure.+?TextA">(.+?)\s*<.+?oint.+?TextA">(.+?)\s*<.+?bility.+?TextA">(.+?)\s*</
|
17
|
+
location = $1
|
18
|
+
curtemp = $2
|
19
|
+
feeltemp = $3
|
20
|
+
uv = $4
|
21
|
+
wind = $5
|
22
|
+
humid = $6
|
23
|
+
pressure = $7
|
24
|
+
dewpoint = $8
|
25
|
+
visibility = $9
|
26
|
+
future = Array.new
|
27
|
+
i = 0
|
28
|
+
page.scan(/.+?ialLink11"><B>(.+?)</).each{|match| future.push(match[0])}
|
29
|
+
page.scan(/font.+?lueFont10">([^<].+?)<\/nobr>/).each{|match|
|
30
|
+
future[i] << "|#{match[0].gsub(/<.+?>/, '').gsub(/&.+?;/, '').gsub(/\s+/, ' ')}"
|
31
|
+
i += 1
|
32
|
+
}
|
33
|
+
i = 0
|
34
|
+
for item in future do
|
35
|
+
if item =~ /^([^\|]+)\|(.+)$/
|
36
|
+
future[i] = "\2#{$1}:\2 #{$2}"
|
37
|
+
else
|
38
|
+
future.delete_at(i)
|
39
|
+
end
|
40
|
+
i += 1
|
41
|
+
end
|
42
|
+
output = ["Weather for: \2#{location}\2"]
|
43
|
+
output << "Current Temp: #{curtemp} - Feels like: #{feeltemp}"
|
44
|
+
output << "[UV Index: #{uv.gsub(/&.+?;/, '')}][Wind: #{wind.gsub(/&.+?;/, '')}][Humidity: #{humid.gsub(/&.+?;/, '')}][Pressure: #{pressure.gsub(/&.+?;/, '')}][Dew Point: #{dewpoint.gsub(/&.+?;/, '')}][Visibility: #{visibility.gsub(/&.+?;/, '')}]"
|
45
|
+
output << future.values_at(0..2).join(' ')
|
46
|
+
reply message.replyto, output
|
47
|
+
else
|
48
|
+
reply message.replyto, "Failed to retrieve weather data."
|
49
|
+
end
|
50
|
+
rescue Object => boom
|
51
|
+
reply message.replyto, "Error: Received invalid response from server"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
require 'mod_spox/messages/outgoing/Raw'
|
2
|
+
require 'mod_spox/messages/internal/TimerAdd'
|
3
|
+
|
4
|
+
class Authenticator < ModSpox::Plugin
|
5
|
+
def initialize(pipeline)
|
6
|
+
super(pipeline)
|
7
|
+
group = Models::Group.filter(:name => 'admin').first
|
8
|
+
add_sig(:sig => 'auth (\S+)', :method => :authenticate, :desc => 'Authenticate with bot using a password', :params => [:password])
|
9
|
+
add_sig(:sig => 'ident', :method => :do_ident, :desc => 'Instructs the bot to check your NickServ status')
|
10
|
+
add_sig(:sig => 'auth mask add (\S+) (\S+)', :method => :add_mask, :group => group, :desc => 'Add authentication mask and set initial group', :params => [:mask, :group])
|
11
|
+
add_sig(:sig => 'auth mask set (\d+) (.+)', :method => :set_mask_groups, :group => group, :desc => 'Set groups for the given mask', :params => [:id, :groups])
|
12
|
+
add_sig(:sig => 'auth mask unset (\d+) (.+)', :method => :del_mask_groups, :group => group, :desc => 'Remove groups for the given mask', :params => [:id, :groups])
|
13
|
+
add_sig(:sig => 'auth mask remove (\d+)', :method => :remove_mask, :group => group, :desc => 'Remove authentication mask', :params => [:id])
|
14
|
+
add_sig(:sig => 'auth mask list', :method => :list_mask, :group => group, :desc => 'List all available authentication masks')
|
15
|
+
add_sig(:sig => 'auth nick ident (\S+) (true|false)', :method => :nick_ident, :group => group, :desc => 'Allow authentication to nicks identified to NickServ', :params => [:nick, :ident])
|
16
|
+
add_sig(:sig => 'auth nick password (\S+) (\S+)', :method => :nick_pass, :group => group, :desc => 'Set authentication password for nick', :params => [:nick, :password])
|
17
|
+
add_sig(:sig => 'auth nick clear password (\S+)', :method => :clear_pass, :group => group, :desc => 'Clear nicks authentication password', :params => [:nick])
|
18
|
+
add_sig(:sig => 'auth nick info (\S+)', :method => :nick_info, :group => group, :desc => 'Return authentication information about given nick', :params => [:nick])
|
19
|
+
add_sig(:sig => 'auth nick set (\S+) (\S+)', :method => :set_nick, :group => group, :desc => 'Set the group for a given nick', :params => [:nick, :group])
|
20
|
+
add_sig(:sig => 'auth nick unset (\S+) (\S+)', :method => :unset_nick, :group => group, :desc => 'Unset the group for a given nick', :params => [:nick, :group])
|
21
|
+
add_sig(:sig => 'auth group list', :method => :list_groups, :group => group, :desc => 'List available authentication groups')
|
22
|
+
add_sig(:sig => 'auth group info (\S+)', :method => :group_info, :group => group, :desc => 'List members of given group', :params => [:group])
|
23
|
+
add_sig(:sig => 'groups', :method => :show_groups, :desc => 'Show user groups they are currently a member of')
|
24
|
+
@nickserv_nicks = []
|
25
|
+
@nickserv_cache = []
|
26
|
+
populate_nickserv
|
27
|
+
@pipeline.hook(self, :check_join, :Incoming_Join)
|
28
|
+
@pipeline.hook(self, :check_nicks, :Incoming_Who)
|
29
|
+
@pipeline.hook(self, :check_nicks, :Incoming_Names)
|
30
|
+
@pipeline.hook(self, :check_notice, :Incoming_Notice)
|
31
|
+
end
|
32
|
+
|
33
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
34
|
+
# params:: Signature parameters
|
35
|
+
# Authenticate a user by password
|
36
|
+
def authenticate(message, params)
|
37
|
+
return unless message.is_private?
|
38
|
+
if(message.is_private? && message.source.auth.check_password(params[:password]))
|
39
|
+
information message.replyto, 'Authentication was successful'
|
40
|
+
else
|
41
|
+
error message.replyto, 'Authentication failed'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
46
|
+
# params:: Signature parameters
|
47
|
+
# Add an authentication mask
|
48
|
+
def add_mask(message, params)
|
49
|
+
begin
|
50
|
+
group = Models::Group.filter(:name => params[:group]).first
|
51
|
+
raise Exception.new("Failed to find group") unless group
|
52
|
+
a = Models::AuthMask.find_or_create(:mask => Regexp.new(params[:mask]).source)
|
53
|
+
a.add_group(group)
|
54
|
+
a.save
|
55
|
+
information message.replyto, 'Mask has been successfully added to authentication table'
|
56
|
+
rescue Object => boom
|
57
|
+
error message.replyto, "Authentication failed to add mask. Reason: #{boom}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
62
|
+
# params:: Signature parameters
|
63
|
+
# Add an authentication group to a given mask
|
64
|
+
def set_mask_groups(message, params)
|
65
|
+
auth = Models::AuthMask[params[:id].to_i]
|
66
|
+
if(auth)
|
67
|
+
params[:groups].split(/\s/).each do |g|
|
68
|
+
group = Models::Group.filter(:name => g).first
|
69
|
+
auth.add_group(group) if group
|
70
|
+
end
|
71
|
+
information message.replyto, "Mask groups have been updated"
|
72
|
+
else
|
73
|
+
error message.replyto, "Failed to find mask with ID: #{params[:id]}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
78
|
+
# params:: Signature parameters
|
79
|
+
# Remove an authentication group from a given mask
|
80
|
+
def del_mask_groups(message, params)
|
81
|
+
auth = Models::AuthMask[params[:id].to_i]
|
82
|
+
if(auth)
|
83
|
+
params[:groups].split(/\s/).each do |g|
|
84
|
+
group = Models::Group.filter(:name => g).first
|
85
|
+
auth.remove_group(group) if group
|
86
|
+
end
|
87
|
+
information message.replyto, "Mask groups have been updated"
|
88
|
+
else
|
89
|
+
error message.replyto, "Failed to find mask with ID: #{params[:id]}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
94
|
+
# params:: Signature parameters
|
95
|
+
# List all authentication masks
|
96
|
+
def list_mask(message, params)
|
97
|
+
output = ["\2Authentication Mask Listing:\2"]
|
98
|
+
Models::AuthMask.all.each do |a|
|
99
|
+
groups = []
|
100
|
+
a.groups.each{|g| groups << g.name}
|
101
|
+
output << "\2ID:\2 #{a.pk}: \2mask:\2 #{a.mask} \2groups:\2 #{groups.join(', ')}"
|
102
|
+
end
|
103
|
+
reply message.replyto, output
|
104
|
+
end
|
105
|
+
|
106
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
107
|
+
# params:: Signature parameters
|
108
|
+
# Remove given authentication mask
|
109
|
+
def remove_mask(message, params)
|
110
|
+
auth = Models::AuthMask[params[:id].to_i]
|
111
|
+
if(auth)
|
112
|
+
auth.destroy
|
113
|
+
information message.replyto, "Authentication mask with ID #{params[:id]} was deleted"
|
114
|
+
else
|
115
|
+
error message.replyto, "\2Failed\2: Could not find an authentication mask with ID: #{params[:id]}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
120
|
+
# params:: Signature parameters
|
121
|
+
# Set nick authentication by NickServ
|
122
|
+
def nick_ident(message, params)
|
123
|
+
nick = Models::Nick.locate(params[:nick])
|
124
|
+
if(params[:ident] == 'true')
|
125
|
+
nick.auth.update(:services => true)
|
126
|
+
else
|
127
|
+
nick.auth.update(:services => false)
|
128
|
+
end
|
129
|
+
populate_nickserv
|
130
|
+
information message.replyto, "Nick #{params[:nick]} has been updated. Services for authentication has been set to #{params[:ident]}"
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
135
|
+
# params:: Signature parameters
|
136
|
+
# Set password for given nick
|
137
|
+
def nick_pass(message, params)
|
138
|
+
nick = Models::Nick.locate(params[:nick])
|
139
|
+
nick.auth.password = params[:password]
|
140
|
+
information message.replyto, "Nick #{params[:nick]} has been updated. Password has been set."
|
141
|
+
end
|
142
|
+
|
143
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
144
|
+
# params:: Signature parameters
|
145
|
+
# Clear password field for given nick
|
146
|
+
def clear_pass(message, params)
|
147
|
+
nick = Models::Nick.locate(params[:nick])
|
148
|
+
nick.auth.password = nil
|
149
|
+
nick.auth.save
|
150
|
+
information message.replyto, "Nick #{params[:nick]} has been updated. Password has been unset."
|
151
|
+
end
|
152
|
+
|
153
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
154
|
+
# params:: Signature parameters
|
155
|
+
# Display info for given nick
|
156
|
+
def nick_info(message, params)
|
157
|
+
nick = Helpers.find_model(params[:nick], false)
|
158
|
+
if(nick)
|
159
|
+
info = []
|
160
|
+
info << "\2INFO [#{nick.nick}]:\2"
|
161
|
+
groups = []
|
162
|
+
nick.auth.groups.each do |ag|
|
163
|
+
groups << ag.name
|
164
|
+
end
|
165
|
+
info << "Groups: #{groups.uniq.sort.join(', ')}."
|
166
|
+
nick.auth.password.nil? || nick.auth.password.empty? ? info << 'Password has not been set.' : info << 'Password has been set.'
|
167
|
+
nick.auth.services ? info << 'Nickserv ident is enabled.' : info << 'Nickserv ident is disabled.'
|
168
|
+
information message.replyto, "#{info.join(' ')}"
|
169
|
+
else
|
170
|
+
error message.replyto, "I have no record of nick: #{params[:nick]}"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def show_groups(message, params)
|
175
|
+
groups = message.source.auth_groups.map{|g| g.name}
|
176
|
+
if(groups.nil? || groups.empty?)
|
177
|
+
reply message.replyto, "You are not currently a member of any groups"
|
178
|
+
else
|
179
|
+
reply message.replyto, "\2Groups (#{message.source.nick}):\2 #{groups.sort.join(', ')}"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
184
|
+
# params:: Signature parameters
|
185
|
+
# Add given nick to authentication group
|
186
|
+
def set_nick(message, params)
|
187
|
+
group = Models::Group.filter(:name => params[:group]).first
|
188
|
+
nick = Models::Nick.locate(params[:nick])
|
189
|
+
if(group)
|
190
|
+
nick.auth.add_group(group)
|
191
|
+
information message.replyto, "Nick #{params[:nick]} has been added to the group: #{params[:group]}"
|
192
|
+
else
|
193
|
+
error message.replyto, "Failed to find authentication group: #{params[:group]}"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
198
|
+
# params:: Signature parameters
|
199
|
+
# Remove given nick from authenticationg group
|
200
|
+
def unset_nick(message, params)
|
201
|
+
group = Models::Group.filter(:name => params[:group]).first
|
202
|
+
nick = Helpers.find_model(params[:nick], false)
|
203
|
+
if(group && nick)
|
204
|
+
nick.auth.remove_group(group)
|
205
|
+
information message.replyto, "Removed #{params[:nick]} from the #{params[:group]} authentication group."
|
206
|
+
else
|
207
|
+
error message.replyto, "Failed to find nick: #{params[:nick]}" unless nick
|
208
|
+
error message.replyto, "Failed to find group: #{params[:group]}" unless group
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
213
|
+
# params:: Signature parameters
|
214
|
+
# Send WHOIS for nick
|
215
|
+
def do_ident(message, params)
|
216
|
+
message.source.check_masks
|
217
|
+
check_nickserv(message.source, true)
|
218
|
+
#@pipeline << Messages::Outgoing::Whois.new(message.source.nick)
|
219
|
+
end
|
220
|
+
|
221
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
222
|
+
# params:: Signature parameters
|
223
|
+
# Display all available authentication groups
|
224
|
+
def list_groups(message, params)
|
225
|
+
groups = Models::Group.all.map{|g| g.name}
|
226
|
+
information message.replyto, "\2Groups:\2 #{groups.sort.join(', ')}"
|
227
|
+
end
|
228
|
+
|
229
|
+
# message:: ModSpox::Messages::Incoming::Privmsg
|
230
|
+
# params:: Signature parameters
|
231
|
+
# Display info about given group
|
232
|
+
def group_info(message, params)
|
233
|
+
group = Models::Group.filter(:name => params[:group]).first
|
234
|
+
if(group)
|
235
|
+
nicks = []
|
236
|
+
group.auths.each{|a| nicks << a.nick.nick}
|
237
|
+
masks = []
|
238
|
+
group.auth_masks.each{|a| masks << a.map}
|
239
|
+
output = []
|
240
|
+
output << "\2Nicks:\2 #{nicks.join(', ')}" if nicks.size > 0
|
241
|
+
output << "\2Masks:\2 #{masks.join(' | ')}" if masks.size > 0
|
242
|
+
information message.replyto, "\2Group #{params[:group]}:\2 #{output.join('. ')}"
|
243
|
+
else
|
244
|
+
error message.replyto, "Failed to find group named: #{params[:group]}"
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def check_notice(m)
|
249
|
+
if(m.source.is_a?(Models::Nick) && m.source.nick.downcase == 'nickserv' && m.source.host == 'dal.net')
|
250
|
+
message = m.message.dup
|
251
|
+
nick = message.slice!(0..message.index(' ')-1)
|
252
|
+
message.slice!(0)
|
253
|
+
message.slice!(0..message.index(' '))
|
254
|
+
setting = message.to_i
|
255
|
+
if(setting == 3)
|
256
|
+
user = Helpers.find_model(nick)
|
257
|
+
user.auth.services_identified = true
|
258
|
+
Logger.info("User has been authenticated through NickServ services. (#{user.nick})")
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
# Populates array with nicks that authenticate by nickserv
|
264
|
+
def populate_nickserv
|
265
|
+
@nickserv_nicks.clear
|
266
|
+
Models::Auth.filter('services = ?', true).each do |auth|
|
267
|
+
@nickserv_nicks << auth.nick.nick.downcase
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def check_nickserv(nick, force=false)
|
272
|
+
populate_nickserv if @nickserv_nicks.empty?
|
273
|
+
if(@nickserv_nicks.include?(nick.nick.downcase))
|
274
|
+
if(force || (!nick.auth.authed && !@nickserv_cache.include?(nick.nick.downcase)))
|
275
|
+
@nickserv_cache << nick.nick.downcase unless @nickserv_cache.include?(nick.nick.downcase)
|
276
|
+
@pipeline << Messages::Outgoing::Raw.new("nickserv ACC #{nick.nick}")
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
def check_join(message)
|
282
|
+
check_nickserv(message.nick) unless message.nick == me
|
283
|
+
end
|
284
|
+
|
285
|
+
def check_nicks(message)
|
286
|
+
@pipeline << Messages::Internal::TimerAdd.new(self, 20, nil, true){ message.nicks.each{|nick| check_nickserv(nick) } }
|
287
|
+
end
|
288
|
+
|
289
|
+
end
|