Periodic git commit

This commit is contained in:
Russell 2015-10-13 08:23:17 -05:00
parent 0b5a4fcfb8
commit 94127052c9
15 changed files with 169 additions and 85 deletions

View File

@ -0,0 +1,2 @@
endorphant&^%68
krowbar&^%60

View File

@ -1,4 +1,4 @@
#!/bin/bash
nohup ./wangbot.py -s 127.0.0.1 -n numberwang_bot -c \#tildetown >> wanglog 2>> wanglog &
nohup ./wangbot.py -s 127.0.0.1 -n numberwang_bot -c \#bots >> wanglog 2>> wanglog &
#nohup ./wangbot.py -s 127.0.0.1 -n numberwang_bot -c \#bot_test >> wanglog 2>> wanglog &

View File

@ -1,20 +1,20 @@
krowbar&^%225&^%1438182841
krowbar&^%238&^%1444399178
karlen&^%271&^%1426779321
endorphant&^%630&^%1438131263
endorphant&^%676&^%1444741627
jumblesale&^%24&^%1426171214
marcus&^%616&^%1440424356
marcus&^%787&^%1444392035
papa&^%179&^%1438878499
epicmorphism&^%5&^%1421937744
audy&^%76&^%1431897326
audy&^%78&^%1442345315
kc&^%18&^%1422326056
vilmibm&^%9&^%1423247508
cmr&^%864&^%1440424361
cmr&^%1006&^%1444701265
imt&^%519&^%1424087616
cndorphant&^%788&^%1424094192
rain&^%17&^%1422310975
sl2c&^%91&^%1424847521
selfsame&^%1&^%1422230012
bear&^%208&^%1438015446
bear&^%213&^%1443668443
coaxial&^%8&^%1422325983
joe&^%8&^%1422325983
hardmath123&^%4&^%1422325983
@ -23,7 +23,7 @@ cel&^%11&^%1430162676
quote_bots&^%3&^%1424737471
bave&^%1&^%1427591141
scellef&^%13&^%1428707074
cndorphbot&^%8&^%1438044694
cndorphbot&^%11&^%1441299746
reppard&^%11&^%1437512059
jesse&^%6&^%1437569027
khoi&^%3&^%1438044039

View File

@ -13,3 +13,6 @@
1426455418&^%endorphant&^%http://tilde.town/~wiki/ircbots.html | !golem
1429088209&^%jumblesale&^%
1429628571&^%endorphant&^%http://tilde.town/~wiki/ircbots.html
1443998388&^%cmr&^%http://tilde.town/~wiki/ircbots.html
1443998393&^%cmr&^%http://tilde.town/~wiki/ircbots.html
1444203916&^%cmr&^%http://tilde.town/~wiki/ircbots.html | cndorphbot:

View File

@ -108,3 +108,13 @@
1439443352&^%vilmibm&^%let's talk bout html and feels | congrats ~joe
1440076665&^%krowbar&^%Let's Play Factorio together! Community event *this* Saturday 1pm-3pm GMT. Ask ~krowbar or ~jumblesale for details
1440363401&^%krowbar&^%Welcome to tilde.town! A place where creativity abounds!
1440688887&^%krowbar&^%Welcome to tilde.town! Visit tilde.town/~krowbar/chatcloud to visualize the last 12 hours.
1440766704&^%krowbar&^%Tilde.town internet game social event. Indicate your availability at this poll: http://doodle.com/7q2dd74nfm2aqwcf
1442236331&^%krowbar&^%If you could take back something hurtful you've once said to someone, what would it be?
1442243124&^%krowbar&^%Is the milk glass half full or half empty and why?
1442243139&^%krowbar&^%What do you think the most ultimate gift of the world is.
1442255293&^%vilmibm&^%let's talk about html and feels
1442257397&^%vilmibm&^%what should we do for tilde.town's birthday?? | tilde.town turns 1 on October 11th
1442498441&^%krowbar&^%YAR! Happy Talk Like A Pirate Day on this fine September the 17th! Avast, ye scallywags!
1442502425&^%krowbar&^%what should we do for tilde.town's birthday?? | tilde.town turns 1 on October 11th
1444587668&^%vilmibm&^%~~~~~~~~~~~~HAPPY BIRTHDAY~~~~~~~~~~

View File

@ -1,4 +1,6 @@
krowbar&^%0&^%6
vilmibm&^%0&^%6
krowbar&^%0&^%13
vilmibm&^%0&^%9
hardmath123&^%0&^%6
joe&^%0&^%1
joe&^%0&^%1jumblesale&^%1&^%0
audiodude&^%1&^%0
cmr&^%0&^%3

View File

@ -164,7 +164,7 @@ def save_scores():
score = line.strip("\n").split("&^%")
if(score[0] == name):
line = score[0] + "&^%" + str(int(score[1]) + currentScores[name]) + "\n"
currentScores.remove(name)
del currentScores[name]
break
scorefile.write(line)

View File

@ -197,3 +197,34 @@ there
doing
even
does
theres
theyve
were
using
could
should
wont
way
though
being
while
cant
only
well
very
didnt
hes
quite
havent
weant
might
say
mean
still
come
will
used
want
roll
dice
length

View File

@ -8,8 +8,10 @@ import shutil
logfile = "/home/jumblesale/Code/irc/log"
outfile = "/home/krowbar/logs/userData.json"
userData = {} #hash keyed by "user" that contains an array of timestamps
#we only care about recent chats, let's say for the past two weeks
timeCutoff = calendar.timegm(time.gmtime()) - (2 * 7 * 24 * 60 * 60)
#we only care about recent chats, let's say for the past couple weeks
oneWeek = 7 * 24 * 60 * 60
fiveMinutes = 5 * 60
timeCutoff = calendar.timegm(time.gmtime()) - (2 * oneWeek)
with open(logfile, "r") as log:
for line in log:
@ -19,8 +21,12 @@ with open(logfile, "r") as log:
except ValueError:
continue #There are some bad lines in the log file that we'll ignore if we can't parse
if time > timeCutoff:
#standardize all times into a single "week"
#time %= oneWeek
#if the user already exists in the list
if user in userData:
if time < userData[user][-1] + fiveMinutes:
continue #only record times that are at least five minutes apart
userData[user].append(time) #append the new time
else: #if they are new
userData[user] = [time] #create a new list

23
Code/python/chatcloud.py Normal file → Executable file
View File

@ -8,12 +8,17 @@ import shutil
logfile = "/home/jumblesale/Code/irc/log"
outfile = "/home/krowbar/logs/chatcloud.json"
bannedUsersFile = "/home/krowbar/Code/python/bannedUsers"
bannedWordsFile = "/home/krowbar/Code/python/bannedWords"
wordData = {} # keyed by "word" that contains a count
#we only care about recent chats, let's say for the past two weeks
timeCutoff = calendar.timegm(time.gmtime()) - (2 * 7 * 24 * 60 * 60)
minOccurance = 10
#we only care about recent chats, let's say for the past sixteen hours
timeTo = calendar.timegm(time.gmtime())
timeCutoff = timeTo - (16 * 60 * 60)
print "Generating word cloud based off words from " + str(timeCutoff) + " to " + str(timeTo)
minOccurance = 3 #we'll have to reduce the minOccurances if we reduce the timeCutoff
minLength = 3 #number of letters long
bannedWords = open(bannedWordsFile).read().splitlines()
bannedUsers = open(bannedUsersFile).read().splitlines()
with open(logfile, "r") as log:
for line in log:
@ -22,9 +27,13 @@ with open(logfile, "r") as log:
time = int(time)
except ValueError:
continue #There are some bad lines in the log file that we'll ignore if we can't parse
if time > timeCutoff:
for word in re.sub('[\'\";:,.?!*&^\-()\[\]]', '', message).lower().split():
if word in bannedWords:
if user in bannedUsers:
continue #We don't care what they say
if time >= timeCutoff and time <= timeTo:
#print "Processing line from " + user + " at " + str(time)
for word in re.sub('[\'\"\`\/\\;:,.?!*&^\-()<>|_\[\]0-9]', '', message).lower().split():
if len(word) < minLength or word in bannedWords:
#print "Rejecting " + word
continue
#if the word already exists in the list
if word in wordData:
@ -33,6 +42,8 @@ with open(logfile, "r") as log:
wordData[word] = 1
#print "Added word: " + word
wordData = {i:wordData[i] for i in wordData if wordData[i] >= minOccurance }
if(len(wordData) == 0):
wordData = {"NOTHING": 1, "INTERESTING": 1, "TODAY": 1}
with open(outfile + ".tmp", "w") as tmpFile:
tmpFile.write(json.dumps(wordData))
shutil.move(outfile + ".tmp", outfile)

View File

@ -1,21 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Who chats and when?</title>
</head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js" charset="utf-8"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
<script type="text/javascript">
userData = {};
jQuery.getJSON("/~krowbar/data/userData.json", function(json) {
userData = json;
});
</script>
<body>
Here's some stuff! Check the console for userData
<br/>
Maybe I should use Google charts again instead of D3. Remember to use .setUTCSeconds()
</body>
</html>

View File

@ -1,26 +0,0 @@
How do do stuff
Data structure
users["name"]
.talked = array of irc times
.mentioned = array of irc times
DATA DAEMON
* Parse log for nicks that said something
- Populate data structure
* For each line, log the person who talked
- Check if any other person was mentioned
- Only log if it is at least 1 minute past their last chat/reference (maybe
to reduce data size)
* Write to log file
- Same file or dated one?
- Only certain time frames??
* Run daily/hourly?
PRESENTATION
* Select a user name from the drop down
- See a timeline with colored strands of when they spoke and were mentioned
* Something that looks like the Github commit history
* Use D3 for coolness

View File

@ -1,6 +1,35 @@
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<div>
<select id="series">
<option value="">Today</option>
<option value="_2015_09">Sep 2015</option>
<option value="_2015_08">Aug 2015</option>
<option value="_2015_07">July 2015</option>
<option value="_2015_06">June 2015</option>
<option value="_2015_05">May 2015</option>
<option value="_2015_04">Apr 2015</option>
<option value="_2015_03">Mar 2015</option>
<option value="_2015_02">Feb 2015</option>
<option value="_2015_01">Jan 2015</option>
<option value="_2014_12">Dec 2014</option>
<option value="_2014_11">Nov 2014</option>
<option value="_2014_10">Oct 2014</option>
<option value="_all_time">All Time</option>
</select>
<select id="howMuch">
<option value=0>All words</option>
<option value=1>Less words</option>
<option value=2>Lesser words</option>
<option value=3>Lessest words</option>
<select>
<button type="button"
onclick="getWords('/~krowbar/data/chatcloud' + document.getElementById('series').value + '.json',
document.getElementById('howMuch').value)"
>Generate Cloud</button>
</div>
<div id="cloud"></div>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.js"></script>
<script type="text/javascript" src="d3.layout.cloud.js"></script>
@ -8,30 +37,54 @@
<script>(function() {
var fill = d3.scale.category20();
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
layout = d3.layout.cloud();
jQuery.getJSON("/~krowbar/data/chatcloud.json", function(json) {
maxSize = 10; //default
getWords = function(source, fraction) {
jQuery.getJSON(source, function(json) {
delete json.length; //if one of our words is the word "length", it messes up the count
jsonWords = [];
maxCount = _.max(json);
minCount = _.min(json);
if(source.indexOf('_') == -1) {
var d = new Date();
jsonWords.push({text: months[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear(), size: maxCount+1});
}
//eliminate the bottom 10% * fraction items
threshold = minCount + Math.floor(( maxCount - minCount) * fraction / 10);
console.log("Out of",_.size(json), "words from", source, "with count", minCount, "to", maxCount,": adding words at least",threshold);
//console.log(json);
data = json;
_.forEach(json, function(count, word) {
console.log("Added", word, count);
jsonWords.push({text: word, size: count});
if(isNaN(count)) { console.log("DANGER!:", word, "is", count); };
if(count >= threshold) {
//console.log("Added", word, count);
jsonWords.push({text: word, size: count});
}
});
maxSize = Math.sqrt(maxCount);
layout
.size([1200, 800])
.words(jsonWords)
.padding(5)
.padding(3)
.rotate(function() { return ~~(Math.random() * 2) * 90; })
.font("Impact")
.fontSize(function(d) { return d.size * 2 / 3; })
.fontSize(function(d) { return Math.sqrt(d.size) * 50 / maxSize + 6; })
.on("end", draw);
layout.start();
});
})};
getWords("/~krowbar/data/chatcloud.json", 1);
draw = function(words) {
console.log("Started draw with", words);
d3.select("body").append("svg")
console.log("Started draw with", words.length, "words");
d3.select("svg").remove();
d3.select("#cloud").append("svg")
.attr("width", layout.size()[0])
.attr("height", layout.size()[1])
.append("g")
@ -50,3 +103,4 @@ draw = function(words) {
}
})();</script>
</body>

View File

@ -1,14 +1,22 @@
<html>
<head>
<title>WIP</title>
<title>~krowbar's home page</title>
</head>
<body>
<h2>I just clobbered my index.html file</h2>
<h3>New site some time soon</h3>
Links and stuff
<ul>
<li><a href="chatchecker/">Tilde.town IRC Chat checker</a></li>
<li><a href="twine2/">Twine 2.0</a></li>
<li><a href="mission/">Mission name generator</a></li>
<li><a href="Grimoire/">Grimoire: The Pathfinder Item Roller</a></li>
<li><a href="grimoire/app/">Grimoire: The Pathfinder Item Roller</a></li>
<li><a href="https://github.com/RussellChamp/PragmaticDiceBag">Pragmatic Dice Bag</a></li>
</ul>
<h2><a href="chatcloud/">Tilde.town IRC Chat cloud</a></h2>
<iframe width=1200 height=800 frameborder=0 scrolling="no" src="chatcloud/"></iframe>
<h2><a href="mission/">Mission name generator</a></h2>
<iframe width=1200 height=200 frameborder=0 scrolling="no" src="mission/"></iframe>
<h2><a href="du/">Tilde.town disk usage</a></h2>
<iframe width=1200 height=1200 frameborder=0 scrolling="no" src="du/"></iframe>
</body>

View File

@ -7,20 +7,24 @@
var self = this;
var adjectives = Array('Bold','Breaking','Brilliant','Crescent','Dark|Darkness','Desert|Desert','Evening|Darkness','Final','First','July','Last','Libery|Liberty','Magic|Magic','Morning|Morning','Power|Power','Phantom','Present','Roaring|Roar|Scream','Rolling','Sand','Screaming','Soaring','Standing|Stand','Star|Star','Urgent','Utopian','Valiant');
var nouns = Array('Action','Alert','Beauty','Claw','Darkness','Dawn','Day','Desert','Envy','Fall','Fist','Flight','Fury','Guard','Hammer','Hand','Honor','Hope','Hurricane','Liberty','Light','Lightning','Magic','Morning','October','Power','Rain','Repose','Roar','Scream','Skull','Shield','Stand','Star','Storm','Streak','Sun','Thunder','Wind','Wrath');
var colors = Array('Black','Blue','Brown','Gray','Green','Indego','Orange','Purple','Rainbow','Red','Scarlet','Violet','White','Yellow');
var actors = Array('Condor','Eagle','Guardian','Hawk','Hydra','Lady','Lion','Scorpion','Spartan','Titan','Victor','Viking','Warrior');
var adjectives = Array('Bold','Breaking','Brilliant','Crescent','Dark|Darkness','Desert|Desert','Eternal','Evening|Darkness','Final','First','Forever','Glorious','Joyful','July','Last','Libery|Liberty','Magic|Magic','Morning|Morning','Power|Power','Phantom','Present','Roaring|Roar|Scream','Rolling','Sand','Screaming|Roar|Scream','Soaring','Standing|Stand','Star|Star','Twisted','Urgent','Utopian','Valiant');
var nouns = Array('Action','Alert','Beauty','Claw','Darkness','Dawn','Day','Desert','Envy','Fall','Fist','Flight','Fury','Guard','Hammer','Hand','Honor','Hope','Hurricane','Liberty','Light','Lightning','Magic','Morning','October','Power','Rain','Repose','Roar','Scream','Skull','Sky','Skies','Shield','Stand','Star','Storm','Streak','Strike','Sun','Thunder','Victory','Whisper','Wind','Wrath');
var colors = Array('Black','Blue','Brown','Gray','Green','Indego','Orange','Purple','Rainbow','Red','Scarlet','Silver','Violet','White','Yellow');
var actors = Array('Cobra','Condor','Dragon','Eagle','Guardian','Hawk','Hydra','Jackal','King','Knight','Lady','Lion','Scorpion','Spartan','Titan','Victor','Viking','Warrior');
var mission_grammars = Array(
{chance:30, grammar: 'adj1 + " " + noun1'},
{chance:20, grammar: 'adj1 + " " + actor'},
{chance:10, grammar: 'color + " " + noun1'},
{chance:10, grammar: 'color + " " + actor'},
{chance:10, grammar: 'actor +"\'s " + noun1'},
{chance:10, grammar: 'noun1 + " of the " + noun2'},
{chance:10, grammar: 'noun1 + " of the " + actor'},
{chance:10, grammar: 'actor + " of the " + noun1'},
{chance:10, grammar: 'noun1 + " of " + noun2'},
{chance:10, grammar: 'noun1 + " of " + color + " " + noun2'},
{chance:10, grammar: 'adj1 + " " + noun1 + " and " + adj2 + " " + noun2'},
{chance:3, grammar: '"Attack of the " + actor + "s"'}
{chance:3, grammar: '"Attack of the " + actor + "s"'},
{chance:3, grammar: '"Return of the " + actor + "s"'}
);
this.getNoun = function(badNouns) {
return _.chain(nouns)