Commit Graph

283 Commits

Author SHA1 Message Date
Mike Bloy
2cc79b42a6 add a top karma givers report 2011-01-20 10:08:20 -06:00
5ec7ac7177 Twitter: unescape some xml entities that may show up in the input.
this should maybe be moved into DrBotIRC or something, it'll likely
be handy elsewhere.
2011-01-19 23:12:01 -06:00
a961180065 Twitter: support for polling the bot's timeline and mentions feeds
needs authentication. this adds a sqlite database, to track a couple
settings. one, since_id, tracks the last successful time this poll
happened, so it's pretty important you don't muck around with it.
default value is 0, so the first time this poll occurs, it may be a
bit spammy.
2011-01-19 22:56:49 -06:00
e88a934569 Twitter: cleanup/organize the code a bit 2011-01-19 19:44:04 -06:00
89905ac771 Twitter: tweet_or_retweet_text -> _return_tweet_or_retweet_text 2011-01-19 19:26:28 -06:00
7c05f60ffd Markov: implement a min_size, which tries to make a chain of at least min_size words.
note that this isn't guaranteed, if the chain is such that the
current tuple has nowhere to go but to the end of the line, then
it will follow it --- it doesn't try to go back and rebuilt a different
chain or anything.
2011-01-19 18:44:07 -06:00
ac0429569e Markov: size -> max_size, since I'm going to try adding a min_size soon 2011-01-19 18:35:01 -06:00
176ca25c68 Markov: increase the default max length from 25 words to 100 words.
it's expected that, usually, the chain will have hit an end before this.
2011-01-19 18:32:15 -06:00
d592d3f3bb Markov: regexes should only match start of line --- add ^ 2011-01-19 10:20:20 -06:00
3283fac1ff Markov: remove some debugging i forgot to clean out before the initial commit 2011-01-18 22:51:40 -06:00
8dd223f778 Markov: a module to implement a chatterbot via markov chains.
yeah, we have MegaHAL, but i can't find a good implementation in
python that actually works and is stable, so we'll implement a
simple thing ourselves. works pretty much like MegaHAL does, but
without the string corruption.

original code provided by ape, care of mike bloy
2011-01-18 22:30:59 -06:00
8f86b7484a Storycraft: fix progress math 2011-01-09 22:36:56 -06:00
10cbe1944f Storycraft: add a terse progress string to the output when messaging players.
this is so that people know when they should start wrapping their
story up.
2011-01-09 22:17:22 -06:00
e9c22d33f3 Storycraft: write completed story to disk via !storycraft export # 2011-01-09 21:41:23 -06:00
e39d55f03d Storycraft: display how over the user went when writing their line, if they went over 2011-01-09 21:40:03 -06:00
2f001e274b Storycraft: notify (via privmsg) a player who has had a game newly assigned to them, and show the line. 2011-01-09 13:50:16 -06:00
487ca2e862 Storycraft: display the number of logged lines when doing an in progress status 2011-01-09 12:30:55 -06:00
7ae2a75732 Storycraft: when picking a new random player in the middle of a game, avoid picking the same person as the last turn 2011-01-09 12:28:37 -06:00
b133b37d61 Storycraft: list games waiting for me.
shows games in progress where the current line is assigned to the queryer,
and games open (waiting for registrations) that the queryer started
2011-01-09 11:51:10 -06:00
26a510ff40 Storycraft: add 'list games my games', which is the open/in progress games the queryer is in 2011-01-09 11:32:09 -06:00
ce7d9e8010 Storycraft: allow listing of completed games 2011-01-09 11:16:36 -06:00
940ed57f2e Storycraft: tell the master channel when someone joins a game 2011-01-09 11:13:06 -06:00
797f660a9e Storycraft: don't flood the target with storycraft_listgames, display only ids if count > 5 2011-01-09 11:12:27 -06:00
fd22cb64d4 Storycraft: add command to show the assignee the line to reply to.
apparently at 3 AM i forgot to implement important features, because
this is pretty critical to the game actually being playable. let
the assignee, if the game is still open, get the text of the line
they are to reply to.

also display it, rather than the add line command, where appropriate.
2011-01-09 10:41:57 -06:00
8c1d98cb74 Storycraft: order by id in addition to time in _get_lines_for_game query 2011-01-09 10:39:08 -06:00
22d3ce44bf Storycraft: trivial comment correction 2011-01-09 10:38:25 -06:00
656468f955 Storycraft: proper argument order in _update_line 2011-01-09 10:36:21 -06:00
95e7a243d1 tighten up the regexes since we only use integer IDs for operations.
i'd originally intended to use strings, too, but never decided on
if there should be a game name, or the commands should search
something, or what, so i'll just quit waffling and remove it. numbers
only for now.
2011-01-09 10:12:27 -06:00
90d38c1741 Storycraft - collaborative nonsense story writing
this module implements a game where players write a line in a story,
probably a nonsensical one, a couple lines at a time. once the player
who started the story has written something, the last line is
passed along to someone else in the game, who continues the story ---
or disregards the small bit of context entirely and writes their own
thing.

eventually you get a story like this:
line 1 by user 1
line 2 by user 1
line 3 by user 2 (who only read line 2)
line 4 by user 2
line 5 by user 3 (who only read line 4)
...

conceptually, that's the idea of the game. the code itself is still
a bit rough around the edges, but i can bang through a game by
myself. it needs some robustification, but it's fairly well
documented and the module does try to provide some clues to IRC while
you're playing.

config option explanations, more such options, etc. to come. critically
important is a way to get completed stories out of the bot, of course.

more to come, i'll shut up now and commit.
2011-01-09 03:27:12 -06:00
Mike Bloy
66a736b108 added help for the IrcAdmin module 2011-01-08 23:41:41 -06:00
Mike Bloy
d68487de95 added help for Karma module 2011-01-08 23:21:36 -06:00
Mike Bloy
07d3775842 added help text to the Help module 2011-01-08 22:47:51 -06:00
Mike Bloy
87088e67d1 attempt to ask the modules for help text 2011-01-08 22:32:18 -06:00
Mike Bloy
763f8906d7 Help module responds to commands
Responding to
!help
!help module
!help module [detail...] form
2011-01-08 22:02:04 -06:00
a2ac73325c turns out we do indeed need modules/__init__.py, so add it back
it doesn't need to do anything special though, so it's blank ---
just the standard hint to the python module compiler
2011-01-08 09:39:05 -06:00
1664cf2de7 since the save command was saving both modules and config, call it !save, not !config save 2011-01-08 09:16:37 -06:00
a6c7b6b0b2 list loaded modules in DrBotIRC, display it via IrcAdmin 2011-01-08 01:22:31 -06:00
3e533890a1 IrcAdmin: following the last change to saving, have !save also call a new save_modules() 2011-01-08 00:49:10 -06:00
1e0de47d84 MegaHAL: we don't need to sync the brain in shutdown(), since we sync it in save() 2011-01-08 00:46:20 -06:00
07be2f3a85 MegaHAL: do add_global_handler in the right place, actually do remove_global_handler 2011-01-08 00:31:19 -06:00
36fcbde267 do a deep copy of the string being learned from, since mh_python is weird/corrupty 2011-01-08 00:26:18 -06:00
bed3f7ec23 use add_global_handler on pubmsg/privmsg to learn from IRC.
this rather than inside do(), which could internal commands and stuff
that probably counts as noise
2011-01-08 00:14:11 -06:00
d4062cbe99 oops. continue to learn messages in MegaHAL that we don't reply to 2011-01-07 23:12:06 -06:00
359ca24856 remove replypath and all the places it was used.
with alias calling do() internally, there is no need for all this
replypath nonsense, and if there's ever a module that needs to reply
to stuff on its own outside of do(), it'd have to be implementing
all of this anyway, so it was pretty irrelevant.

this makes DrBotIRC alias/recursion stuff a bit cleaner.
2011-01-07 23:09:07 -06:00
fc2814e57c don't attach to pubmsg/privmsg events by default anymore.
this is possible because now the alias stuff in DrBotIRC calls
each module's do() on a pubmsg/privmsg.

this also gets rid of all the meta options (so remove them from
your config file!), and IrcAdmin now only needs to connect
to welcome.
2011-01-07 21:04:33 -06:00
0bd681c324 convert most modules to use ! commands.
okay, it's time. we got around for a while with all sorts of silly
config options and exceptions and common strings triggering bot
commands. but now it's time to man up and expect modules to be
more strict and less loosey-goosey.

convert the popular modules (i.e. the ones that still work) to
trigger on !pi rather than pi, etc. usually, this is achieved via
regex searches, although there are some weird bugs (ones i'm hoping
are caused by other recursion/alias bugs and not this commit).

more code around this will be gutted soon, but this, at least,
means you can't say 'tweet that shit, yo' and accidentally trigger
the bot.
2011-01-07 20:37:24 -06:00
efb92ddc83 reload should call irc.reload_module, not unload_module 2011-01-07 19:09:09 -06:00
d637983ae1 apparently ply doesn't like docstrings in its functions 2011-01-07 18:42:56 -06:00
01d3c7c80c migrate some code that became pivotal to the bot into DrBotIRC.
this is a big change. DrBotIrc is now in charge of module loading
and unloading, aliases, and recursion. the Alias module is no more,
and a bunch of functionality was moved out of IrcAdmin, including
also config file saving, the sigint handler, and quitting the bot.

additionally, a lot of stuff got caught in the wake. dr.botzo.py
is simpler now, and lets DrBotIRC do the dynamic loading stuff.
Module.__init__ changed, modules no longer get modlist and instead
get a reference to the DrBotIRC object. IrcAdmin still has the same
exposed methods, but now calls out to DrBotIRC to achieve some of
them.

naturally, a recursion/alias rewrite was included with this change.
it is clearer now (i think), but probably brittle somewhere.
additionally, currently any module that has registered a pubmsg
handler can potentially fire more than once on one input (without
recursion). this may be the next thing to fix. do() may need to
be split, or maybe it's time to stop having modules deal with
pubmsg/privmsg entirely. need to decide.

WEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
2011-01-07 17:38:26 -06:00
3333fe125e Revert "fix the cheap unicode escapes in GoogleTranslate"
unicode-escape appears to do bad things to hiragana and probably
all unicode characters that are not unicode escaped. ultimately
it seems that google's responses are not consistent.

back to the drawing board.

This reverts commit 40888869b0.
2011-01-07 17:11:00 -06:00
02b3266b46 give MegaHAL priority 95 (which is low priority, which always confuses me) 2011-01-07 11:24:38 -06:00
b4f1c5facd MegaHAL: docstring stuff 2011-01-07 11:23:46 -06:00
b7ce4b6dcc add Alias at priority 1 (so that it is handled first) 2011-01-07 01:11:35 -06:00
de3f9d9ae7 provide a priority (default 50) to add_global_handler 2011-01-07 01:10:52 -06:00
8bbda8b575 if we add the module to the autoload list on a load, we should remove it on unload 2011-01-06 23:29:51 -06:00
a3d30daacb given how we load modules now, we don't need modules/__init__.py 2011-01-06 23:27:52 -06:00
acca8723b3 convert to/standardize docstrings a bit.
this got boring fast, so it's only half done
2011-01-06 23:25:46 -06:00
247719814e magic 8-ball module.
this could have been done with Facts, but for people who aren't
loading that, here's an alternative
2011-01-06 23:08:33 -06:00
40888869b0 fix the cheap unicode escapes in GoogleTranslate 2011-01-06 22:53:21 -06:00
85c5c69cb9 weird megahal corruption strikes again.
i should probably work this out one of these times rather than just
doing random hacks to dodge it
2011-01-06 22:26:24 -06:00
bd95764f9f cleanup the sentence feedback 2011-01-06 22:12:19 -06:00
5293e8dc24 add support for listing one alias via list, which shows the value 2011-01-06 22:08:23 -06:00
5913e0b183 remove MegaHAL's nullifying of reload() since it's obsolete.
note that the new module appears to support unload properly via shutdown()
2011-01-06 19:58:58 -06:00
ea0fd9d509 small but significant unload/reload changes.
IrcAdmin:
* have sub_unload_module() call the module's shutdown() before deleting stuff
* sub_unload_module() needs to delete the sys.modules entry too
* slightly more verbose output in sub_unload_module()
* sub_reload_module() now does a self.sub_unload_module() + self.sub_load_module()

Module:
* remove reload() --- modules must now safely handle shutdown
2011-01-06 19:54:16 -06:00
9c5d78891c make a deep copy of the string to feed to mh_python.
we were passing the same string everything else uses for input (by
reference), and it appears mh_python does some uppercasing
2011-01-06 17:15:57 -06:00
0878c8809d implement a save() for modules, use it in MegaHAL to sync brain to disk 2011-01-06 00:28:50 -06:00
5c0323fc26 Merge branch 'master' of ayu.incorporeal.org:dr.botzo 2011-01-06 00:18:37 -06:00
9732ed2f34 use a different megahal implementation, which seems to be better at saving the brain.
note that nothing megahal is shipped with the bot now, including
train files. this bot will expect a ./megahal.trn, and will write
to ./megahal.brn (in addition to a slew of other ./megahal.*
files).

implementation is from http://megahal.alioth.debian.org/
2011-01-06 00:14:16 -06:00
157d1145ea specify ellipses continuation as a python string 2011-01-05 09:34:19 -06:00
4241071b7e print tweet id when printing tweets.
will be necessary if we ever implement any kind of reply-to-id replying
2011-01-03 00:31:23 -06:00
b748d43bbd have SIGINT handler call modules' shutdown() 2010-12-24 13:46:48 -06:00
63a85fba3f Merge remote branch 'origin/mjb/fix_init' 2010-12-24 13:27:33 -06:00
0e7e2bf50c add tweet subcommand to twitter, to send tweets.
needs admin, until i figure out if i want more authentication for it
2010-12-24 13:19:50 -06:00
d9b85f4364 track whether or not the twitter module has been authenticated 2010-12-24 13:19:11 -06:00
41a5c43284 use the right signature for Module.reload() 2010-12-24 13:18:23 -06:00
f590daf5cd have all modules run a shutdown() when quitting, use it to have MegaHAL close the brain 2010-12-24 10:41:12 -06:00
0ff44e1a47 don't have megahal learn internal commands 2010-12-24 09:48:04 -06:00
9ed1586783 shouldn't need this unicode workaround anymore (fingers crossed) 2010-12-24 09:42:49 -06:00
c513a0bebc extlib/megahal.py: don't crash when the input string ends in ' 2010-12-23 10:01:11 -06:00
ae6eda2c6a encode facts coming out of Facts to python string 2010-12-20 22:22:37 -06:00
Mike Bloy
8ffcecdff0 hacked out loading of all modules from __init__
Discussion with bss implies that this is no longer needed, now that
the dynamic loader and unload is in place.

empirical testing seems to confirm this
2010-12-17 22:52:53 -06:00
107b754a0d move recursion scan after alias setup, and do another after alias replace 2010-12-17 16:12:45 -06:00
1fe9575502 move recursion stuff out of Module.py and into modules/Alias.py
this comes with a recursion rewrite and simplification; it works
a bit more intuitively, now, but i still haven't figured out what
caused the bug that led me down this rabbit hole.

in any event, Alias now rules the roost when it comes to recursion,
which means it's a bit poorly named, but also means that there
won't (shouldn't) be multiple accidental runs for one output, caused
by multiple modules doing the recursion (despite only one really
having a legitimate reason to) --- a classic case of the intended
use of recursion (including the comment to only recurse when you
*know* the input is for you) being lost and forgotten with time

this also obsoletes meta.skip_recursion_scan. between this commit
and the last, people would be wise to revise their config files
2010-12-16 23:43:16 -06:00
bda1eb9560 add uppercase text transform 2010-12-16 20:28:26 -06:00
699f550ba3 change authentication to over IRC process 2010-12-16 20:15:49 -06:00
3ba38bd90d it would help if i got the < vs > right 2010-12-16 15:44:51 -06:00
efafb95f5a ability to look up tweets for a user, relative to the latest 2010-12-16 15:23:35 -06:00
57ddba744e optionally print the source of the tweet in question
useful if you don't know it, such as if the tweet was specified
by id rather than by user
2010-12-16 15:22:34 -06:00
a18897fcde print the native tweet of retweets (rather than the possibly-truncated one)
this now depends on a modified twitter.py, although i could probably
send my patch upstream
2010-12-16 13:04:58 -06:00
1bacfe047e fix (god i hope fix) unicode in Twitter
also remove some unnecessary unicode conversions right before printing?
commented out until i'm convinced there was no need for it.

protip: clearest description i've read to date:
http://stackoverflow.com/questions/368805/python-unicodedecodeerror-am-i-misunderstanding-encode#370199
2010-12-16 10:36:50 -06:00
37a677946d fetch more tweets in case the latest was a RT (which we are filtering)
comment about how i'm not really sure about this approach
2010-12-15 23:52:59 -06:00
7e4e6ab23f look up most recent tweet by username 2010-12-15 23:31:26 -06:00
e4edc7f6f4 first bit of bot twitter functionality 2010-12-15 23:08:08 -06:00
ea0f795194 add unload method to IrcAdmin, which unloads a module
hopefully this all works right. i remove two known references
to the object, and then call a del for good measure, which i
think covers it?
2010-12-15 21:28:57 -06:00
2295f524d4 add load command to IrcAdmin, which (naturally) loads a module and adds it to the autoload list 2010-12-15 21:17:24 -06:00
467c72847a clean up some IrcAdmin output, which i was using to test reloading 2010-12-15 20:58:13 -06:00
e0565a9bb1 take a stab at commenting how MegaHAL reload is broken, keep it unimplemented for the moment 2010-12-15 20:55:40 -06:00
22615d7b9a rewrite reload support, making it an IrcAdmin command
only lightly tested for the moment
2010-12-15 20:43:14 -06:00
d92d60ec7a don't try to be clever with the +-/-+ commands, since it wasn't doing what I wanted
and it wasn't the right thing to do anyway
2010-12-15 20:29:25 -06:00
e5934bccba add echo module, which echos text. why i never implemented this, i don't know 2010-12-11 00:22:26 -06:00