neckro / octotrog Goto Github PK
View Code? Open in Web Editor NEWDungeon Crawl Stone Soup IRC relay bot, node.js version
Dungeon Crawl Stone Soup IRC relay bot, node.js version
Chei bot in ##crawl-dev handles the learndb for trunk, %?? Instead of @??
Also announces git commits and other dev stuff
Might be interesting to have that in #octolog.
Maybe add an in-room command to toggle on or off
Does this already exist?
If not:
Any command can be given a species or background to generate the other half
!randcombo
!randcombo -viable
!randcombo -unviable
!randcombo Ce
!randcombo Ce -viable
!randcombo Ce -unviable
This is probably too much work
Observed behavior:
when a watched player kills a unique, the announcement is immediately relayed to the channel, quickly followed by the !killratio stats. The first announcement is color-coded black bkg + white font. the second announcement is not.
Desired behavior:
when a watched player kills a unique, announce both the kill announcement AND the killratio stats in the same message. color code the message black bkg with white font.
other factors:
kill ratio takes some time to update. ideally the command to run the killratio would be delayed several seconds to give sequell some time to update. This won't be 100% robust, but there should exist a delay-time, DT, where the majority of cases will have had killratio updated. In the other cases, it's just too bad.
I spent over and hour compiling DEWz data:
http://mefightclub.com/comments.php?DiscussionID=3564&Focus=248831#Comment_248831
then went into ##crawl-dev to ask how to do it more efficiently:
22:59] if I wanted to do some crawl data mining, is there an efficient way to do that? or do I need to just spam the bots to compile the data I need?
[23:00] for example, I had a long discussion with Sequell the other night compiling data on which floors DEWz died on. !lg * DEWz place=D:1, 2, 3, etc.
[23:00] then typed that into a spreadsheet.
[23:00] ??sequell
[23:00] sequell[1/3]: The ##crawl bot, handling game statistics, the {learndb}, and more. Operated by greensnark. See http://github.com/greensnark/dcss_henzell/raw/master/docs/listgame.txt If you want the source for this bot, go here: http://github.com/greensnark/dcss_henzell (not a typo).
[23:00] johnstein: grab that repository and build your own database?
[23:01] !lg * dewz s=absdepth -graph
[23:01] 51214 games for * (dewz): http://shalott.org/graphs/e6deaa778f0a5725cb44b0ba6522d4e431bc557a.html
[23:01] WITCHCRAFT
[23:01] !lg * dewz s=place -graph
[23:01] 51214 games for * (dewz): http://shalott.org/graphs/c3e916b543b51785100d0f94b7e9912b5e1d34c8.html
[23:01] johnstein: or you could read that text file and maybe find some other gems like that
[23:02] http://i.imgur.com/xCyJwGC.png
[23:02] I will
[23:02] thanks
[23:02] -->| SwissStopwatch ([email protected]) has joined ##crawl-dev
[23:02] I didn't know there were graphing commands available. that's really great
[23:03] about building my own DB. wouldn't that require access the the existing stats? or would it just mean that my DB would just start on the day I first fire up my bot?
[23:03] Stable (0.13) branch on crawl.lantea.net updated to: 0.13.1-17-g0f9d4ff
[23:03] johnstein: the repo should have a list of where to download everything from
[23:03] which your Sequell-alike can use to build its DB
[23:03] ah ok. I didn't know that was publicly available
[23:03] yeah, all the data that sequell used/uses is publically available
[23:03] that's fantastic
[23:04] unless we've lost servers unexpectedly or something, anyway
[23:05] ironically, I already cloned the henzell bot code several months ago
[23:05] when I was dabbling some dcss coding. ran my own server and managed to get the bot to post milestone updates to our IRC channel. I didn't know about the sequell stuff.
[23:05] thanks again.
[23:06] no problem
so, we need to MAKE THIS HAPPEN.
comb the publicly available data to scrape out the MFC dudes
then use a custom henzell bot or OCTOTROG to do graphing based on OUR stats
?/foo
Returns learndb entries that contain foo
!watched !hs
Returns hs from all watched nicks
!watched !hs Op
Returns highest octopode score
Etc
For example, I think it would be interesting to have a general 'whereis' and 'dump' command that searches across all available servers.
&whereis johnstein
[CZSO] johnstein the Warrior (L13 GrBe), a worshipper of Trog, dead in D (Sprint) on 2013-10-10 after 3839 turns.
[CAO] johnstein the Grasshopper (L1 OpWr) saved on D:1 on 2012-10-22 after 0 turns.
or maybe redirect all [!,@,%]whereis and [!,@,%]dump to always check all available.
does this make sense?
OCTOTROG: %whereis murphyslaw
OCTOTROG: murphyslaw the Stinger (L3 OpVM) is currently on D:2 after 927 turns. http://crawl.s-z.org/#watch-murphyslaw
Show who's playing by spamming all the bots with the entire watchlist, then filtering results.
More complicated than it sounds, gonna need some kind of message dispatch system.
This is more of a brainstorm
Need a way to tell octotrog what the current weekly challenge combo is
Then need a way to track challengers' scores
Could be a periodic ping of each challenger's list of games.
Basically, for each challenger, get the number of games they've played the challenge combo, then find the first of those games during the current challenge window
Like many other suggestions, this one seems pretty complex and maybe too much effort for the result since its probably easy to track manually.
It would just be nice to be able to
!addchallenger johnstein -> adds johnstein if not added.
!remchallenger
!newchallenge CeBe -> makes new challenge
!challenge -> returns current challenge and player stats
!challenge -2 -> returns previous challenge stats
Observed Behavior:
death announcement and morgue link do not appear simultaneously. Additionally, morgue link is not color-coded the same as the death announcement (black bkg and red font).
Desired Behavior:
single death announcement + morgue link color-coded black bkg and red font.
Other factors:
need to address potential issue for node promises to not report anything if the morgue link fails (which occasionally happens if Sequell is down or there's a new version that isn't loaded in sequell yet (experimental versions, etc).
Sequell doesn't know about new player classes/races, resulting in spam when the bot tries to retrieve extra info. Need to parse this as a failure event.
Also check why failure is being reported twice.
23:59 < OCTOTROG> johnstein the Skirmisher (L3 PlCK), worshipper of Xom, slain by a gnoll (a +0,+0 whip) on D:2, with 62 points after 1552 turns and 0:08:00. [cbro+]
23:59 < OCTOTROG> No keyword 'PlCK'
23:59 < OCTOTROG> No keyword 'PlCK'
00:00 < OCTOTROG> No keyword 'PlCK'
00:00 < OCTOTROG> No keyword 'PlCK'
00:01 < OCTOTROG> No keyword 'PlCK'
00:01 < OCTOTROG> No keyword 'PlCK'
00:03 < OCTOTROG> No keyword 'PlCK'
00:03 < OCTOTROG> No keyword 'PlCK'
00:04 < OCTOTROG> No keyword 'PlCK'
00:04 < OCTOTROG> No keyword 'PlCK'
00:05 < OCTOTROG> No keyword 'PlCK'
00:05 < OCTOTROG> No keyword 'PlCK'
00:06 < OCTOTROG> No keyword 'PlCK'
00:06 < OCTOTROG> No keyword 'PlCK'
00:07 < OCTOTROG> CANNOT RETRIEVE ADDITIONAL INFO FOR PLAYER: JOHNSTEIN
00:07 < OCTOTROG> CANNOT RETRIEVE ADDITIONAL INFO FOR PLAYER: JOHNSTEIN
use cases:
watched player gets first rune, win, first minotaur lab kill, first time escaping abyss, etc
make font green on black or something catchy. or yellow. dunno
They apparently indicate search result numbers, NOT game numbers. Probably add a unique db constraint on turns/score/etc. instead.
When a player pulls a death result with !lg, the bot should repeat the query with -log appended to get the morgue URL.
OCTOTROG: platinum the Charmwright (L4 HESk), slain by Terence (a +0,+0 trident) on D:2, with 145 points after 2560 turns and 0:07:02.
2560 turns
Not sure how to gracefully check for this
Could do a !gamesby or !lg or !lm or something isnumeric(!watched_nick) = True.
But this won't be robust enough to catch if the !watched_nick hasn't completed a single game
Also could screw up if the score/turns is 256 but for a legitimate !watched_nick
So there may not be a simple solution
folks in #ocotolog were crashing the bots on ??cleave
[11:08] ??cleave
[11:08] |<-- OCTOTROG has left irc.jmbjr.com:13400 (Client exited)
[11:08] * odiv cleaved octotrog.
[11:11] looks like it's busted in ##crawl too.
[11:21] -->| TROGSTEIN ([email protected]) has joined #octolog
[11:21] TROG SAY DON'T DIE!
[11:22] !won
[11:22] ??cleave
[11:22] johnstein has won twice in 139 games (1.44%): 1xDsBe 1xMiBe
[11:22] |<-- TROGSTEIN has left irc.jmbjr.com:13400 (Client exited)
[11:22] weird
[11:22] ??cleave is killing the bot
[11:22] odiv: don't think so, but maybe
[11:22] johnstein: the ##crawl bots are fucked.
[11:23] So probably anything is killing the bot.
[11:23] yea
[11:23] henzell looks gone
[11:23] not !won, though
[11:23] Well I don't know about fucked.
[11:23] which is probably what you were saying above
[11:23] Yeah, sorry, the learnDB ones are.
[11:23] but maybe any henzell query
[11:23] I think henzell is the one that does ??
[11:23] chei is working
[11:23] for %?? requests
[11:23] but that's for trunk stuff
[11:24] oh it's sequell
[11:24] Sequell> cleave[1/2]: In 0.12+, axes awesomely cleave seven spaces around on attack, at the expense of nerfed damage (one less base damage for broad axes and two less for battleaxes and executioner's axes). The cleave attacks do 75% damage to secondary targets, and cleaving in a certain direction is blocked by solid features (but cleaving is done in both directions).
so in ##crawl, Sequell was picking up the slack for Henzell
So I did a quick fix on my copy in plugin.crawl.js
line 194 to 200
old:
// Henzell
"??": {
no_space: true,
description: "Look up an entry in LearnDB.",
response: function(opt) {
this.relay('Henzell', opt);
}
new
// Henzell
"??": {
no_space: true,
description: "Look up an entry in LearnDB.",
response: function(opt) {
this.relay('Sequell', opt);
}
I forgot to copy the error message
I tried to reproduce it, but Henzell had returned to ##crawl and although it was there, it wasn't replying to OCTOTROG (banned? ignored? dunno)
So this issue should address when Henzell is gone, use Sequell. Or if Henzell is there, but not responding promptly, send the query to Sequell or something. maybe a timeout error?
!backup TROGSTEIN OCTOTROG
would tell TROGSTEIN to only start talking if OCTOTROG isn't there
That way I could leave him in chat to get all the !watch and !dbadd commands/updates
If Zureal does:
!hs
It should really be passed to the appropriate crawl bot as
!hs zureal
This is because normally when in #crawl, the bot sees the correct nick typing !hs, but in this case, OCTOTROG is the bot telling them !hs
It's definitely a convenience feature, but one that you'll really want after typing these types of commands a hundred times: whereis, hs, etc.
OCTOTROG: [18:20:52] murphyslaw (L4 OpVM) killed Sigmund. (D:2)
OCTOTROG: [18:25:05] sigmund wins 29.10% of battles against murphy_slaw.
I've prototyped this using the tourney scripts
I can provide it a player whitelist and a list of milestone/logfiles urls and it creates a mysql db.
There's an existing python script to keep the db up to date
[20:13] !hs
[20:13] 119. johnstein the Axe Maniac (L27 MiBe), worshipper of Trog, escaped with the Orb and 4 runes on 2012-11-19 02:14:14, with 1656080 points after 160412 turns and 1d+10:24:55.
[20:13] !lm
[20:13] !lg
[20:14] 119. johnstein the Acrobat (L26 MfGl), worshipper of Jiyva, slain by a stone giant on Vaults:5 (vaults_vault) on 2013-10-09 07:23:44, with 551553 points after 135845 turns and 22:39:38.
also:
[19:54] !lm greynaab margery -tv
[19:55] !lm greynaab -tv
[19:55] !lm
[19:55] neckro why isn't OCTOTROG responding?
[
!readall will list all entries for a learndb request
!readall sheep
Flammable! Try sticky flame on a pack of them... / The sheep is almost dead. It is moving slowly, bewildered and confused, poisoned and covered in liquid flames. / Sheep are often found with a cyclops nearby in later dungeons, if you can't take down a cyclops, get the flock outta there.
( the / are the delimiters)
we can access !readall from #octolog by doubling up the !!
so
!!readall sheep
shmup had a good idea on just mapping ??? to !readall automatically
???sheep
Official bots do not need space
Currently using spaces to simplify parsing of commands.
Long-term: maintain consistency with official bots
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.