comboy-autumn 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.
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