comboy-autumn 3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/README.textile +1192 -0
  2. data/autumn.gemspec +25 -0
  3. data/bin/autumn +27 -0
  4. data/lib/autumn.rb +2 -0
  5. data/lib/autumn/authentication.rb +290 -0
  6. data/lib/autumn/channel_leaf.rb +107 -0
  7. data/lib/autumn/coder.rb +166 -0
  8. data/lib/autumn/console_boot.rb +9 -0
  9. data/lib/autumn/ctcp.rb +250 -0
  10. data/lib/autumn/daemon.rb +207 -0
  11. data/lib/autumn/datamapper_hacks.rb +290 -0
  12. data/lib/autumn/foliater.rb +231 -0
  13. data/lib/autumn/formatting.rb +236 -0
  14. data/lib/autumn/generator.rb +231 -0
  15. data/lib/autumn/genesis.rb +191 -0
  16. data/lib/autumn/inheritable_attributes.rb +162 -0
  17. data/lib/autumn/leaf.rb +738 -0
  18. data/lib/autumn/log_facade.rb +49 -0
  19. data/lib/autumn/misc.rb +87 -0
  20. data/lib/autumn/script.rb +74 -0
  21. data/lib/autumn/speciator.rb +165 -0
  22. data/lib/autumn/stem.rb +919 -0
  23. data/lib/autumn/stem_facade.rb +176 -0
  24. data/resources/daemons/Anothernet.yml +3 -0
  25. data/resources/daemons/AustHex.yml +29 -0
  26. data/resources/daemons/Bahamut.yml +67 -0
  27. data/resources/daemons/Dancer.yml +3 -0
  28. data/resources/daemons/GameSurge.yml +3 -0
  29. data/resources/daemons/IRCnet.yml +3 -0
  30. data/resources/daemons/Ithildin.yml +7 -0
  31. data/resources/daemons/KineIRCd.yml +56 -0
  32. data/resources/daemons/PTlink.yml +6 -0
  33. data/resources/daemons/QuakeNet.yml +20 -0
  34. data/resources/daemons/RFC1459.yml +158 -0
  35. data/resources/daemons/RFC2811.yml +16 -0
  36. data/resources/daemons/RFC2812.yml +36 -0
  37. data/resources/daemons/RatBox.yml +25 -0
  38. data/resources/daemons/Ultimate.yml +24 -0
  39. data/resources/daemons/Undernet.yml +6 -0
  40. data/resources/daemons/Unreal.yml +110 -0
  41. data/resources/daemons/_Other.yml +7 -0
  42. data/resources/daemons/aircd.yml +33 -0
  43. data/resources/daemons/bdq-ircd.yml +3 -0
  44. data/resources/daemons/hybrid.yml +38 -0
  45. data/resources/daemons/ircu.yml +67 -0
  46. data/resources/daemons/tr-ircd.yml +8 -0
  47. data/skel/Rakefile +135 -0
  48. data/skel/config/global.yml +2 -0
  49. data/skel/config/seasons/testing/database.yml +7 -0
  50. data/skel/config/seasons/testing/leaves.yml +7 -0
  51. data/skel/config/seasons/testing/season.yml +2 -0
  52. data/skel/config/seasons/testing/stems.yml +9 -0
  53. data/skel/leaves/administrator/README +20 -0
  54. data/skel/leaves/administrator/controller.rb +67 -0
  55. data/skel/leaves/administrator/views/autumn.txt.erb +1 -0
  56. data/skel/leaves/administrator/views/reload.txt.erb +11 -0
  57. data/skel/leaves/insulter/README +17 -0
  58. data/skel/leaves/insulter/controller.rb +65 -0
  59. data/skel/leaves/insulter/views/about.txt.erb +1 -0
  60. data/skel/leaves/insulter/views/help.txt.erb +1 -0
  61. data/skel/leaves/insulter/views/insult.txt.erb +1 -0
  62. data/skel/leaves/scorekeeper/README +34 -0
  63. data/skel/leaves/scorekeeper/config.yml +2 -0
  64. data/skel/leaves/scorekeeper/controller.rb +104 -0
  65. data/skel/leaves/scorekeeper/helpers/general.rb +64 -0
  66. data/skel/leaves/scorekeeper/models/channel.rb +12 -0
  67. data/skel/leaves/scorekeeper/models/person.rb +14 -0
  68. data/skel/leaves/scorekeeper/models/pseudonym.rb +11 -0
  69. data/skel/leaves/scorekeeper/models/score.rb +14 -0
  70. data/skel/leaves/scorekeeper/tasks/stats.rake +17 -0
  71. data/skel/leaves/scorekeeper/views/about.txt.erb +1 -0
  72. data/skel/leaves/scorekeeper/views/change.txt.erb +5 -0
  73. data/skel/leaves/scorekeeper/views/history.txt.erb +11 -0
  74. data/skel/leaves/scorekeeper/views/points.txt.erb +5 -0
  75. data/skel/leaves/scorekeeper/views/usage.txt.erb +1 -0
  76. data/skel/script/console +34 -0
  77. data/skel/script/daemon +29 -0
  78. data/skel/script/destroy +48 -0
  79. data/skel/script/generate +48 -0
  80. data/skel/script/server +15 -0
  81. metadata +170 -0
@@ -0,0 +1,16 @@
1
+ ---
2
+ channel_mode:
3
+ a: :anonymous
4
+ O: :creator
5
+ e: :ban_exception
6
+ q: :quiet
7
+ r: :reop
8
+ h: :halfop
9
+ I: :invitation_mask
10
+ channel_prefix:
11
+ +: :network_unmoderated
12
+ "!": :network_safe
13
+ privilege:
14
+ O: :creator
15
+ usermode:
16
+ "@": :creator
@@ -0,0 +1,36 @@
1
+ ---
2
+ event:
3
+ 478: :err_banlistfull
4
+ 346: :rpl_invitelist
5
+ 247: :rpl_statsbline
6
+ 5: :rpl_bounce
7
+ 484: :err_restricted
8
+ 209: :rpl_traceclass
9
+ 347: :rpl_endofinvitelist
10
+ 325: :rpl_uniqopis
11
+ 485: :err_uniqoprivsneeded
12
+ 408: :err_nosuchservice
13
+ 210: :rpl_tracereconnect
14
+ 1: :rpl_welcome
15
+ 348: :rpl_exceptlist
16
+ 2: :rpl_yourhost
17
+ 437: :err_unavailresource
18
+ 415: :err_badmask
19
+ 349: :rpl_endofexceptlist
20
+ 250: :rpl_statsdline
21
+ 476: :err_badchanmask
22
+ 234: :rpl_servlist
23
+ 3: :rpl_created
24
+ 383: :rpl_youreservice
25
+ 262: :rpl_traceend
26
+ 240: :rpl_statsvline
27
+ 207: :rpl_traceservice
28
+ 477: :err_nochanmodes
29
+ 246: :rpl_statsping
30
+ 235: :rpl_servlistend
31
+ 4: :rpl_myinfo
32
+ 263: :rpl_tryagain
33
+ usermode:
34
+ a: :away
35
+ O: :local_operator
36
+ r: :restricted
@@ -0,0 +1,25 @@
1
+ ---
2
+ event:
3
+ 720: :rpl_omotdstart
4
+ 709: :rpl_etrace
5
+ 726: :rpl_notestline
6
+ 715: :err_knockdisabled
7
+ 704: :rpl_helpstart
8
+ 721: :rpl_omotd
9
+ 710: :rpl_knock
10
+ 716: :rpl_targumodeg
11
+ 705: :rpl_helptxt
12
+ 722: :rpl_endofomotd
13
+ 711: :rpl_knockdlvr
14
+ 717: :rpl_targnotify
15
+ 706: :rpl_endofhelp
16
+ 723: :err_noprivs
17
+ 712: :err_toomanyknock
18
+ 718: :rpl_umodegmsg
19
+ 724: :rpl_testmark
20
+ 713: :err_chanopen
21
+ 702: :rpl_modlist
22
+ 708: :rpl_etracefull
23
+ 725: :rpl_testline
24
+ 714: :err_knockonchan
25
+ 703: :rpl_endofmodlist
@@ -0,0 +1,24 @@
1
+ ---
2
+ event:
3
+ 621: :rpl_rules
4
+ 610: :rpl_isoper
5
+ 434: :err_norules
6
+ 616: :rpl_whoishost
7
+ 275: :rpl_statsdline
8
+ 622: :rpl_endofrules
9
+ 611: :rpl_islocop
10
+ 617: :rpl_whoisbot
11
+ 386: :rpl_ircops
12
+ 623: :rpl_mapmore
13
+ 612: :rpl_isnotoper
14
+ 387: :rpl_endofircops
15
+ 624: :rpl_omotdstart
16
+ 613: :rpl_endofisoper
17
+ 630: :rpl_settings
18
+ 619: :rpl_whowashost
19
+ 608: :rpl_watchclear
20
+ 625: :rpl_omotd
21
+ 631: :rpl_endofsettings
22
+ 620: :rpl_rulesstart
23
+ 626: :rpl_endofo
24
+ 615: :rpl_whoismodes
@@ -0,0 +1,6 @@
1
+ ---
2
+ event:
3
+ 489: :err_voiceneeded
4
+ 484: :err_ischanservice
5
+ 396: :rpl_hosthidden
6
+ 449: :err_notimplemented
@@ -0,0 +1,110 @@
1
+ ---
2
+ channel_mode:
3
+ V: :no_invite
4
+ K: :noknock
5
+ L: :link
6
+ A: :admin_only
7
+ a: :channel_protection
8
+ M: :regonly
9
+ N: :no_nick_change
10
+ C: :no_ctcp
11
+ z: :secured_only
12
+ O: :oper_only
13
+ Q: :no_kick
14
+ q: :channel_owner
15
+ f: :flood_limit
16
+ G: :strip_bad_words
17
+ S: :strip
18
+ H: :no_hiding
19
+ u: :auditorium
20
+ event:
21
+ 389: :rpl_endofalist
22
+ 294: :rpl_helpfwd
23
+ 484: :err_attackdeny
24
+ 247: :rpl_statsxline
25
+ 295: :rpl_helpign
26
+ 447: :err_nonickchange
27
+ 485: :err_killdeny
28
+ 334: :rpl_listsyntax
29
+ 486: :err_htmdisabled
30
+ 524: :err_operspverify
31
+ 600: :rpl_logon
32
+ 220: :rpl_statsbline
33
+ 477: :err_needreggednick
34
+ 610: :rpl_mapmore
35
+ 601: :rpl_logoff
36
+ 468: :err_onlyserverscanchange
37
+ 335: :rpl_whoisbot
38
+ 972: :err_cannotdocommand
39
+ 307: :rpl_whoisregnick
40
+ 250: :rpl_statsconn
41
+ 459: :err_nohiding
42
+ 440: :err_servicesdown
43
+ 602: :rpl_watchoff
44
+ 222: :rpl_sqline_nick
45
+ 640: :rpl_dumping
46
+ 469: :err_linkset
47
+ 460: :err_notforhalfops
48
+ 232: :rpl_rules
49
+ 479: :err_linkfail
50
+ 308: :rpl_rulesstart
51
+ 603: :rpl_watchstat
52
+ 223: :rpl_statsgline
53
+ 641: :rpl_dumprpl
54
+ 470: :err_linkchannel
55
+ 489: :err_secureonlychan
56
+ 290: :rpl_helphdr
57
+ 499: :err_chanownprivneeded
58
+ 480: :err_cannotknock
59
+ 309: :rpl_endofrules
60
+ 518: :err_noinvite
61
+ 385: :rpl_notoperanymore
62
+ 642: :rpl_eodump
63
+ 604: :rpl_nowon
64
+ 224: :rpl_statstline
65
+ 310: :rpl_whoishelpop
66
+ 519: :err_admonly
67
+ 386: :rpl_qlist
68
+ 6: :rpl_map
69
+ 291: :rpl_helpop
70
+ 320: :rpl_whoisspecial
71
+ 605: :rpl_nowoff
72
+ 225: :rpl_statseline
73
+ 434: :err_norules
74
+ 520: :err_operonly
75
+ 387: :rpl_endofqlist
76
+ 7: :rpl_mapend
77
+ 425: :err_noopermotd
78
+ 292: :rpl_helptlr
79
+ 378: :rpl_whoishost
80
+ 606: :rpl_watchlist
81
+ 226: :rpl_statsnline
82
+ 435: :err_serviceconfused
83
+ 388: :rpl_alist
84
+ 293: :rpl_helphlp
85
+ 455: :err_hostilename
86
+ 607: :rpl_endofwatchlist
87
+ 227: :rpl_statsvline
88
+ 379: :rpl_whoismodes
89
+ usermode:
90
+ V: :webtv
91
+ v: :victim
92
+ W: :whois_paranoia
93
+ A: :server_admin
94
+ a: :services_admin
95
+ x: :host_hiding
96
+ B: :bot
97
+ b: :chatops
98
+ N: :network_admin
99
+ C: :co_admin
100
+ z: :secure_conn
101
+ p: :hide_channels
102
+ q: :kix
103
+ R: :no_non_registered
104
+ G: :strip_bad_words
105
+ S: :service
106
+ s: :server_notices
107
+ H: :hide_oper
108
+ T: :block_ctcp
109
+ t: :modified_host
110
+ I: :invisible_joinpart
@@ -0,0 +1,7 @@
1
+ ---
2
+ privilege:
3
+ a: :admin # Compatibility with irc.utonet.org
4
+ user_prefix:
5
+ "~": :channel_owner # Compatibility with irc.utonet.org
6
+ "&": :admin # Compatibility with irc.utonet.org
7
+
@@ -0,0 +1,33 @@
1
+ ---
2
+ event:
3
+ 379: :rpl_kicklinked
4
+ 291: :rpl_chaninfo_banned
5
+ 269: :rpl_end_netstat
6
+ 308: :rpl_notifyaction
7
+ 286: :rpl_chaninfo_users
8
+ 380: :rpl_banlinked
9
+ 292: :rpl_chaninfo_bans
10
+ 50: :rpl_attemptingjunc
11
+ 419: :err_lengthtruncated
12
+ 309: :rpl_nicktrace
13
+ 287: :rpl_chaninfo_chops
14
+ 265: :rpl_localusers
15
+ 210: :rpl_stats
16
+ 293: :rpl_chaninfo_invite
17
+ 51: :rpl_attemptingreroute
18
+ 299: :rpl_end_chaninfo
19
+ 288: :rpl_chaninfo_voices
20
+ 266: :rpl_globalusers
21
+ 470: :err_kickedfromchan
22
+ 294: :rpl_chaninfo_invites
23
+ 377: :rpl_kickexpired
24
+ 289: :rpl_chaninfo_away
25
+ 267: :rpl_start_netstat
26
+ 295: :rpl_chaninfo_kick
27
+ 273: :rpl_notify
28
+ 378: :rpl_banexpired
29
+ 290: :rpl_chaninfo_opers
30
+ 268: :rpl_netstat
31
+ 296: :rpl_chaninfo_kicks
32
+ 285: :rpl_chaninfo_handle
33
+ 274: :rpl_endnotify
@@ -0,0 +1,3 @@
1
+ ---
2
+ event:
3
+ 391: :rpl_time
@@ -0,0 +1,38 @@
1
+ ---
2
+ channel_mode:
3
+ a: :hideops
4
+ p: :private
5
+ event:
6
+ 247: :rpl_statsxline
7
+ 225: :rpl_statsdline
8
+ 484: :err_desync
9
+ 385: :rpl_notoperanymore
10
+ 220: :rpl_statspline
11
+ 479: :err_badchanname
12
+ 265: :rpl_localusers
13
+ 249: :rpl_statsdebug
14
+ 266: :rpl_globalusers
15
+ 503: :err_ghostedclient
16
+ 245: :rpl_statssline
17
+ 14: :rpl_yourcookie
18
+ 246: :rpl_statsuline
19
+ 224: :rpl_statsfline
20
+ user_prefix:
21
+ "%": :half_operator
22
+ usermode:
23
+ k: :kills
24
+ l: :locops
25
+ a: :admin
26
+ x: :external
27
+ b: :bots
28
+ y: :spy
29
+ n: :nchange
30
+ c: :client_conns
31
+ z: :operwall
32
+ d: :debug
33
+ f: :full
34
+ r: :rej
35
+ g: :callerid
36
+ u: :unauth
37
+ privilege:
38
+ h: :half_operator
@@ -0,0 +1,67 @@
1
+ ---
2
+ server_mode:
3
+ s: :service
4
+ h: :hub
5
+ channel_mode:
6
+ r: :regonly
7
+ event:
8
+ 511: :err_silelistfull
9
+ 280: :rpl_glist
10
+ 247: :rpl_statsgline
11
+ 236: :rpl_statsverbose
12
+ 16: :rpl_mapmore
13
+ 517: :err_disabled
14
+ 495: :err_badlogtype
15
+ 330: :rpl_whoisaccount
16
+ 275: :rpl_statsdline
17
+ 468: :err_invalidusername
18
+ 391: :rpl_time
19
+ 281: :rpl_endofglist
20
+ 270: :rpl_privs
21
+ 248: :rpl_statsuline
22
+ 237: :rpl_statsengine
23
+ 17: :rpl_mapend
24
+ 518: :err_longmask
25
+ 496: :err_badlogsys
26
+ 524: :err_quarantined
27
+ 513: :err_badping
28
+ 282: :rpl_jupelist
29
+ 271: :rpl_silelist
30
+ 238: :rpl_statsfline
31
+ 519: :err_toomanyusers
32
+ 497: :err_badlogvalue
33
+ 354: :rpl_whospcrpl
34
+ 514: :err_invalid_error
35
+ 437: :err_bannickchange
36
+ 338: :rpl_whoisactually
37
+ 283: :rpl_endofjupelist
38
+ 272: :rpl_endofsilelist
39
+ 250: :rpl_statsconn
40
+ 228: :rpl_statsqline
41
+ 217: :rpl_statspline
42
+ 8: :rpl_snomask
43
+ 520: :err_masktoowide
44
+ 498: :err_isoperlchan
45
+ 333: :rpl_topicwhotime
46
+ 515: :err_badexpire
47
+ 493: :err_nofeature
48
+ 438: :err_nicktoofast
49
+ 416: :err_querytoolong
50
+ 284: :rpl_feature
51
+ 9: :rpl_statmemtot
52
+ 477: :err_needreggednick
53
+ 334: :rpl_listusage
54
+ 246: :rpl_statstline
55
+ 15: :rpl_map
56
+ 516: :err_dontcheat
57
+ 494: :err_badfeature
58
+ 439: :err_targettoofast
59
+ 340: :rpl_userip
60
+ 10: :rpl_statmem
61
+ usermode:
62
+ k: :service
63
+ x: :host_hiding
64
+ d: :deaf
65
+ r: :registered
66
+ g: :debug
67
+ s: :server_notices
@@ -0,0 +1,8 @@
1
+ ---
2
+ channel_mode:
3
+ R: :regonly
4
+ u: :founder
5
+ user_prefix:
6
+ .: :founder
7
+ privilege:
8
+ u: :founder
data/skel/Rakefile ADDED
@@ -0,0 +1,135 @@
1
+ require 'rake'
2
+ require 'autumn/genesis'
3
+
4
+ task :default do
5
+ puts 'Type "rake --tasks" to see a list of tasks you can perform.'
6
+ end
7
+
8
+ # Load the Autumn environment.
9
+ task :environment do
10
+ APP_ROOT = File.dirname(__FILE__)
11
+ @genesis = Autumn::Genesis.new
12
+ @genesis.load_global_settings
13
+ @genesis.load_season_settings
14
+ end
15
+
16
+ task :boot do
17
+ APP_ROOT = File.dirname(__FILE__)
18
+ @genesis = Autumn::Genesis.new
19
+ @genesis.boot! false
20
+ end
21
+
22
+ namespace :app do
23
+ desc "Launch the Autumn daemon"
24
+ task :start do
25
+ system 'script/daemon start'
26
+ end
27
+
28
+ desc "Stop the Autumn daemon"
29
+ task :stop do
30
+ system 'script/daemon stop'
31
+ end
32
+
33
+ desc "Restart the Autumn daemon"
34
+ task :restart do
35
+ system 'script/daemon restart'
36
+ end
37
+
38
+ desc "Start Autumn but not as a daemon (stay on top)"
39
+ task :run do
40
+ system 'script/daemon run'
41
+ end
42
+
43
+ desc "Force the daemon to a stopped state (clears PID files)"
44
+ task :zap do
45
+ system 'script/daemon zap'
46
+ end
47
+ end
48
+
49
+ namespace :log do
50
+ desc "Remove all log files"
51
+ task :clear do
52
+ system 'rm -vf tmp/*.log tmp/*.output log/*.log*'
53
+ end
54
+
55
+ desc "Print all error messages in the log files"
56
+ task :errors => :environment do
57
+ season_log = "log/#{@genesis.config.global :season}.log"
58
+ system_log = 'tmp/autumn.log'
59
+ if File.exists? season_log then
60
+ puts "==== ERROR-LEVEL LOG MESSAGES ===="
61
+ File.open(season_log, 'r') do |log|
62
+ puts log.grep(/^[EF],/)
63
+ end
64
+ end
65
+ if File.exists? system_log then
66
+ puts "==== UNCAUGHT EXCEPTIONS ===="
67
+ File.open(system_log, 'r') do |log|
68
+ puts log.grep(/^[EF],/)
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ def local_db?(db)
75
+ db.host.nil? or db.host == 'localhost'
76
+ end
77
+
78
+ namespace :db do
79
+ desc "Recreate database tables according to the model objects"
80
+ task :migrate => :boot do
81
+ dname = ENV['DB']
82
+ raise "Usage: DB=[Database config name] rake db:migrate" unless dname
83
+ raise "Unknown database config #{dname}" unless database = repository(dname.to_sym)
84
+ puts "Migrating the #{dname} database..."
85
+ # Find models that have definitions for the selected database and migrate them
86
+ repository(dname.to_sym) do
87
+ repository(dname.to_sym).models.each { |mod| mod.auto_migrate! dname.to_sym }
88
+ end
89
+ end
90
+ desc "Nondestructively update database tables according to the model objects"
91
+ task :upgrade => :boot do
92
+ dname = ENV['DB']
93
+ raise "Usage: DB=[Database config name] rake db:upgrade" unless dname
94
+ raise "Unknown database config #{dname}" unless database = repository(dname.to_sym)
95
+ puts "Upgrading the #{dname} database..."
96
+ # Find models that have definitions for the selected database and upgrade them
97
+ repository(dname.to_sym) do
98
+ repository(dname.to_sym).models.each { |mod| mod.auto_upgrade! dname.to_sym }
99
+ end
100
+ end
101
+ end
102
+
103
+ namespace :doc do
104
+ desc "Generate API documentation for Autumn"
105
+ task :api => :environment do
106
+ FileUtils.remove_dir 'doc/api' if File.directory? 'doc/api'
107
+ system "rdoc --main README --title 'Autumn API Documentation' -o doc/api --line-numbers --inline-source libs README"
108
+ end
109
+
110
+ desc "Generate documentation for all leaves"
111
+ task :leaves => :environment do
112
+ FileUtils.remove_dir 'doc/leaves' if File.directory? 'doc/leaves'
113
+ Dir.glob("leaves/*").each do |leaf_dir|
114
+ Dir.chdir leaf_dir do
115
+ system "rdoc --main README --title '#{File.basename(leaf_dir).camelcase} Documentation' -o ../../doc/leaves/#{File.basename leaf_dir} --line-numbers --inline-source controller.rb helpers models README"
116
+ end
117
+ end
118
+ end
119
+
120
+ desc "Remove all documentation"
121
+ task :clear => :environment do
122
+ FileUtils.remove_dir 'doc/api' if File.directory? 'doc/api'
123
+ FileUtils.remove_dir 'doc/leaves' if File.directory? 'doc/leaves'
124
+ end
125
+ end
126
+
127
+ # Load any custom Rake tasks in the bot's tasks directory.
128
+ Dir["leaves/*"].each do |leaf|
129
+ leaf_name = File.basename(leaf, ".rb").downcase
130
+ namespace leaf_name.to_sym do # Tasks are placed in a namespace named after the leaf
131
+ FileList["leaves/#{leaf_name}/tasks/**/*.rake"].sort.each do |task|
132
+ load task
133
+ end
134
+ end
135
+ end