[{"data":1,"prerenderedAt":201},["ShallowReactive",2],{"project-3102534":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":28,"sentiment":9,"stance_mix":29,"scored_comments":33,"aspects":34,"strip":36,"post_text":37,"what":38,"said":65,"maker_in_thread":128,"shape":138,"grid":141,"attempts":162,"same_week":163,"maker_shows":129,"maker_hidden":193,"reader_version":194,"card":195},"3102534","my weekend project","A \"framework\" for IRC apps\u002Fbots","title","Show HN: my weekend project, a \"framework\" for IRC apps\u002Fbots",null,"llambda",1318420017,2011,24,10,435,1097,40,"shown","languages","irc bot framework","library",[23,24,25,26,27],"irc","python","bot framework","irc bot","plugins","quiet",{"positive":30,"neutral":31,"mixed":30,"critical":32},0,1,2,3,{"design":35},{"positive":30,"critical":32},[31,30,31,30,30,30,30,33,30,30],"This is a little project I've been working on for a while in order to better learn Python. Although IRC may not exactly be the most exciting medium, I still find it to be fun and useful, this interest lead me to writing a bot. In doing this I realized that what would actually be more interesting would be if I had a framework. There may already be such a thing, certainly there are IRC libraries, but I don't know if they're well-suited to deploying bots. At any rate if for no other reason than the fact that I am relatively new to programming and eager to learn I decided to build a framework. The",{"problem":39,"audience":45,"pricing":9,"motivation":53,"time_to_build":9,"stack":57,"openness":62,"stage":63,"team_size":64},{"value":40,"source":41,"evidence":42},"Deploying IRC bots; existing IRC libraries may not suit bot deployment","maker",[43],{"id":44},"post",{"value":46,"source":47,"evidence":48},"Developers writing IRC bots or applications in Python","inferred",[49,50],{"id":44},{"id":51,"by":10,"text":52},"3102658","Clickable: https:\u002F\u002Fgithub.com\u002Fmaxcountryman\u002Firctk Just a clarification, IrcTK is not itself a bot, it's a framework for writing IRC applications or bots. So this is different…",{"value":54,"source":41,"evidence":55},"Learning Python and having fun with IRC",[56],{"id":44},[58],{"value":59,"source":41,"evidence":60},"Python",[61],{"id":44},"open_source","unknown","solo",{"praise":66,"objections":75,"requests":90,"questions":95,"alternatives":106},[67],{"value":68,"source":69,"evidence":70},"Hot-reloading of bot code is useful for avoiding disconnects","commenter",[71],{"id":72,"by":73,"text":74},"3103164","oinksoft","Why is it called irctk if it doesn't use Tk?? I recommend you hot-reload code. My IRC bot is a humble 150LOC split over two files. The basic bot logic to connect to a network…",[76,82,86],{"value":77,"source":69,"evidence":78},"Bot model is too restrictive, only events and commands",[79],{"id":80,"by":73,"text":81},"3103230","I was looking at the example code, where bot logic and the run() was defined in the same module. That can't be reloaded. The reloader looks like it works for \"plugins.\" It all…",{"value":83,"source":69,"evidence":84},"Reloader design seems unnecessarily complex",[85],{"id":80,"by":73,"text":81},{"value":87,"source":69,"evidence":88},"Handlers lack the channel in the command context",[89],{"id":80,"by":73,"text":81},[91],{"value":92,"source":69,"evidence":93},"Pass channel to command handlers",[94],{"id":80,"by":73,"text":81},[96,100],{"value":97,"source":69,"evidence":98},"Why is it called irctk if it doesn't use Tk?",[99],{"id":72,"by":73,"text":74},{"value":101,"source":69,"evidence":102},"How is plugin dispatching handled and are plugins threaded?",[103],{"id":104,"by":10,"text":105},"3102950","Oh interesting. I'm looking at it now. How are you handling plugin dispatching? Are the plugins threaded?",[107,114,121],{"value":108,"source":69,"evidence":109},"Phenny",[110],{"id":111,"by":112,"text":113},"3102912","joezydeco","Try Phenny. I wrote a module for Phenny that captures URLs and tweets them to our channel friends. Pretty easy to learn and extend: http:\u002F\u002Finamidst.com\u002Fphenny\u002F",{"value":115,"source":69,"evidence":116},"Supybot",[117],{"id":118,"by":119,"text":120},"3102743","azs114","Check out supybot.",{"value":122,"source":69,"evidence":123},"coleifer\u002Firc",[124],{"id":125,"by":126,"text":127},"3102747","coleifer","Looks cool, I tried my hand at this not too long ago if you're interedted in comparing notes: https:\u002F\u002Fgithub.com\u002Fcoleifer\u002Firc\u002F",{"comments":129,"answered":31,"key":130},4,[131,134,137],{"id":132,"text":133},"3103201","1. TK == ToolKit a la libraries such as Werkzeug (toolbox) 2. It already does this. See the description. :)",{"id":135,"text":136},"3103266","I'm not sure what you mean when you say it can't be reloaded. In fact the only part of the code that cannot be hot-loaded is the socket connection (although this can be achieved…",{"id":51,"text":52},{"commenters":139,"max_depth":129,"maker_replies":129,"first_comment_mins":140,"lifespan_hours":129},6,46,[142,144,146,147,149,151,155,156,158,160],[72,30,31,143,73,30],"project\u002Fcritical\u002Fdesign",[132,30,30,145,10,31],"maker\u002Fneutral\u002Fdocs",[80,30,31,143,73,30],[135,30,30,148,10,31],"project\u002Fneutral\u002Fdesign",[51,31,30,150,10,31],"project\u002Fneutral\u002Fidea",[152,32,30,153,154,30],"3102827","other\u002Fneutral\u002Fnone","pux0r3",[111,33,30,153,112,30],[125,129,33,157,126,30],"project\u002Fneutral\u002Fnone",[104,129,30,159,10,31],"maker\u002Fneutral\u002Fnone",[118,161,30,153,119,30],5,[],[164,169,173,178,183,188],{"id":165,"name":166,"points":167,"category":168},"3086320","KernType",268,"games",{"id":170,"name":171,"points":172,"category":168},"3100274","Mr. Muscle and Crocodilehead game",247,{"id":174,"name":175,"points":176,"category":177},"3103307","Jobstractor",220,"web_saas",{"id":179,"name":180,"points":181,"category":182},"3087372","radiosilenceapp.com",146,"security_privacy",{"id":184,"name":185,"points":186,"category":187},"3081171","My table of tools for startups [Google Docs]",139,"productivity",{"id":189,"name":190,"points":191,"category":192},"3089355","Markdrop",70,"dev_tools",false,"v2",{"id":196,"name":5,"line":6,"ai":193,"cat":19,"year":12,"points":13,"comments":14,"rec":28,"s":9,"top":17,"kw":197,"maker":10,"domain":198,"tier":18,"attempts":30,"strip":199,"url":-1,"mix":200,"praise":68,"objection":77,"sub":20},3102534,[23,24,25,26,27],"","1010000300",[30,31,30,32],1793990875927]