Commit Graph

350 Commits

Author SHA1 Message Date
Brian S. Stephan 678350fe5d Markov: trivial change to allow for more advanced randomness later 2011-06-22 19:00:01 -05:00
Brian S. Stephan 9745cfc9be Twitter: catch ValueError if the provided index isn't a number at all 2011-06-21 17:24:31 -05:00
Brian S. Stephan 7220025f0a Markov: randomly say something to a list of approved channels
check interval is every 10 minutes, rows in markov_chatter_target
have a 1 in chance chance of leading to a line being generated,
every 10 minutes. (so an interval of 144 = 10 min * 6 * 24 = one line
per day, on average)
2011-06-20 22:49:25 -05:00
Brian S. Stephan 1e87fe59d8 even more close connections from get_db() 2011-06-20 22:34:27 -05:00
Brian S. Stephan 097077174b close connections from get_db() 2011-06-20 22:20:41 -05:00
Brian S. Stephan 152ef2a1ad Module: remove the timer stuff, since individual modules can do this better themselves
Markov, Twitter: switch to forking a thread ourselves, and check every
second whether or not to quit. this is the "better" part above, as
now we can instantly quit the thread rather than waiting for all
the timers to fire and expire
2011-06-20 21:18:55 -05:00
Brian S. Stephan c7846e415a IrcAdmin: don't crash by trying to tell #chan that you just left #chan 2011-06-20 20:27:20 -05:00
Brian S. Stephan 111b068ed4 Dice: trivial whitespace cleanup, merging last two commits from kad 2011-06-20 19:32:17 -05:00
kad 35df9f9425 Change output for selection rolls. Output of die rolls is no longer sorted. 2011-06-20 16:48:24 -05:00
kad a767b3d6e2 Fix trying to roll a zero-sided die error 2011-06-20 16:45:08 -05:00
Brian S. Stephan c7b7e6e3ad Seen: don't track seen data for stuff without a location
like the last commit, this happens on [subcommands]
2011-06-16 21:26:13 -05:00
Brian S. Stephan df3de56c4c Markov: don't add chains if the context is null
that should only be possible on non-pub/privmsgs, or if there
is a [subcommand] being analyzed. in any event, don't learn it.
2011-06-16 21:25:22 -05:00
Brian S. Stephan a8031909b4 Markov: bite the bullet and make each markov chain automatically assigned a context (channel/query)
still kind of testing this, but i think it's easiest
2011-06-15 12:29:18 -05:00
Brian S. Stephan 476bd92010 Seen: per-channel (or privmsg speaker, i suppose) seen data
now mean words in one channel aren't leaked via !seen in another
2011-06-15 11:07:32 -05:00
Brian S. Stephan a0588869f3 Markov: add selecting by context, in order to segregate chains by channel
adding chains by context has existed for a while, this should allow for
querying for chains with null context or the current context. lightly
tested
2011-06-14 22:10:57 -05:00
Brian S. Stephan 02e77f3aed Karma: make karma case insensitive, by popular request 2011-06-14 21:22:56 -05:00
Brian S. Stephan 57be7f8026 Markov: remove some cruft that is now obsolete 2011-06-14 21:08:01 -05:00
Brian S. Stephan 90be2d1855 Markov: trying a simpler form of shut up check 2011-05-03 22:13:49 -05:00
Brian S. Stephan c55852129a Twitter: Markov used our "need to create our own db object" logic and then improved it.
most importantly, don't clobber the first thread's db instances
2011-05-01 10:42:24 -05:00
Brian S. Stephan 5e8e93beba Markov: clean up the whole "need to create our own db object" thing 2011-05-01 10:41:59 -05:00
Brian S. Stephan 03d0d6bc2d Markov: shut up if we've been too chatty in too short a period of time.
track all lines seen and all lines said by Markov. every 30 seconds,
if there have been more than 20 such lines, and Markov is responsible
for roughly half of them, then shut up for 30 seconds, because the
bot probably got stuck talking to another bot.

this should mean that such a reply infinite loop can't happen for
more than a minute.

i'm not entirely sure on the 30 sec/20 lines ratio. this may need
tuning.
2011-05-01 10:38:46 -05:00
Brian S. Stephan 7692d295f6 Markov: don't clobber existing database objects in the forked thread 2011-05-01 10:26:06 -05:00
Brian S. Stephan a73aec8ff0 Markov: remove debugging noise that snuck in via 42d414a0a4 2011-05-01 10:11:04 -05:00
Brian S. Stephan 1945637752 Markov: add support for chatter targets, channels we log messages to or randomly speak in 2011-05-01 10:05:37 -05:00
Brian S. Stephan 14f2a027fe Markov: preliminary support for the bot to conditionally shut it self up (and recover from that) 2011-04-30 15:43:59 -05:00
Brian S. Stephan 42d414a0a4 Markov: consolidate _reply_to_line and _reply into _generate_line 2011-04-30 15:37:16 -05:00
Brian S. Stephan aa6ea083fd remove reload support, since it was broken in the first place (somehow) 2011-04-27 22:49:04 -05:00
Brian S. Stephan 9ec73c4aa6 Markov: this is kind of embarrassing. remove a duplicate index. 2011-04-27 21:38:52 -05:00
Brian S. Stephan 6070ddc950 Markov: when looking up the start-of-sentence chain, get one random one
when finding a key for (__start1,__start2), instead of fetcihng all
(which can be a lot, in chatty channels and/or over time), get the
max ID in the table, pick a random ID between 1,max, and pick the
first id >= to it, and use that. just as random, nowhere near as
intensive.
2011-04-23 21:24:23 -05:00
Brian S. Stephan 6ef7865dba Markov: remove unused _get_chain_beginnings 2011-04-23 20:59:26 -05:00
Brian S. Stephan 7f922dd2c9 Markov: remove the 'starts' dictionary 2011-04-23 16:27:07 -05:00
Brian S. Stephan 116251398e Markov: index on markov_chain(k1,k2) 2011-04-23 16:25:01 -05:00
Brian S. Stephan 305625044a Markov: track the context of said lines
a context is a meta-classification ('banter, 'secrets', whatever)
based on targets (channels or nicknames). when a line is being
learned from a known target, the chains are placed in that context.

this is for allowing one brain to have multiple personalities, in
a sense, for large networks or cases where there may be a more
sanitized set of channels and a couple channels where everyone lets
it rip. a later enhancement would have sentence creation choose from
context-less chains (and contexts matching the current target), but
i need to go back to the drawing board on that one a bit.

ramble ramble ramble
2011-04-23 16:07:32 -05:00
Brian S. Stephan 4e7c19a02a Twitter: use Module's timer support including proper shutdown 2011-04-23 12:58:35 -05:00
Brian S. Stephan 5885983afd Markov: when learning lines, don't include the part direct addressing
e.g. if i say 'dr_botzo: hello dude', he only learns 'hello dude'.
this is mainly being done because the bot's name being in the brain
so many times was getting kind of silly, especially in channels that
have lots of conversations with the bot
2011-04-22 19:40:36 -05:00
Brian S. Stephan 9a4f8b019a Twitter: move timer reregistration up to the top of the timer routine
twitter will occasionally fail hard, when it was doing so this
check for updates wasn't reregistering, making the bot stop
checking eventually
2011-03-21 18:23:59 -05:00
Brian S. Stephan 5913a95165 Markov: append a stop if we have nothing to append from a chain
somehow a chain led us down a path where there are no values for
the keys in the chain. if that happens, just abort.

i'm not quite sure how this could happen
2011-03-17 17:24:11 -05:00
Brian S. Stephan 2b8f0d2843 Markov: don't crash when learning a sentence that's only whitespace 2011-03-14 13:14:56 -05:00
Brian S. Stephan c17623bcf6 Karma: in the element regex, match ()ful version before ()less version
the motivation here is doing (foo)++ would match \S+ first, adding
(foo) to the karma database (rather than foo, which is probably what
the user meant)
2011-03-02 16:17:59 -06:00
Brian S. Stephan 250dd6c4b0 Merge branch 'master' of git.incorporeal.org:dr.botzo 2011-02-26 19:10:26 -06:00
Brian S. Stephan cdb7a58240 Storycraft: attempt at handling unicode properly 2011-02-26 19:10:12 -06:00
Brian S. Stephan 87cc1ce15c Merge branch 'master' of ayu.incorporeal.org:dr.botzo 2011-02-26 19:08:36 -06:00
Brian S. Stephan e78e6faad8 Storycraft: update usage hints to provide the proper commands 2011-02-26 19:07:16 -06:00
Brian S. Stephan 56bd5a687b Seen: unicode safety 2011-02-25 23:11:04 -06:00
Brian S. Stephan 713fb3e94a Seen: helps to actually import sqlite3 2011-02-25 23:09:41 -06:00
Brian S. Stephan e020cdb476 Seen: convert to use sqlite database 2011-02-25 21:54:09 -06:00
Brian S. Stephan 67403971df Twitter: properly reverse the tweets list, remove it from the TODO 2011-02-25 21:10:54 -06:00
Brian S. Stephan 7a53aaa9a1 Markov: properly output unicode chains 2011-02-25 20:59:57 -06:00
Brian S. Stephan 87073d7fd3 Markov: cache the first word in markov chains
this eliminates the expensive database hit on every request for a line.
the cache is loaded when the module loads and learning new lines should
add the appropriate word to the list. seemed like a pretty good compromise
2011-02-24 21:06:29 -06:00
Brian S. Stephan 1712a7db53 Markov: use sqlite backend for brain
this keeps us from having the entire markov chain in memory and
having to do the pickling and so on. in many ways, this is a good
thing.

in one way, this is a bad thing. each line on irc will create a
__start1,__start2 item in the database, which means starting a
chain will be an expensive process. (approx 3 seconds, from irc
logs of 600,000 K lines). following selects run much faster, but
the first one is dog slow. a later commit should hopefully fix this.
2011-02-24 20:39:32 -06:00
Brian S. Stephan 28694ed82f chmod -x modules/Help.py 2011-02-23 19:40:06 -06:00
Brian S. Stephan 414514d3b2 Twitter: reverse the tweets list, to print in ascending order 2011-02-22 22:59:55 -06:00
Brian S. Stephan bfe88f28cd Storycraft: make a couple more commands fit the 'game # whatever' format 2011-02-22 19:45:57 -06:00
Brian S. Stephan 578c2ea29f Karma: allow for karma/query on unicode strings 2011-02-20 16:13:00 -06:00
Brian S. Stephan 22b35bcb94 Storycraft: add storycraft_gamestatus in order to break out getting a game's status
this is primarily to use a consistent format - 'game X status' rather than 'status X'
2011-02-19 01:18:14 -06:00
Brian S. Stephan 3e63c2e458 since sending arbitrary text and replying now have very different goals, add Module.sendmsg
this just sends a privmsg to the specified target on the specified
connection. pretty straightforward. also, update the modules that
need it to use it.
2011-02-17 12:31:51 -06:00
Brian S. Stephan 2aa369add7 rewrite recursion/alias code for the 500th time.
more of a moving of the code, actually, it now exists in (an overridden)
_handle_event, so that recursions happen against irc events directly,
rather than an already partially interpreted object.

with this change, modules don't need to implement do() nor do we have a
need for the internal_bus, which was doing an additional walk of the
modules after the irc event was already handled and turned into text. now
the core event handler does the recursion scans.

to support this, we bring back the old replypath trick and use it again,
so we know when to send a privmsg reply and when to return text so that
it may be chained in recursion. this feels old hat by now, but if you
haven't been following along, you should really look at the diff.

that's the meat of the change. the rest is updating modules to use
self.reply() and reimplementing (un)register_handlers where appropriate
2011-02-17 01:08:45 -06:00
Brian S. Stephan 64df118c65 move Twitter._unescape to Module._unencode_xml 2011-01-26 20:28:34 -06:00
Brian S. Stephan 28f450ab5d Markov: improve min_size by implementing min_search_tries
if the end of a chain has been reached via __end, but min_size
has not been satisfied, discard the last couple elements in the
chain and try again. use min_search_tries so we don't do this
forever.
2011-01-25 20:42:52 -06:00
Brian S. Stephan 7b4b86dc0d Markov: add support for requesting desired min/max size of a reply
note that since the min_size support is kind of crude at the moment,
this only partially works
2011-01-25 20:25:15 -06:00
Brian S. Stephan 157f1bf361 Twitter: add command for a twitter-native reply 2011-01-25 19:36:24 -06:00
Brian S. Stephan c732466129 Merge branch 'master' of git.incorporeal.org:dr.botzo 2011-01-24 16:51:52 -06:00
Brian S. Stephan 2f3feb093d have !markov learn echo the text it learned, in case someone wants to chain it with other commands for some reason 2011-01-24 16:51:05 -06:00
Brian S. Stephan 4e8b60c201 Karma: add top to reportpattern 2011-01-20 14:50:51 -06:00
Brian S. Stephan 18fc614a4a assorted whitespace nitpicking 2011-01-20 14:15:10 -06:00
Brian S. Stephan 7601b025e1 Merge remote branch 'origin/mjb' 2011-01-20 14:08:39 -06:00
Mike Bloy ce42bca43a add new help text for new karma command 2011-01-20 10:12:28 -06:00
Mike Bloy 2cc79b42a6 add a top karma givers report 2011-01-20 10:08:20 -06:00
Brian S. Stephan 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
Brian S. Stephan 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
Brian S. Stephan e88a934569 Twitter: cleanup/organize the code a bit 2011-01-19 19:44:04 -06:00
Brian S. Stephan 89905ac771 Twitter: tweet_or_retweet_text -> _return_tweet_or_retweet_text 2011-01-19 19:26:28 -06:00
Brian S. Stephan 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
Brian S. Stephan ac0429569e Markov: size -> max_size, since I'm going to try adding a min_size soon 2011-01-19 18:35:01 -06:00
Brian S. Stephan 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
Brian S. Stephan d592d3f3bb Markov: regexes should only match start of line --- add ^ 2011-01-19 10:20:20 -06:00
Brian S. Stephan 3283fac1ff Markov: remove some debugging i forgot to clean out before the initial commit 2011-01-18 22:51:40 -06:00
Brian S. Stephan 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
Brian S. Stephan 8f86b7484a Storycraft: fix progress math 2011-01-09 22:36:56 -06:00
Brian S. Stephan 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
Brian S. Stephan e9c22d33f3 Storycraft: write completed story to disk via !storycraft export # 2011-01-09 21:41:23 -06:00
Brian S. Stephan e39d55f03d Storycraft: display how over the user went when writing their line, if they went over 2011-01-09 21:40:03 -06:00
Brian S. Stephan 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
Brian S. Stephan 487ca2e862 Storycraft: display the number of logged lines when doing an in progress status 2011-01-09 12:30:55 -06:00
Brian S. Stephan 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
Brian S. Stephan 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
Brian S. Stephan 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
Brian S. Stephan ce7d9e8010 Storycraft: allow listing of completed games 2011-01-09 11:16:36 -06:00
Brian S. Stephan 940ed57f2e Storycraft: tell the master channel when someone joins a game 2011-01-09 11:13:06 -06:00
Brian S. Stephan 797f660a9e Storycraft: don't flood the target with storycraft_listgames, display only ids if count > 5 2011-01-09 11:12:27 -06:00
Brian S. Stephan 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
Brian S. Stephan 8c1d98cb74 Storycraft: order by id in addition to time in _get_lines_for_game query 2011-01-09 10:39:08 -06:00
Brian S. Stephan 22d3ce44bf Storycraft: trivial comment correction 2011-01-09 10:38:25 -06:00
Brian S. Stephan 656468f955 Storycraft: proper argument order in _update_line 2011-01-09 10:36:21 -06:00
Brian S. Stephan 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
Brian S. Stephan 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