<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crutchy</id>
	<title>SoylentNews - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crutchy"/>
	<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/wiki/Special:Contributions/Crutchy"/>
	<updated>2026-04-09T09:40:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9716</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9716"/>
		<updated>2016-01-30T00:29:24Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Official channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
* Official channels are usually safe for work / kids / family.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! NSFW !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || yes || mostly about bacon and stuff || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || yes || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp ||  || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight ||  || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || no || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || no || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || no || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || no || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* NSFW = not safe for work / kids /family (contains adult themes and profanity)&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting (if dumping errors to #debug, bots should ideally be set to not respond to commands in that channel to prevent race/infinite loop conditions).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9715</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9715"/>
		<updated>2016-01-30T00:28:25Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Private establishments (unofficial) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! NSFW !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || yes || mostly about bacon and stuff || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || yes || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp ||  || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight ||  || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || no || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || no || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || no || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || no || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* NSFW = not safe for work / kids /family (contains adult themes and profanity)&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting (if dumping errors to #debug, bots should ideally be set to not respond to commands in that channel to prevent race/infinite loop conditions).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9714</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9714"/>
		<updated>2016-01-30T00:27:57Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added nsfw column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! NSFW !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || yes || mostly about bacon and stuff || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || yes || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp ||  || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight ||  || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || no || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || no || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || no || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || no || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* NSFW = not safe for work (contains adult themes and profanity)&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting (if dumping errors to #debug, bots should ideally be set to not respond to commands in that channel to prevent race/infinite loop conditions).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9713</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9713"/>
		<updated>2016-01-30T00:22:29Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting (if dumping errors to #debug, bots should ideally be set to not respond to commands in that channel to prevent race/infinite loop conditions).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9712</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9712"/>
		<updated>2016-01-30T00:20:03Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9711</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9711"/>
		<updated>2016-01-30T00:18:15Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
||&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9710</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9710"/>
		<updated>2016-01-30T00:17:43Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9709</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9709"/>
		<updated>2016-01-30T00:16:32Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9708</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9708"/>
		<updated>2016-01-30T00:14:57Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added x to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9705</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9705"/>
		<updated>2016-01-23T11:37:27Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added some aliases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
a link to exec's main wiki page will be output if any user types &amp;quot;exec: help&amp;quot; in a channel where the bot resides&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kick %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
kicks %nick% from the channel. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kill %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
kills process run by exec with process id %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
only works for processes run by exec. processes outside exec aren't affected by this command&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
kills all processes being run by the bot at the time. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~links==&lt;br /&gt;
&lt;br /&gt;
alias of ~link&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
syntax: ~list&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands that don't require elevated privs&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
syntax: ~list-auth&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands requiring nickserv authentication&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location %name%&amp;lt;br&amp;gt;&lt;br /&gt;
returns the location associated with the specified name&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
syntax: ~lock %alias%&amp;lt;br&amp;gt;&lt;br /&gt;
treats all lines entered as being prefixed with alias, channel-specific&amp;lt;br&amp;gt;&lt;br /&gt;
see also: ~unlock&lt;br /&gt;
&lt;br /&gt;
==~lockdown==&lt;br /&gt;
syntax: ~lockdown&amp;lt;br&amp;gt;&lt;br /&gt;
admins-only&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op&amp;lt;br&amp;gt;&lt;br /&gt;
MODE $dest +ntipm&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
syntax: ~log param=value ...&amp;lt;br&amp;gt;&lt;br /&gt;
returns data from chromas' logging website&amp;lt;br&amp;gt;&lt;br /&gt;
refer to http://chromas.0x.no/s/soylent_log.php for more info&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
apt-get moo&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
syntax: ~op [%nick%]&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
%nick% is optional&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% isn't specified, will op the calling admin&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% is supplied, will op the specified %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op in channel&lt;br /&gt;
&lt;br /&gt;
==~openthepodbaydoors==&lt;br /&gt;
&lt;br /&gt;
fortune -s -o&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~rps==&lt;br /&gt;
&lt;br /&gt;
infinite asynchronous play-by-irc rock/paper/scissors&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: ~rps [ranks|r|p|s]&amp;lt;br&amp;gt;&lt;br /&gt;
rankings: http://ix.io/nAz&amp;lt;br&amp;gt;&lt;br /&gt;
handicap = losses/wins/turns*rounds*100&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/rps.php&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~seen==&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~submit==&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tell==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax: ~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands: ~time-add ~time-del ~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax: ~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands: ~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers: crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
syntax: ~users %command% %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
where %command% is one of:&amp;lt;br&amp;gt;&lt;br /&gt;
===nicks===&lt;br /&gt;
%subject% is the channel that you want to get a listing of nicks for&lt;br /&gt;
===channels===&lt;br /&gt;
%subject% is the nick that you want to get a list of channels for&lt;br /&gt;
===all-channels===&lt;br /&gt;
%subject% not applicable for this command&amp;lt;br&amp;gt;&lt;br /&gt;
returns a listing of all channels that stored users are members of&lt;br /&gt;
===count===&lt;br /&gt;
%subject% is the channel that you want the user count of&lt;br /&gt;
===data===&lt;br /&gt;
%subject% is the nick that you want to return stored data for&lt;br /&gt;
===account===&lt;br /&gt;
%subject% is the nick that you want to find out the nickserv account of&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==!isr==&lt;br /&gt;
In Soviet Russia, x2 x1s YOU!&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
==systemctl==&lt;br /&gt;
syntax: systemctl %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
tries to do %subject% and fails&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9704</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9704"/>
		<updated>2016-01-23T11:33:40Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added items template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%items%% = &amp;lt;i&amp;gt;php serialized array containing all parameters&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.delpage===&lt;br /&gt;
syntax: .delpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes page with specified title.&amp;lt;br&amp;gt;&lt;br /&gt;
This command is restricted to a list of hard coded NickServ accounts with wiki admin rights.&amp;lt;br&amp;gt;&lt;br /&gt;
If there are no wiki admins around and there is a clear spam violation, two trusted irc nickserv accounts may delete a page by each issuing the .delpage command for the same title.&lt;br /&gt;
&lt;br /&gt;
===.undelpage===&lt;br /&gt;
syntax: .undelpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Use this command to undo a .delpage command by a trusted irc nickserv account who isn't a wiki admin.&amp;lt;br&amp;gt;&lt;br /&gt;
Must be either a wiki admin or trusted irc nickserv account.&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.testrules===&lt;br /&gt;
syntax: .testrules %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Runs %username% through the regular expressions in the list of spam rules. Returns 'match' or 'no match'.&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Talk:ProposedSpending&amp;diff=9493</id>
		<title>Talk:ProposedSpending</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Talk:ProposedSpending&amp;diff=9493"/>
		<updated>2016-01-05T06:37:28Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Formatting=&lt;br /&gt;
&lt;br /&gt;
If you have an idea for proposed spending, click &amp;quot;Edit&amp;quot; at the top of this page and list it below and sign your comment using four tildes &amp;lt;nowiki&amp;gt;&amp;quot;~~~~&amp;quot;&amp;lt;/nowiki&amp;gt; (no quotes). The tildes will be replaced with a coded line signing your comment. Replies to that comment can be made by including a colon (for each level of indent) and a space after (&amp;quot;: &amp;quot; or &amp;quot;:: &amp;quot; etc.) at the beginning of the reply.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
Convert it to dolla dolla bills y'all and make it rain! [[User:Mrcoolbp|mrcoolbp]] ([[User talk:Mrcoolbp|talk]]) 20:41, 21 October 2015 (UTC) &lt;br /&gt;
: That's a horrible idea! [[User:Mrcoolbp|mrcoolbp]] ([[User talk:Mrcoolbp|talk]]) 20:55, 21 October 2015 (UTC)&lt;br /&gt;
:: I agree! [[User:Mrcoolbp|mrcoolbp]] ([[User talk:Mrcoolbp|talk]]) 21:00, 21 October 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[HelpTalk_pages2|More info on talk pages and commenting conventions]]&lt;br /&gt;
&lt;br /&gt;
=Suggestions= &amp;lt;!-- Place suggestions below this line using above conventions --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User DonkeyChan (5551) suggests that we pay back the founders using a &amp;quot;50% rule&amp;quot;, where half of the money generated beyond what is needed for the current period is split between being &amp;quot;banked for contingency&amp;quot; while the other half goes directly towards paying back the founders. [[User:Mrcoolbp|mrcoolbp]] ([[User talk:Mrcoolbp|talk]]) 22:44, 21 October 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
- i second this suggestion. paying back the founders should be a high priority so that SN can become a not-for-profit in the normal sense. it probably has tax benefits too. ~ [[User:Crutchy|crutchy]] 06:37, 5 January 2016 (UTC)&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9482</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9482"/>
		<updated>2015-12-27T08:41:38Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added ~lockdown command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
a link to exec's main wiki page will be output if any user types &amp;quot;exec: help&amp;quot; in a channel where the bot resides&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kick %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
kicks %nick% from the channel. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kill %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
kills process run by exec with process id %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
only works for processes run by exec. processes outside exec aren't affected by this command&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
kills all processes being run by the bot at the time. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~links==&lt;br /&gt;
&lt;br /&gt;
alias of ~link&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
syntax: ~list&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands that don't require elevated privs&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
syntax: ~list-auth&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands requiring nickserv authentication&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location %name%&amp;lt;br&amp;gt;&lt;br /&gt;
returns the location associated with the specified name&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
syntax: ~lock %alias%&amp;lt;br&amp;gt;&lt;br /&gt;
treats all lines entered as being prefixed with alias, channel-specific&amp;lt;br&amp;gt;&lt;br /&gt;
see also: ~unlock&lt;br /&gt;
&lt;br /&gt;
==~lockdown==&lt;br /&gt;
syntax: ~lockdown&amp;lt;br&amp;gt;&lt;br /&gt;
admins-only&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op&amp;lt;br&amp;gt;&lt;br /&gt;
MODE $dest +ntipm&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
syntax: ~log param=value ...&amp;lt;br&amp;gt;&lt;br /&gt;
returns data from chromas' logging website&amp;lt;br&amp;gt;&lt;br /&gt;
refer to http://chromas.0x.no/s/soylent_log.php for more info&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
apt-get moo&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
syntax: ~op [%nick%]&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
%nick% is optional&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% isn't specified, will op the calling admin&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% is supplied, will op the specified %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op in channel&lt;br /&gt;
&lt;br /&gt;
==~openthepodbaydoors==&lt;br /&gt;
&lt;br /&gt;
fortune -s -o&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax: ~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands: ~time-add ~time-del ~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax: ~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands: ~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers: crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
syntax: ~users %command% %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
where %command% is one of:&amp;lt;br&amp;gt;&lt;br /&gt;
===nicks===&lt;br /&gt;
%subject% is the channel that you want to get a listing of nicks for&lt;br /&gt;
===channels===&lt;br /&gt;
%subject% is the nick that you want to get a list of channels for&lt;br /&gt;
===all-channels===&lt;br /&gt;
%subject% not applicable for this command&amp;lt;br&amp;gt;&lt;br /&gt;
returns a listing of all channels that stored users are members of&lt;br /&gt;
===count===&lt;br /&gt;
%subject% is the channel that you want the user count of&lt;br /&gt;
===data===&lt;br /&gt;
%subject% is the nick that you want to return stored data for&lt;br /&gt;
===account===&lt;br /&gt;
%subject% is the nick that you want to find out the nickserv account of&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==!isr==&lt;br /&gt;
In Soviet Russia, x2 x1s YOU!&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
==systemctl==&lt;br /&gt;
syntax: systemctl %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
tries to do %subject% and fails&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9481</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9481"/>
		<updated>2015-12-27T03:23:31Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
a link to exec's main wiki page will be output if any user types &amp;quot;exec: help&amp;quot; in a channel where the bot resides&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kick %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
kicks %nick% from the channel. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kill %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
kills process run by exec with process id %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
only works for processes run by exec. processes outside exec aren't affected by this command&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
kills all processes being run by the bot at the time. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~links==&lt;br /&gt;
&lt;br /&gt;
alias of ~link&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
syntax: ~list&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands that don't require elevated privs&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
syntax: ~list-auth&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands requiring nickserv authentication&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location %name%&amp;lt;br&amp;gt;&lt;br /&gt;
returns the location associated with the specified name&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
syntax: ~lock %alias%&amp;lt;br&amp;gt;&lt;br /&gt;
treats all lines entered as being prefixed with alias, channel-specific&amp;lt;br&amp;gt;&lt;br /&gt;
see also: ~unlock&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
syntax: ~log param=value ...&amp;lt;br&amp;gt;&lt;br /&gt;
returns data from chromas' logging website&amp;lt;br&amp;gt;&lt;br /&gt;
refer to http://chromas.0x.no/s/soylent_log.php for more info&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
apt-get moo&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
syntax: ~op [%nick%]&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
%nick% is optional&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% isn't specified, will op the calling admin&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% is supplied, will op the specified %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op in channel&lt;br /&gt;
&lt;br /&gt;
==~openthepodbaydoors==&lt;br /&gt;
&lt;br /&gt;
fortune -s -o&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax: ~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands: ~time-add ~time-del ~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax: ~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands: ~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers: crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
syntax: ~users %command% %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
where %command% is one of:&amp;lt;br&amp;gt;&lt;br /&gt;
===nicks===&lt;br /&gt;
%subject% is the channel that you want to get a listing of nicks for&lt;br /&gt;
===channels===&lt;br /&gt;
%subject% is the nick that you want to get a list of channels for&lt;br /&gt;
===all-channels===&lt;br /&gt;
%subject% not applicable for this command&amp;lt;br&amp;gt;&lt;br /&gt;
returns a listing of all channels that stored users are members of&lt;br /&gt;
===count===&lt;br /&gt;
%subject% is the channel that you want the user count of&lt;br /&gt;
===data===&lt;br /&gt;
%subject% is the nick that you want to return stored data for&lt;br /&gt;
===account===&lt;br /&gt;
%subject% is the nick that you want to find out the nickserv account of&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==!isr==&lt;br /&gt;
In Soviet Russia, x2 x1s YOU!&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
==systemctl==&lt;br /&gt;
syntax: systemctl %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
tries to do %subject% and fails&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9480</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9480"/>
		<updated>2015-12-27T03:15:41Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
a link to exec's main wiki page will be output if any user types &amp;quot;exec: help&amp;quot; in a channel where the bot resides&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kick %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
kicks %nick% from the channel. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
syntax: ~kill %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
kills process run by exec with process id %pid%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
only works for processes run by exec. processes outside exec aren't affected by this command&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
kills all processes being run by the bot at the time. admin-only command&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~links==&lt;br /&gt;
&lt;br /&gt;
alias of ~link&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
syntax: ~list&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands that don't require elevated privs&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
syntax: ~list-auth&amp;lt;br&amp;gt;&lt;br /&gt;
lists available commands requiring nickserv authentication&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location %name%&amp;lt;br&amp;gt;&lt;br /&gt;
returns the location associated with the specified name&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
syntax: ~lock %alias%&amp;lt;br&amp;gt;&lt;br /&gt;
treats all lines entered as being prefixed with alias, channel-specific&amp;lt;br&amp;gt;&lt;br /&gt;
see also: ~unlock&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
syntax: ~log param=value ...&amp;lt;br&amp;gt;&lt;br /&gt;
returns data from chromas' logging website&amp;lt;br&amp;gt;&lt;br /&gt;
refer to http://chromas.0x.no/s/soylent_log.php for more info&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
apt-get moo&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
syntax: ~op [%nick%]&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
%nick% is optional&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% isn't specified, will op the calling admin&amp;lt;br&amp;gt;&lt;br /&gt;
if %nick% is supplied, will op the specified %nick%&amp;lt;br&amp;gt;&lt;br /&gt;
bot must be op in channel&lt;br /&gt;
&lt;br /&gt;
==~openthepodbaydoors==&lt;br /&gt;
&lt;br /&gt;
fortune -s -o&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax: ~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands: ~time-add ~time-del ~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax: ~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands: ~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers: crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources: https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
syntax: ~users %command% %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
admin-only command&amp;lt;br&amp;gt;&lt;br /&gt;
where %command% is one of:&amp;lt;br&amp;gt;&lt;br /&gt;
===nicks===&lt;br /&gt;
%subject% is the channel that you want to get a listing of nicks for&lt;br /&gt;
===channels===&lt;br /&gt;
%subject% is the nick that you want to get a list of channels for&lt;br /&gt;
===all-channels===&lt;br /&gt;
%subject% not applicable for this command&amp;lt;br&amp;gt;&lt;br /&gt;
returns a listing of all channels that stored users are members of&lt;br /&gt;
===count===&lt;br /&gt;
%subject% is the channel that you want the user count of&lt;br /&gt;
===data===&lt;br /&gt;
%subject% is the nick that you want to return stored data for&lt;br /&gt;
===account===&lt;br /&gt;
%subject% is the nick that you want to find out the nickserv account of&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
==systemctl==&lt;br /&gt;
syntax: systemctl %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
tries to do %subject% and fails&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9479</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9479"/>
		<updated>2015-12-27T02:53:26Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
~list (lists available commands)&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
~list-auth (lists available commands requiring NickServ account authorization)&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location code&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
~lock alias (treats all lines entered as being prefixed with alias, channel-specific)&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-del&amp;lt;br /&amp;gt;&lt;br /&gt;
~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s):&amp;lt;br /&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
syntax: ~users %command% %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
where %command% is one of:&amp;lt;br&amp;gt;&lt;br /&gt;
===nicks===&lt;br /&gt;
%subject% is the channel that you want to get a listing of nicks for&lt;br /&gt;
===channels===&lt;br /&gt;
%subject% is the nick that you want to get a list of channels for&lt;br /&gt;
===all-channels===&lt;br /&gt;
%subject% not applicable for this command&amp;lt;br&amp;gt;&lt;br /&gt;
returns a listing of all channels that stored users are members of&lt;br /&gt;
===count===&lt;br /&gt;
%subject% is the channel that you want the user count of&lt;br /&gt;
===data===&lt;br /&gt;
%subject% is the nick that you want to return stored data for&lt;br /&gt;
===account===&lt;br /&gt;
%subject% is the nick that you want to find out the nickserv account of&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
==systemctl==&lt;br /&gt;
syntax: systemctl %subject%&amp;lt;br&amp;gt;&lt;br /&gt;
tries to do %subject% and fails&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9449</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9449"/>
		<updated>2015-12-15T11:35:01Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* SoylentNews Wiki spam combat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.delpage===&lt;br /&gt;
syntax: .delpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes page with specified title.&amp;lt;br&amp;gt;&lt;br /&gt;
This command is restricted to a list of hard coded NickServ accounts with wiki admin rights.&amp;lt;br&amp;gt;&lt;br /&gt;
If there are no wiki admins around and there is a clear spam violation, two trusted irc nickserv accounts may delete a page by each issuing the .delpage command for the same title.&lt;br /&gt;
&lt;br /&gt;
===.undelpage===&lt;br /&gt;
syntax: .undelpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Use this command to undo a .delpage command by a trusted irc nickserv account who isn't a wiki admin.&amp;lt;br&amp;gt;&lt;br /&gt;
Must be either a wiki admin or trusted irc nickserv account.&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.testrules===&lt;br /&gt;
syntax: .testrules %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Runs %username% through the regular expressions in the list of spam rules. Returns 'match' or 'no match'.&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9448</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9448"/>
		<updated>2015-12-13T10:48:02Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added .undelpage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.delpage===&lt;br /&gt;
syntax: .delpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes page with specified title.&amp;lt;br&amp;gt;&lt;br /&gt;
This command is restricted to a list of hard coded NickServ accounts with wiki admin rights.&amp;lt;br&amp;gt;&lt;br /&gt;
If there are no wiki admins around and there is a clear spam violation, two trusted irc nickserv accounts may delete a page by each issuing the .delpage command for the same title.&lt;br /&gt;
&lt;br /&gt;
===.undelpage===&lt;br /&gt;
syntax: .undelpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Use this command to undo a .delpage command by a trusted irc nickserv account who isn't a wiki admin.&amp;lt;br&amp;gt;&lt;br /&gt;
Must be either a wiki admin or trusted irc nickserv account.&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9447</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9447"/>
		<updated>2015-12-13T09:59:35Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* .delpage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.delpage===&lt;br /&gt;
syntax: .delpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes page with specified title.&amp;lt;br&amp;gt;&lt;br /&gt;
This command is restricted to a list of hard coded NickServ accounts with wiki admin rights.&lt;br /&gt;
If there are no wiki admins around and there is a clear spam violation, two trusted irc nickserv accounts may delete a page by each issuing the .delpage command for the same title.&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9444</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9444"/>
		<updated>2015-12-12T10:52:56Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added delpage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.delpage===&lt;br /&gt;
syntax: .delpage %title%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes page with specified title.&amp;lt;br&amp;gt;&lt;br /&gt;
This command is restricted to a list of hard coded NickServ accounts.&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9443</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9443"/>
		<updated>2015-12-12T10:31:18Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: updated exec devs/ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9442</id>
		<title>User:Exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9442"/>
		<updated>2015-12-12T10:24:31Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[user:crutchy]]&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec#SoylentNews_Wiki_spam_combat]]&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9441</id>
		<title>User:Exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9441"/>
		<updated>2015-12-12T10:24:07Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[user:crutchy]]&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec#SoylentNews_Wiki_spam_combat]]&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/crutchy-/exec-irc-bot]]&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php]]&lt;br /&gt;
&lt;br /&gt;
[[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php]]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9437</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9437"/>
		<updated>2015-12-02T09:01:17Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Example scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. &amp;lt;b&amp;gt;On dev you may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education &amp;lt;b&amp;gt;On dev you may use the topiclist story op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The element may also contain forward-slashes that correspond to array levels, allowing you to drill down into an array structure to retrieve a specific piece of data.&lt;br /&gt;
For example, to get the uid of the latest comment:&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=comment op=latest /0/uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9426</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9426"/>
		<updated>2015-11-08T10:38:50Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Quick start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
===Get a list of commands===&lt;br /&gt;
&lt;br /&gt;
* ~list&lt;br /&gt;
* ~list-auth&lt;br /&gt;
&lt;br /&gt;
===Get help for a command===&lt;br /&gt;
&lt;br /&gt;
* ~help ~command&lt;br /&gt;
&lt;br /&gt;
===Public commands===&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
The exec bot has a wiki user account with the bot flag set.&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9341</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9341"/>
		<updated>2015-11-01T23:38:45Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9340</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9340"/>
		<updated>2015-11-01T23:38:09Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&amp;lt; /br&amp;gt;&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9337</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9337"/>
		<updated>2015-11-01T23:32:39Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&amp;lt;/br&amp;gt;&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9330</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9330"/>
		<updated>2015-11-01T22:52:44Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* SoylentNews Wiki spam combat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
The exec bot has a wiki user account with the bot flag set.&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/wiki_lib.php&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9267</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9267"/>
		<updated>2015-11-01T01:56:37Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* SoylentNews Wiki spam combat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
The exec bot has a wiki user account with the bot flag set.&lt;br /&gt;
Spam control features have been developed to help control botspam in the SN wiki.&lt;br /&gt;
These are a selection of commands that will only work in the #wiki channel.&lt;br /&gt;
&lt;br /&gt;
===.listspamrules===&lt;br /&gt;
syntax: .listspamrules&amp;lt;br&amp;gt;&lt;br /&gt;
Lists the regular expressions that are used to match names of users that edit the wiki. If the username matches one or more patterns, the page edited is automatically flagged.&lt;br /&gt;
===.listspamusers===&lt;br /&gt;
syntax: .listspamusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output blacklisted usernames, who when editing a page will trigger exec to automatically flag it as spam.&lt;br /&gt;
===.listsafeusers===&lt;br /&gt;
syntax: .listsafeusers&amp;lt;br&amp;gt;&lt;br /&gt;
Output whitelisted usernames, who will be allowed to make edits even if their username is blacklisted or matches a regexp rule.&lt;br /&gt;
===.delspamrule===&lt;br /&gt;
syntax: .delspamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified pattern from the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamrule===&lt;br /&gt;
syntax: .spamrule %pattern%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified pattern to the wiki spam rules file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamctl===&lt;br /&gt;
syntax: .spamctl %title%&amp;lt;br&amp;gt;&lt;br /&gt;
syntax: .spamctl last&amp;lt;br&amp;gt;&lt;br /&gt;
Commands exec to mark either the specified page as spam, or to mark the last edit output by the WikiRC bot.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delsafeuser===&lt;br /&gt;
syntax: .delsafeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.safeuser===&lt;br /&gt;
syntax: .safeuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki safe users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.delspamuser===&lt;br /&gt;
syntax: .delspamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Deletes the specified username from the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
===.spamuser===&lt;br /&gt;
syntax: .spamuser %username%&amp;lt;br&amp;gt;&lt;br /&gt;
Adds the specified username to the wiki spam users file.&amp;lt;br&amp;gt;&lt;br /&gt;
This is a privileged command (authorized users must be identified with NickServ).&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9266</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9266"/>
		<updated>2015-11-01T01:43:31Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
==SoylentNews Wiki spam combat==&lt;br /&gt;
&lt;br /&gt;
.listspamrules&lt;br /&gt;
.listspamusers&lt;br /&gt;
.listsafeusers&lt;br /&gt;
.delspamrule&lt;br /&gt;
.spamrule&lt;br /&gt;
.spamctl&lt;br /&gt;
.delsafeuser&lt;br /&gt;
.safeuser&lt;br /&gt;
.delspamuser&lt;br /&gt;
.spamuser&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_suggestions&amp;diff=9210</id>
		<title>IRC:exec suggestions</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_suggestions&amp;diff=9210"/>
		<updated>2015-10-24T07:49:50Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains suggestions for the [[IRC:exec|exec]] IRC bot.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
* IMDB movie info script&lt;br /&gt;
* language translation tools&lt;br /&gt;
&lt;br /&gt;
==Suggestions from IRC==&lt;br /&gt;
* chromas suggested a submission feed. poll http://sylnt.us/queue every 30 mins ~ [[User:crutchy|crutchy]] @ 02:06, 26 October 2014 (UTC)&lt;br /&gt;
* make freepascal version of SN log parser ~ [[User:crutchy|crutchy]] @ 02:08, 26 October 2014 (UTC)&lt;br /&gt;
* when regurgitator gets a wiki page, add a section ==Suggestions from IRC== and i'll be able to add a ~suggest-rss scripty to add to the list ~ [[User:crutchy|crutchy]] @ 05:36, 26 October 2014 (UTC)&lt;br /&gt;
* crutchy: maybe add a ~videosearch ~ [[User:crutchy|crutchy]] @ 10:52, 26 October 2014 (UTC)&lt;br /&gt;
* need to generalize the server post request that i used to upload irciv map images ~ [[User:crutchy|crutchy]] @ 13:00, 27 October 2014 (UTC)&lt;br /&gt;
* web interface for ~define-add definitions [chromas] ~ [[User:crutchy|crutchy]] @ 13:01, 27 October 2014 (UTC)&lt;br /&gt;
* need to add another list command that just lists options for single poll ~ [[User:crutchy|crutchy]] @ 21:01, 27 October 2014 (UTC)&lt;br /&gt;
* web bot management console ~ [[User:crutchy|crutchy]] @ 08:41, 29 October 2014 (UTC)&lt;br /&gt;
* with dynamical js thingys and gd charts and stuffs ~ [[User:crutchy|crutchy]] @ 08:44, 29 October 2014 (UTC)&lt;br /&gt;
* irciv ☺ ~ [[User:chromas|chromas]] @ 08:44, 29 October 2014 (UTC)&lt;br /&gt;
* for scrolling charts, left-align gd image of container width + extra, then increment left css prop of image negative and load next image segment with left prop equal to first img width less first img left, etc ~ [[User:crutchy|crutchy]] @ 08:49, 29 October 2014 (UTC)&lt;br /&gt;
* add some checksums/validation/whatevers to the bucket subsystem ~ [[User:crutchy|crutchy]] @ 13:56, 2 November 2014 (UTC)&lt;br /&gt;
* feed to flag if suggestion on wiki has been marked done ~ [[User:crutchy|crutchy]] @ 12:08, 8 November 2014 (UTC)&lt;br /&gt;
* web console with relay for crutchy's lappy ~ [[User:crutchy|crutchy]] @ 12:12, 8 November 2014 (UTC)&lt;br /&gt;
* SN journal feed ~ [[User:crutchy|crutchy]] @ 13:41, 11 November 2014 (UTC)&lt;br /&gt;
* commands to pause/unpause timer scripts ~ [[User:crutchy|crutchy]] @ 10:57, 21 November 2014 (UTC)&lt;br /&gt;
* maybe command to kill by alias ~ [[User:crutchy|crutchy]] @ 10:58, 21 November 2014 (UTC)&lt;br /&gt;
* php lib for slash api ~ [[User:crutchy|crutchy]] @ 11:41, 21 November 2014 (UTC)&lt;br /&gt;
* github issue search ~ [[User:crutchy|crutchy]] @ 15:07, 22 November 2014 (UTC)&lt;br /&gt;
* unserialize(): Error at offset 0 of 1589 bytes in /nas/server/git/exec-irc-bot/scripts/lib_buckets.php on line 100 on ~rehash ~ [[User:crutchy|crutchy]] @ 11:44, 31 December 2014 (UTC) EDIT: this one is due to a bug in irciv load function&lt;br /&gt;
* i need a way to tell what channels a minion is in ~ [[User:crutchy|crutchy]] @ 10:39, 31 January 2015 (UTC)&lt;br /&gt;
* if there's no queue message on ~queue, say something to that effect ~ [[User:crutchy|crutchy]] @ 02:07, 12 February 2015 (UTC)&lt;br /&gt;
* regex-based grab - chromas ~ [[User:crutchy|crutchy]] @ 12:16, 17 March 2015 (UTC)&lt;br /&gt;
* filtered comment pms should list the filter that matched ~ [[User:TheMightyBuzzard|TheMightyBuzzard]] @ 14:05, 20 March 2015 (UTC)&lt;br /&gt;
* http://wiki.soylentnews.org/wiki/IRC%3Aexec_suggestions#Suggestions_from_IRC&lt;br /&gt;
* ~imdb script ~ [[User:crutchy|crutchy]] @ 07:15, 13 August 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9209</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9209"/>
		<updated>2015-10-24T07:46:39Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Bot projects / task ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&amp;lt;/br&amp;gt;&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9207</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9207"/>
		<updated>2015-10-23T23:52:39Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Installing and running your own 'exec' bot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
MYSQL_LOG=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
If you want to enable MySQL logging, set the MYSQL_LOG setting to 1 instead of 0, and you will need to create a new schema per [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/schema_log.sql]]. A setup php script [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/mysql/setup_log.php]] has been created to make this a bit simpler. Tweak the password file location in the script to suit.&lt;br /&gt;
MySQL logging requires the lib_mysql.php file in the scripts subdirectory [[https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_mysql.php]]. Change the password file location in this file to suit also.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings (and optionally MySQL logging schema) sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SoylentNews&amp;diff=9186</id>
		<title>SoylentNews</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SoylentNews&amp;diff=9186"/>
		<updated>2015-10-04T08:48:10Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: updated slashcode repo link to rehash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a home for information about how '''[http://soylentnews.org SoylentNews.org]''' was started, the vision for it, and discussion about it's future. &lt;br /&gt;
&lt;br /&gt;
==About SoylentNews.org==&lt;br /&gt;
&lt;br /&gt;
Welcome to the '''[http://soylentnews.org SoylentNews.org]''' Wiki.&lt;br /&gt;
&lt;br /&gt;
We deliver community-sourced news and discussion. This is an [https://github.com/SoylentNews/slashcode open-source], grassroots effort powered by article submissions from our readers, volunteers, and our forked version of slashcode.  We highlight stories on the web which are important to everyone - especially nerds. We also provide a soapbox for discussion moderated by the site's patrons, and allow anonymous discourse as there's no mandatory registration needed to comment.&lt;br /&gt;
&lt;br /&gt;
We are mindful of community sentiment, and will not bend to overreaching corporate agenda. The goal is to be an excellent source for discussion and news about technology, art, science and politics.&lt;br /&gt;
&lt;br /&gt;
We've incorporated as a Delaware Public Benefit Corporation (similar to a non-profit) as we feel our mission to provide a platform for news dissemination and relevant discussion is not only essential for mankind, but also a legal right (i.e. freedom of press, freedom of speech) in some places, and these are liberties which we aim to protect.&lt;br /&gt;
&lt;br /&gt;
Though the site is young and there are [https://github.com/SoylentNews/slashcode/issues bugs], we are improving and adapting to satisfy the community's needs. We look forward to pushing the boundaries of web experience and are committed to involving the community on all major decisions.&lt;br /&gt;
&lt;br /&gt;
==Get Involved==&lt;br /&gt;
&lt;br /&gt;
This project is run entirely by the community and there are many different facets. Here are some of the many ways to participate:&lt;br /&gt;
&lt;br /&gt;
*'''[http://soylentnews.org/submit.pl Submit a Story]'''&lt;br /&gt;
** Try joining the #rss-bot channel in [[SoylentNews:IRC|IRC]] for story ideas&lt;br /&gt;
*'''Volunteer'''&lt;br /&gt;
** Get in touch with the '''[[Development|Development Team]]''', especially if you know perl&lt;br /&gt;
** Reach out to one of the other '''[[TeamPages|Teams]]''' (we have openings for many skill sets)&lt;br /&gt;
** Contact the relevant person: '''[[WhosWho| Who's Who?]]'''&lt;br /&gt;
*Hop in to '''IRC:'''&lt;br /&gt;
** #soylent on irc.soylentnews.org/6697&lt;br /&gt;
** [http://irc.sylnt.us/?channels=#soylent Webchat]&lt;br /&gt;
** [[SoylentNews:IRC|IRC Wiki Page]]&lt;br /&gt;
*'''Bugs''' and Features:&lt;br /&gt;
** [https://github.com/SoylentNews/slashcode/issues/new Submit a bug or Feature Request]&lt;br /&gt;
** [[Suggestions|Add a Suggestion]] - larger projects to tackle for the future&lt;br /&gt;
*'''Tell Somebody''' A friend, a colleague, any major news source....&lt;br /&gt;
** Do what you can to [[Spreading the word|get the word out]]&lt;br /&gt;
** You could participate in [[The_Slashcott|The Slashcott]]&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
&lt;br /&gt;
A list of people working on this project:&lt;br /&gt;
===[[WhosWho| Who's Who?]]===&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*[[Submission guidelines]] - best practices for story submissions&lt;br /&gt;
*[[Story Style]] - a guide for editors on article formatting&lt;br /&gt;
*[[Development]] team page&lt;br /&gt;
**[https://github.com/SoylentNews/rehash Code Repo] - The Slashcode fork repository for this project on GitHub&lt;br /&gt;
** [[DevelopmentVMHowto]] - How to get our code setup in a VM&lt;br /&gt;
** [[SlashDocumentationIndex]]&lt;br /&gt;
*[[UserExperience]] team page&lt;br /&gt;
**[[Style]] - some of this info needs to be merged/moved/organized into/with [[UserExperience]]&lt;br /&gt;
**[[CssWork]]&lt;br /&gt;
* [[SystemAdministration|System Administration]]&lt;br /&gt;
*[[Finances]] - Breakdown of our proposed spending&lt;br /&gt;
*[[Licensing]] - ideas about which license to use for our slashcode fork&lt;br /&gt;
*[[Staff_Meetings|Staff Meeting Logs]]&lt;br /&gt;
*[[SoylentNews_PBC|SoylentNews PBC]]&lt;br /&gt;
*[[SoylentNews_Site_Policy|SoylentNews Policy]]&lt;br /&gt;
&lt;br /&gt;
== Similar Projects ==&lt;br /&gt;
* [http://pipedot.org/ Pipedot] - A complete re-write that uses a modern codebase and sports a clean look&lt;br /&gt;
* Usenet newsgroup comp.misc - [https://groups.google.com/forum/#!forum/comp.misc on Google Groups], [http://squte.com/ on Squte], [news:comp.misc via newsreader application]&lt;br /&gt;
* [http://technocrat.net/ Technocrat] - (now defunt) News site presented by Bruce Perens&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
[[Archive]] -- An archive of obsolete pages/discussions that occurred before launch&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9127</id>
		<title>User:Exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9127"/>
		<updated>2015-09-27T00:13:17Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
[[user:crutchy]]&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
Editing of wiki articles may be performed using the ~wiki alias in IRC (must be authorized).&lt;br /&gt;
&lt;br /&gt;
==Approved tasks==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
Exec is a php IRC bot.&lt;br /&gt;
&lt;br /&gt;
==Description of tasks==&lt;br /&gt;
&lt;br /&gt;
.spamctl &amp;amp;lt;title&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
from the #wiki channel on irc.sylnt.us will trigger exec to replace all content in the &amp;amp;lt;title&amp;amp;gt; with spam template&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~wiki login&lt;br /&gt;
~wiki title[|section] (gets [section] content)&lt;br /&gt;
~wiki edit title|section|text&lt;br /&gt;
~wiki edit title|section| (deletes section)&lt;br /&gt;
~wiki logout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
must be authorized to use this script in IRC&lt;br /&gt;
&lt;br /&gt;
==Logs==&lt;br /&gt;
&lt;br /&gt;
http://irciv.us.to/irc_logs/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://irciv.us.to/exec_logs/20140702.txt&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9126</id>
		<title>User:Exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=User:Exec&amp;diff=9126"/>
		<updated>2015-09-27T00:12:52Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
[[user:crutchy]]&lt;br /&gt;
&lt;br /&gt;
==Capabilities==&lt;br /&gt;
Editing of wiki articles may be performed using the ~wiki alias in IRC (must be authorized).&lt;br /&gt;
&lt;br /&gt;
==Approved tasks==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
Exec is a php IRC bot.&lt;br /&gt;
&lt;br /&gt;
==Description of tasks==&lt;br /&gt;
&lt;br /&gt;
.spamctl &amp;amp;lt;title&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
from the #wiki channel on irc.sylnt.us will trigger exec to replace all content in the &amp;amp;lt;title&amp;amp;gt; with {{spam}}&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~wiki login&lt;br /&gt;
~wiki title[|section] (gets [section] content)&lt;br /&gt;
~wiki edit title|section|text&lt;br /&gt;
~wiki edit title|section| (deletes section)&lt;br /&gt;
~wiki logout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/scripts/wiki.php&lt;br /&gt;
&lt;br /&gt;
must be authorized to use this script in IRC&lt;br /&gt;
&lt;br /&gt;
==Logs==&lt;br /&gt;
&lt;br /&gt;
http://irciv.us.to/irc_logs/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://irciv.us.to/exec_logs/20140702.txt&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9121</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9121"/>
		<updated>2015-09-09T10:52:03Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~link==&lt;br /&gt;
&lt;br /&gt;
syntax to search: ~link %search%, set: ~link %id% %content%, delete: ~link %id% -&lt;br /&gt;
&lt;br /&gt;
can't use pipe (|) char, %id% can't contain spaces, but %content% can, %search% is a regexp pattern&lt;br /&gt;
&lt;br /&gt;
will return a list of one or more %id% =&amp;gt; %content% if %search% matches either %id% or %content%&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
~list (lists available commands)&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
~list-auth (lists available commands requiring NickServ account authorization)&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location code&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
~lock alias (treats all lines entered as being prefixed with alias, channel-specific)&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-del&amp;lt;br /&amp;gt;&lt;br /&gt;
~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s):&amp;lt;br /&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9120</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9120"/>
		<updated>2015-09-09T08:47:52Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* .macro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
~list (lists available commands)&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
~list-auth (lists available commands requiring NickServ account authorization)&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location code&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
~lock alias (treats all lines entered as being prefixed with alias, channel-specific)&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-del&amp;lt;br /&amp;gt;&lt;br /&gt;
~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s):&amp;lt;br /&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9119</id>
		<title>IRC:exec aliases</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec_aliases&amp;diff=9119"/>
		<updated>2015-09-09T08:47:36Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* .macro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
==~==&lt;br /&gt;
&lt;br /&gt;
==~bot==&lt;br /&gt;
&lt;br /&gt;
==~bucket==&lt;br /&gt;
&lt;br /&gt;
==~buckets-dump==&lt;br /&gt;
&lt;br /&gt;
==~buckets-flush==&lt;br /&gt;
&lt;br /&gt;
==~buckets-list==&lt;br /&gt;
&lt;br /&gt;
==~buckets-load==&lt;br /&gt;
&lt;br /&gt;
==~buckets-save==&lt;br /&gt;
&lt;br /&gt;
==~chart==&lt;br /&gt;
&lt;br /&gt;
==~cid==&lt;br /&gt;
&lt;br /&gt;
==~comments==&lt;br /&gt;
https://soylentnews.org/~crutchy/journal/1098&lt;br /&gt;
&lt;br /&gt;
==~count==&lt;br /&gt;
~count &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~cowsay==&lt;br /&gt;
&lt;br /&gt;
==~define==&lt;br /&gt;
~define term&lt;br /&gt;
&lt;br /&gt;
==~define-add==&lt;br /&gt;
~define-add term, meaning&lt;br /&gt;
&lt;br /&gt;
==~define-count==&lt;br /&gt;
&lt;br /&gt;
==~define-delete==&lt;br /&gt;
&lt;br /&gt;
==~define-list==&lt;br /&gt;
&lt;br /&gt;
==~define-source-edit==&lt;br /&gt;
&lt;br /&gt;
==~define-source-param==&lt;br /&gt;
&lt;br /&gt;
==~define-sources==&lt;br /&gt;
&lt;br /&gt;
==~deop==&lt;br /&gt;
&lt;br /&gt;
==~dest-clear==&lt;br /&gt;
&lt;br /&gt;
==~dest-override==&lt;br /&gt;
&lt;br /&gt;
==~devoice==&lt;br /&gt;
&lt;br /&gt;
==~find-first==&lt;br /&gt;
~find-first &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~find-last==&lt;br /&gt;
~find-last &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~first==&lt;br /&gt;
~first &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~fortune==&lt;br /&gt;
&lt;br /&gt;
==~g'day==&lt;br /&gt;
&lt;br /&gt;
==~gday==&lt;br /&gt;
&lt;br /&gt;
==~header==&lt;br /&gt;
~header &amp;amp;lt;header&amp;amp;gt; &amp;amp;lt;url&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
returns value of header (if found)&amp;lt;br&amp;gt;&lt;br /&gt;
fails silently if error occurs or header not found&lt;br /&gt;
&lt;br /&gt;
==~header-login==&lt;br /&gt;
&lt;br /&gt;
==~help==&lt;br /&gt;
&lt;br /&gt;
==~ignore==&lt;br /&gt;
&lt;br /&gt;
==~invite==&lt;br /&gt;
&lt;br /&gt;
==~ircd==&lt;br /&gt;
&lt;br /&gt;
==~isup==&lt;br /&gt;
~isup host[:port] (checks connection, returns http status if found)&lt;br /&gt;
&lt;br /&gt;
==~join==&lt;br /&gt;
~join #channel (don't have to be channel op)&lt;br /&gt;
&lt;br /&gt;
==~kick==&lt;br /&gt;
&lt;br /&gt;
==~kill==&lt;br /&gt;
&lt;br /&gt;
==~killall==&lt;br /&gt;
&lt;br /&gt;
==~last==&lt;br /&gt;
~last &amp;amp;lt;nick&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==~list==&lt;br /&gt;
~list (lists available commands)&lt;br /&gt;
&lt;br /&gt;
==~list-auth==&lt;br /&gt;
~list-auth (lists available commands requiring NickServ account authorization)&lt;br /&gt;
&lt;br /&gt;
==~location==&lt;br /&gt;
~location code&lt;br /&gt;
&lt;br /&gt;
==~lock==&lt;br /&gt;
~lock alias (treats all lines entered as being prefixed with alias, channel-specific)&lt;br /&gt;
&lt;br /&gt;
==~log==&lt;br /&gt;
&lt;br /&gt;
==~moo==&lt;br /&gt;
&lt;br /&gt;
==~op==&lt;br /&gt;
&lt;br /&gt;
==~part==&lt;br /&gt;
instruct bot to leave the current channel, or a different channel with optional parameter&amp;lt;br /&amp;gt;&lt;br /&gt;
syntax: ~part [channel]&lt;br /&gt;
&lt;br /&gt;
==~php==&lt;br /&gt;
&lt;br /&gt;
==~ps==&lt;br /&gt;
&lt;br /&gt;
==~q==&lt;br /&gt;
&lt;br /&gt;
==~queue==&lt;br /&gt;
~queue (returns number of SN submissions in the queue)&lt;br /&gt;
&lt;br /&gt;
==~rainbow==&lt;br /&gt;
~rainbow text&lt;br /&gt;
&lt;br /&gt;
==~rehash==&lt;br /&gt;
&lt;br /&gt;
==~remind==&lt;br /&gt;
&lt;br /&gt;
==~restart==&lt;br /&gt;
&lt;br /&gt;
==rofl==&lt;br /&gt;
&lt;br /&gt;
==~say==&lt;br /&gt;
&lt;br /&gt;
==~scramble==&lt;br /&gt;
&lt;br /&gt;
==~sed==&lt;br /&gt;
~sed on|off&amp;lt;br&amp;gt;&lt;br /&gt;
[nick[:|,|&amp;amp;gt;|.] ]s/pattern/replace[/[g]] (similar to SedBot)&lt;br /&gt;
&lt;br /&gt;
==~staff==&lt;br /&gt;
syntax: ~staff meeting&amp;lt;br&amp;gt;&lt;br /&gt;
displays meeting info from either the site news slashbox or the board meeting wiki page&lt;br /&gt;
&lt;br /&gt;
==~suggest==&lt;br /&gt;
&lt;br /&gt;
==~tests==&lt;br /&gt;
&lt;br /&gt;
==~time==&lt;br /&gt;
Syntax:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time location&amp;lt;br /&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br /&amp;gt;&lt;br /&gt;
~time-del&amp;lt;br /&amp;gt;&lt;br /&gt;
~location&amp;lt;br /&amp;gt;&lt;br /&gt;
Developer(s):&amp;lt;br /&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br /&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time.php&amp;lt;br /&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/time_lib.php&lt;br /&gt;
&lt;br /&gt;
==~time-add==&lt;br /&gt;
&lt;br /&gt;
==~time-del==&lt;br /&gt;
&lt;br /&gt;
==~title==&lt;br /&gt;
&lt;br /&gt;
==~translate==&lt;br /&gt;
~translate tolang text (auto-detects source lang, eg: ~translate en prueba)&lt;br /&gt;
&lt;br /&gt;
==~translate-sl==&lt;br /&gt;
~translate-sl fromlang tolang text (eg: ~translate-sl es en prueba)&lt;br /&gt;
&lt;br /&gt;
==~unignore==&lt;br /&gt;
&lt;br /&gt;
==~unlock==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~unlock&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~lock&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
==~up==&lt;br /&gt;
&lt;br /&gt;
==~users==&lt;br /&gt;
&lt;br /&gt;
==~voice==&lt;br /&gt;
&lt;br /&gt;
==~weather==&lt;br /&gt;
Syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather location&amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather JFK&amp;lt;br&amp;gt;&lt;br /&gt;
~weather vostok, aq&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather-add&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
Developers:&amp;lt;br&amp;gt;&lt;br /&gt;
crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&lt;br /&gt;
&lt;br /&gt;
==~weather-add==&lt;br /&gt;
Syntax: ~weather-add name location&amp;lt;br&amp;gt;&lt;br /&gt;
Developer(s): crutchy&amp;lt;br&amp;gt;&lt;br /&gt;
Sources:&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather.php&amp;lt;br&amp;gt;&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/weather_lib.php&amp;lt;br&amp;gt;&lt;br /&gt;
Related commands:&amp;lt;br&amp;gt;&lt;br /&gt;
~weather&amp;lt;br&amp;gt;&lt;br /&gt;
~time&amp;lt;br&amp;gt;&lt;br /&gt;
~time-add&amp;lt;br&amp;gt;&lt;br /&gt;
~location&amp;lt;br&amp;gt;&lt;br /&gt;
Description:&amp;lt;br&amp;gt;&lt;br /&gt;
Enables storing a short name to refer to a longer location description when using the ~weather or ~time commands.&amp;lt;br&amp;gt;&lt;br /&gt;
If a name already exists, setting it again will overwrite the existing named location.&amp;lt;br&amp;gt;&lt;br /&gt;
Names cannot be deleted at this stage.&amp;lt;br&amp;gt;&lt;br /&gt;
A few thousand ICAO and IATA/FAA airport codes have been imported into the codes file thanks to OpenFlights.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;crutchy&amp;amp;gt; ~weather-add crutchy melbourne australia&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;lt;exec&amp;amp;gt; code &amp;quot;crutchy&amp;quot; set for location &amp;quot;melbourne australia&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==~weather-del==&lt;br /&gt;
&lt;br /&gt;
==~welcome==&lt;br /&gt;
&lt;br /&gt;
==~wiki==&lt;br /&gt;
&lt;br /&gt;
==~x==&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;~x&amp;quot; alias allows a bot operator to create and manage scripts from within IRC (dubbed &amp;quot;live scripts&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
scripts created using this alias are stored in a bucket by the bot instead of a file&lt;br /&gt;
&lt;br /&gt;
the handler uses php's eval to run live scripts&lt;br /&gt;
&lt;br /&gt;
to prevent anyone from executing arbitrary commands on the bot host, a whois command is issued to verify that the NickServ account of the user of the ~x alias is the bot operator (by settling the userlist parameter of the alias definition line to &amp;quot;@&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
the general form of the command is:&lt;br /&gt;
&lt;br /&gt;
    ~x %action% [%param%] [%code%]&lt;br /&gt;
&lt;br /&gt;
in a nutshell the possible actions and params are:&lt;br /&gt;
&amp;quot;global on|off&amp;quot; (enables or disables all live scripts)&lt;br /&gt;
&amp;quot;kill&amp;quot; (a shorcut for disabling all live scripts)&lt;br /&gt;
&amp;quot;enable %script-name%&amp;quot; (enables an individual live script)&lt;br /&gt;
&amp;quot;disable %script-name%&amp;quot; (disables an individual live script)&lt;br /&gt;
&amp;quot;delete-script %script-name%&amp;quot; (deletes a live script from memory)&lt;br /&gt;
&amp;quot;open %script-name%&amp;quot; (opens a live script for editing in the active channel)&lt;br /&gt;
&amp;quot;close&amp;quot; (closes the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;code&amp;quot; (outputs a line-numbered code listing of the currently open live script in the active channel)&lt;br /&gt;
&amp;quot;list&amp;quot; (outputs a listing of available live scripts, and highlights enabled scripts)&lt;br /&gt;
&amp;quot;replace [L]%line-number% %old-code%|%new-code%&amp;quot; (replaces a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;delete-line [L]%line-number%&amp;quot; (deletes a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;insert [L]%line-number% %code%&amp;quot; (inserts a line of code in the currently open live script)&lt;br /&gt;
&amp;quot;add %code%&amp;quot; (adds a line of code to the currently open live script)&lt;br /&gt;
&lt;br /&gt;
import and export (from/to file) actions are also proposed but not yet implemented.&lt;br /&gt;
&lt;br /&gt;
live scripts have access to common lib functions used by other scripts, and also have direct access to $nick, $dest (channel), $trailing. the privmsg lib function doesn't work for live scripts as the live script handler is triggered internally by the bot using a registered privmsg event handler, so to privmsg the channel that the sender ($nick) is in you simply call pm($dest,&amp;quot;message) instead.&lt;br /&gt;
&lt;br /&gt;
when a new live script is created, it must be enabled before it will run, but once enabled any changes will come into affect immediately.&lt;br /&gt;
&lt;br /&gt;
whilst the code is currently limited to php, it could potentially be adapted to execute code in other languages using their command-line interpreters. it also doesn't have to be limited to code. it could potentially be used to collaborate on lines of non-executing text (such as for collaborative editing of SN submissions). with some tweaks it could be possible to collaborate on code as well, with other users being able to add/edit/delete lines but requiring the operator to re-enable the script for changes to come into effect.&lt;br /&gt;
&lt;br /&gt;
==.macro==&lt;br /&gt;
&lt;br /&gt;
syntax to add: .macro &amp;lt;trigger&amp;gt; &amp;lt;chanlist&amp;gt; PRIVMSG|INTERNAL &amp;lt;command_template&amp;gt;&lt;br /&gt;
syntax to delete: .macro &amp;lt;trigger&amp;gt; -&lt;br /&gt;
&amp;lt;chanlist&amp;gt; is comma-separated or * for any&lt;br /&gt;
&lt;br /&gt;
Used to set a PRIVMSG or INTERNAL macro.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/cmd.php#L130&lt;br /&gt;
&lt;br /&gt;
==.relays==&lt;br /&gt;
Outputs a list of freenode channel relays currently active.&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/activity.php#L111&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9105</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9105"/>
		<updated>2015-09-05T11:02:00Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Buckets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
===Accessing process templates===&lt;br /&gt;
&lt;br /&gt;
Process templates that are normally accessed using command-line arguments can also be accessed like ordinary buckets, using the index prefix &amp;quot;process_template_&amp;quot; followed by the name of the template.&lt;br /&gt;
For example, getting a bucket with index &amp;quot;process_template_nick&amp;quot; will return the nick of the caller.&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9104</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9104"/>
		<updated>2015-09-04T17:44:40Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Available exec templates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%server%% = &amp;lt;i&amp;gt;the irc server host (such as &amp;quot;irc.sylnt.us&amp;quot;)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9101</id>
		<title>IRCiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9101"/>
		<updated>2015-08-24T12:23:54Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''IRCiv''' is a little Civilization-like strategy game under development.&lt;br /&gt;
&lt;br /&gt;
It's run as a script by the exec IRC bot, which usually lurks in the #civ channel on the irc.sylnt.us server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.&lt;br /&gt;
[[File:irciv.png|100px|IRCiv logo|right]]&lt;br /&gt;
&lt;br /&gt;
[[IRC]] | [[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[File:irciv_map.png|600px|sample IRCiv map]] [[http://irciv.bot.nu/?pid=3]]&lt;br /&gt;
&lt;br /&gt;
==Starting a new game==&lt;br /&gt;
* ensure game bot is in proposed game channel with /invite or ~join&lt;br /&gt;
* gm issues &amp;quot;~civ register-channel&amp;quot; command to generate map for channel&lt;br /&gt;
* each player in channel that wishes to join game issues &amp;quot;~civ init&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
&lt;br /&gt;
IRCiv commands must start with the [[IRC:exec|exec]] alias &amp;quot;~civ&amp;quot; unless an alias lock is set.&lt;br /&gt;
&lt;br /&gt;
===Quick start guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help or ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===game-list===&lt;br /&gt;
&lt;br /&gt;
===player-list===&lt;br /&gt;
&lt;br /&gt;
===status===&lt;br /&gt;
Outputs a status message to either PM (default) or the game channel if &amp;quot;public_status&amp;quot; flag is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; http://irciv.bot.nu/?pid=1&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; 1/2, warrior, +100, (45,41)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During testing exec auto sets the public_status flag for every player.&lt;br /&gt;
&lt;br /&gt;
Adding a space-delimited x y coordinate after the status command will return the status of that coordinate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status 45 42&lt;br /&gt;
&amp;lt;exec&amp;gt; status for coordinate 45,42: occupied by crutchy&lt;br /&gt;
&amp;lt;exec&amp;gt; city: fart&lt;br /&gt;
&amp;lt;exec&amp;gt; units: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===flag===&lt;br /&gt;
&lt;br /&gt;
syntax: [~civ] flag name&lt;br /&gt;
&lt;br /&gt;
flags recognised:&lt;br /&gt;
&lt;br /&gt;
- public_status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;outputs player active unit status to game channel instead of private message (ignored during development)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- grid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints gridlines on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- coords&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints terrain grid coordinates on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- city_names&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints city names under cities using player color on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- logging&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;logs status messages to a file in the irciv data directory&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- irc_messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;enables/disables status message output to irc&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~civ flag public_status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unflag===&lt;br /&gt;
syntax: [~civ] unflag name&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
syntax: [~civ] set key=value&lt;br /&gt;
&lt;br /&gt;
===unset===&lt;br /&gt;
syntax: [~civ] unset key&lt;br /&gt;
&lt;br /&gt;
===Active unit movement===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up or u&lt;br /&gt;
down or d&lt;br /&gt;
left or l&lt;br /&gt;
right or r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after movement command, status is automatically shown&lt;br /&gt;
&lt;br /&gt;
if unit successfully moves, the active unit will be cycled to the next available unit&lt;br /&gt;
&lt;br /&gt;
units can't move off map or off landmasses&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;public_status&amp;quot; flag isn't set, it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status&lt;br /&gt;
&lt;br /&gt;
===Building a city===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build or b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
only settlers can build cities&lt;br /&gt;
&lt;br /&gt;
===Administration commands===&lt;br /&gt;
&lt;br /&gt;
- dev-op&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;test command for development&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- register-channel&lt;br /&gt;
&lt;br /&gt;
- save-data&lt;br /&gt;
&lt;br /&gt;
- load-data&lt;br /&gt;
&lt;br /&gt;
- init-ai&lt;br /&gt;
&lt;br /&gt;
- test-ai&lt;br /&gt;
&lt;br /&gt;
- player-unset&lt;br /&gt;
&lt;br /&gt;
- player-data&lt;br /&gt;
&lt;br /&gt;
- move-unit&lt;br /&gt;
&lt;br /&gt;
- object-edit&lt;br /&gt;
&lt;br /&gt;
- player-edit&lt;br /&gt;
&lt;br /&gt;
==Website==&lt;br /&gt;
&lt;br /&gt;
A simple website @ http://irciv.bot.nu/ has been set up to access map images output by the IRC script.&lt;br /&gt;
&lt;br /&gt;
A demo can be accessed here: http://irciv.bot.nu/?pid=1&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
===Development journal entries===&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/901&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/441&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/419&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/397&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/393&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/386&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/381&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/379&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/367&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/357&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/355&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/352&lt;br /&gt;
&lt;br /&gt;
==TO DO LIST==&lt;br /&gt;
# unit attacking&lt;br /&gt;
# city capturing&lt;br /&gt;
# city build queue&lt;br /&gt;
# diplomacy&lt;br /&gt;
# finances&lt;br /&gt;
# tech advancement&lt;br /&gt;
# new units&lt;br /&gt;
&lt;br /&gt;
== Development notes ==&lt;br /&gt;
&lt;br /&gt;
Have a &amp;quot;set color = R,G,B&amp;quot; setting, and publicly announce if a player changes color.&lt;br /&gt;
&lt;br /&gt;
Paint health bars above unit shields like civ2.&lt;br /&gt;
&lt;br /&gt;
Create attack_strength and defense_strength unit properties (for air,sea and land).&lt;br /&gt;
&lt;br /&gt;
If a unit moves into same coord as foreign unit and attack_strength &amp;gt; 0, initiate attack.&lt;br /&gt;
&lt;br /&gt;
Alliance settings? (use account name instead of nick)&lt;br /&gt;
&lt;br /&gt;
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.&lt;br /&gt;
&lt;br /&gt;
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense)&lt;br /&gt;
The defense rand must be no greater than the attack rand.&lt;br /&gt;
Modify attack/defense with terrain bonuses (as applicable).&lt;br /&gt;
&lt;br /&gt;
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: &amp;quot;irciv_webmaps_%%game_id%%_%%player_id%%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Improve map output&lt;br /&gt;
- include flags for various features: units, cities, fog, etc&lt;br /&gt;
&lt;br /&gt;
Goto command, using migrated delphi pathfinding algorithm.&lt;br /&gt;
&lt;br /&gt;
Territory: fixed radius around cities and coords occupied for certain time.&lt;br /&gt;
&lt;br /&gt;
Player negotiation/interaction/diplomacy.&lt;br /&gt;
&lt;br /&gt;
Tech advancement&lt;br /&gt;
&lt;br /&gt;
Finance/tax&lt;br /&gt;
&lt;br /&gt;
More units/city improvements&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
&lt;br /&gt;
===Website===&lt;br /&gt;
&lt;br /&gt;
Limit map file uploads to IP address (security by obscurity).&lt;br /&gt;
&lt;br /&gt;
Floating absolute positioned box in top left corner with mouse click data (scrollable?).&lt;br /&gt;
Highlighted map tile selection image (floating, absolute).&lt;br /&gt;
Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick.&lt;br /&gt;
Put logo in floating div in top left corner (above data div).&lt;br /&gt;
No margins/padding around map image.&lt;br /&gt;
&lt;br /&gt;
===TODO: Delphi IRCiv client===&lt;br /&gt;
&lt;br /&gt;
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features).&lt;br /&gt;
Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players.&lt;br /&gt;
When the local player takes an action, download a new map.&lt;br /&gt;
&lt;br /&gt;
===Exec notes===&lt;br /&gt;
&lt;br /&gt;
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.&lt;br /&gt;
&lt;br /&gt;
Add a socket interface for buckets.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9100</id>
		<title>IRCiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9100"/>
		<updated>2015-08-24T12:22:43Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Administration commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''IRCiv''' is a little Civilization-like strategy game under development.&lt;br /&gt;
&lt;br /&gt;
It's run as a script by the exec IRC bot, which usually lurks in the #civ channel on the irc.sylnt.us server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.&lt;br /&gt;
[[File:irciv.png|100px|IRCiv logo|right]]&lt;br /&gt;
&lt;br /&gt;
[[IRC]] | [[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[File:irciv_map.png|600px|sample IRCiv map]] [[http://irciv.bot.nu/?pid=3]]&lt;br /&gt;
&lt;br /&gt;
==Starting a new game==&lt;br /&gt;
* ensure game bot is in proposed game channel with /invite or ~join&lt;br /&gt;
* gm issues &amp;quot;~civ register-channel&amp;quot; command to generate map for channel&lt;br /&gt;
* each player in channel that wishes to join game issues &amp;quot;~civ init&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
&lt;br /&gt;
IRCiv commands must start with the [[IRC:exec|exec]] alias &amp;quot;~civ&amp;quot; unless an alias lock is set.&lt;br /&gt;
&lt;br /&gt;
===Quick start guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help or ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===status===&lt;br /&gt;
Outputs a status message to either PM (default) or the game channel if &amp;quot;public_status&amp;quot; flag is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; http://irciv.bot.nu/?pid=1&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; 1/2, warrior, +100, (45,41)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During testing exec auto sets the public_status flag for every player.&lt;br /&gt;
&lt;br /&gt;
Adding a space-delimited x y coordinate after the status command will return the status of that coordinate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status 45 42&lt;br /&gt;
&amp;lt;exec&amp;gt; status for coordinate 45,42: occupied by crutchy&lt;br /&gt;
&amp;lt;exec&amp;gt; city: fart&lt;br /&gt;
&amp;lt;exec&amp;gt; units: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===flag===&lt;br /&gt;
&lt;br /&gt;
syntax: [~civ] flag name&lt;br /&gt;
&lt;br /&gt;
flags recognised:&lt;br /&gt;
&lt;br /&gt;
- public_status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;outputs player active unit status to game channel instead of private message (ignored during development)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- grid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints gridlines on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- coords&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints terrain grid coordinates on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- city_names&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints city names under cities using player color on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- logging&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;logs status messages to a file in the irciv data directory&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- irc_messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;enables/disables status message output to irc&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~civ flag public_status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unflag===&lt;br /&gt;
syntax: [~civ] unflag name&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
syntax: [~civ] set key=value&lt;br /&gt;
&lt;br /&gt;
===unset===&lt;br /&gt;
syntax: [~civ] unset key&lt;br /&gt;
&lt;br /&gt;
===Active unit movement===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up or u&lt;br /&gt;
down or d&lt;br /&gt;
left or l&lt;br /&gt;
right or r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after movement command, status is automatically shown&lt;br /&gt;
&lt;br /&gt;
if unit successfully moves, the active unit will be cycled to the next available unit&lt;br /&gt;
&lt;br /&gt;
units can't move off map or off landmasses&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;public_status&amp;quot; flag isn't set, it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status&lt;br /&gt;
&lt;br /&gt;
===Building a city===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build or b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
only settlers can build cities&lt;br /&gt;
&lt;br /&gt;
===Administration commands===&lt;br /&gt;
&lt;br /&gt;
- dev-op&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;test command for development&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- register-channel&lt;br /&gt;
&lt;br /&gt;
- save-data&lt;br /&gt;
&lt;br /&gt;
- load-data&lt;br /&gt;
&lt;br /&gt;
- init-ai&lt;br /&gt;
&lt;br /&gt;
- test-ai&lt;br /&gt;
&lt;br /&gt;
- player-unset&lt;br /&gt;
&lt;br /&gt;
- player-data&lt;br /&gt;
&lt;br /&gt;
- move-unit&lt;br /&gt;
&lt;br /&gt;
- object-edit&lt;br /&gt;
&lt;br /&gt;
- player-edit&lt;br /&gt;
&lt;br /&gt;
==Website==&lt;br /&gt;
&lt;br /&gt;
A simple website @ http://irciv.bot.nu/ has been set up to access map images output by the IRC script.&lt;br /&gt;
&lt;br /&gt;
A demo can be accessed here: http://irciv.bot.nu/?pid=1&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
===Development journal entries===&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/901&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/441&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/419&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/397&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/393&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/386&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/381&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/379&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/367&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/357&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/355&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/352&lt;br /&gt;
&lt;br /&gt;
==TO DO LIST==&lt;br /&gt;
# unit attacking&lt;br /&gt;
# city capturing&lt;br /&gt;
# city build queue&lt;br /&gt;
# diplomacy&lt;br /&gt;
# finances&lt;br /&gt;
# tech advancement&lt;br /&gt;
# new units&lt;br /&gt;
&lt;br /&gt;
== Development notes ==&lt;br /&gt;
&lt;br /&gt;
Have a &amp;quot;set color = R,G,B&amp;quot; setting, and publicly announce if a player changes color.&lt;br /&gt;
&lt;br /&gt;
Paint health bars above unit shields like civ2.&lt;br /&gt;
&lt;br /&gt;
Create attack_strength and defense_strength unit properties (for air,sea and land).&lt;br /&gt;
&lt;br /&gt;
If a unit moves into same coord as foreign unit and attack_strength &amp;gt; 0, initiate attack.&lt;br /&gt;
&lt;br /&gt;
Alliance settings? (use account name instead of nick)&lt;br /&gt;
&lt;br /&gt;
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.&lt;br /&gt;
&lt;br /&gt;
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense)&lt;br /&gt;
The defense rand must be no greater than the attack rand.&lt;br /&gt;
Modify attack/defense with terrain bonuses (as applicable).&lt;br /&gt;
&lt;br /&gt;
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: &amp;quot;irciv_webmaps_%%game_id%%_%%player_id%%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Improve map output&lt;br /&gt;
- include flags for various features: units, cities, fog, etc&lt;br /&gt;
&lt;br /&gt;
Goto command, using migrated delphi pathfinding algorithm.&lt;br /&gt;
&lt;br /&gt;
Territory: fixed radius around cities and coords occupied for certain time.&lt;br /&gt;
&lt;br /&gt;
Player negotiation/interaction/diplomacy.&lt;br /&gt;
&lt;br /&gt;
Tech advancement&lt;br /&gt;
&lt;br /&gt;
Finance/tax&lt;br /&gt;
&lt;br /&gt;
More units/city improvements&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
&lt;br /&gt;
===Website===&lt;br /&gt;
&lt;br /&gt;
Limit map file uploads to IP address (security by obscurity).&lt;br /&gt;
&lt;br /&gt;
Floating absolute positioned box in top left corner with mouse click data (scrollable?).&lt;br /&gt;
Highlighted map tile selection image (floating, absolute).&lt;br /&gt;
Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick.&lt;br /&gt;
Put logo in floating div in top left corner (above data div).&lt;br /&gt;
No margins/padding around map image.&lt;br /&gt;
&lt;br /&gt;
===TODO: Delphi IRCiv client===&lt;br /&gt;
&lt;br /&gt;
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features).&lt;br /&gt;
Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players.&lt;br /&gt;
When the local player takes an action, download a new map.&lt;br /&gt;
&lt;br /&gt;
===Exec notes===&lt;br /&gt;
&lt;br /&gt;
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.&lt;br /&gt;
&lt;br /&gt;
Add a socket interface for buckets.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9099</id>
		<title>IRCiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9099"/>
		<updated>2015-08-24T12:22:20Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Administration commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''IRCiv''' is a little Civilization-like strategy game under development.&lt;br /&gt;
&lt;br /&gt;
It's run as a script by the exec IRC bot, which usually lurks in the #civ channel on the irc.sylnt.us server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.&lt;br /&gt;
[[File:irciv.png|100px|IRCiv logo|right]]&lt;br /&gt;
&lt;br /&gt;
[[IRC]] | [[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[File:irciv_map.png|600px|sample IRCiv map]] [[http://irciv.bot.nu/?pid=3]]&lt;br /&gt;
&lt;br /&gt;
==Starting a new game==&lt;br /&gt;
* ensure game bot is in proposed game channel with /invite or ~join&lt;br /&gt;
* gm issues &amp;quot;~civ register-channel&amp;quot; command to generate map for channel&lt;br /&gt;
* each player in channel that wishes to join game issues &amp;quot;~civ init&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
&lt;br /&gt;
IRCiv commands must start with the [[IRC:exec|exec]] alias &amp;quot;~civ&amp;quot; unless an alias lock is set.&lt;br /&gt;
&lt;br /&gt;
===Quick start guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help or ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===status===&lt;br /&gt;
Outputs a status message to either PM (default) or the game channel if &amp;quot;public_status&amp;quot; flag is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; http://irciv.bot.nu/?pid=1&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; 1/2, warrior, +100, (45,41)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During testing exec auto sets the public_status flag for every player.&lt;br /&gt;
&lt;br /&gt;
Adding a space-delimited x y coordinate after the status command will return the status of that coordinate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status 45 42&lt;br /&gt;
&amp;lt;exec&amp;gt; status for coordinate 45,42: occupied by crutchy&lt;br /&gt;
&amp;lt;exec&amp;gt; city: fart&lt;br /&gt;
&amp;lt;exec&amp;gt; units: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===flag===&lt;br /&gt;
&lt;br /&gt;
syntax: [~civ] flag name&lt;br /&gt;
&lt;br /&gt;
flags recognised:&lt;br /&gt;
&lt;br /&gt;
- public_status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;outputs player active unit status to game channel instead of private message (ignored during development)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- grid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints gridlines on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- coords&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints terrain grid coordinates on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- city_names&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints city names under cities using player color on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- logging&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;logs status messages to a file in the irciv data directory&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- irc_messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;enables/disables status message output to irc&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~civ flag public_status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unflag===&lt;br /&gt;
syntax: [~civ] unflag name&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
syntax: [~civ] set key=value&lt;br /&gt;
&lt;br /&gt;
===unset===&lt;br /&gt;
syntax: [~civ] unset key&lt;br /&gt;
&lt;br /&gt;
===Active unit movement===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up or u&lt;br /&gt;
down or d&lt;br /&gt;
left or l&lt;br /&gt;
right or r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after movement command, status is automatically shown&lt;br /&gt;
&lt;br /&gt;
if unit successfully moves, the active unit will be cycled to the next available unit&lt;br /&gt;
&lt;br /&gt;
units can't move off map or off landmasses&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;public_status&amp;quot; flag isn't set, it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status&lt;br /&gt;
&lt;br /&gt;
===Building a city===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build or b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
only settlers can build cities&lt;br /&gt;
&lt;br /&gt;
===Administration commands===&lt;br /&gt;
&lt;br /&gt;
- dev-op&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;test command for development&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- register-channel&lt;br /&gt;
&lt;br /&gt;
- save-data&lt;br /&gt;
- load-data&lt;br /&gt;
&lt;br /&gt;
- init-ai&lt;br /&gt;
- test-ai&lt;br /&gt;
&lt;br /&gt;
- player-unset&lt;br /&gt;
- player-data&lt;br /&gt;
- move-unit&lt;br /&gt;
- object-edit&lt;br /&gt;
- player-edit&lt;br /&gt;
&lt;br /&gt;
==Website==&lt;br /&gt;
&lt;br /&gt;
A simple website @ http://irciv.bot.nu/ has been set up to access map images output by the IRC script.&lt;br /&gt;
&lt;br /&gt;
A demo can be accessed here: http://irciv.bot.nu/?pid=1&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
===Development journal entries===&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/901&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/441&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/419&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/397&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/393&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/386&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/381&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/379&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/367&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/357&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/355&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/352&lt;br /&gt;
&lt;br /&gt;
==TO DO LIST==&lt;br /&gt;
# unit attacking&lt;br /&gt;
# city capturing&lt;br /&gt;
# city build queue&lt;br /&gt;
# diplomacy&lt;br /&gt;
# finances&lt;br /&gt;
# tech advancement&lt;br /&gt;
# new units&lt;br /&gt;
&lt;br /&gt;
== Development notes ==&lt;br /&gt;
&lt;br /&gt;
Have a &amp;quot;set color = R,G,B&amp;quot; setting, and publicly announce if a player changes color.&lt;br /&gt;
&lt;br /&gt;
Paint health bars above unit shields like civ2.&lt;br /&gt;
&lt;br /&gt;
Create attack_strength and defense_strength unit properties (for air,sea and land).&lt;br /&gt;
&lt;br /&gt;
If a unit moves into same coord as foreign unit and attack_strength &amp;gt; 0, initiate attack.&lt;br /&gt;
&lt;br /&gt;
Alliance settings? (use account name instead of nick)&lt;br /&gt;
&lt;br /&gt;
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.&lt;br /&gt;
&lt;br /&gt;
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense)&lt;br /&gt;
The defense rand must be no greater than the attack rand.&lt;br /&gt;
Modify attack/defense with terrain bonuses (as applicable).&lt;br /&gt;
&lt;br /&gt;
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: &amp;quot;irciv_webmaps_%%game_id%%_%%player_id%%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Improve map output&lt;br /&gt;
- include flags for various features: units, cities, fog, etc&lt;br /&gt;
&lt;br /&gt;
Goto command, using migrated delphi pathfinding algorithm.&lt;br /&gt;
&lt;br /&gt;
Territory: fixed radius around cities and coords occupied for certain time.&lt;br /&gt;
&lt;br /&gt;
Player negotiation/interaction/diplomacy.&lt;br /&gt;
&lt;br /&gt;
Tech advancement&lt;br /&gt;
&lt;br /&gt;
Finance/tax&lt;br /&gt;
&lt;br /&gt;
More units/city improvements&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
&lt;br /&gt;
===Website===&lt;br /&gt;
&lt;br /&gt;
Limit map file uploads to IP address (security by obscurity).&lt;br /&gt;
&lt;br /&gt;
Floating absolute positioned box in top left corner with mouse click data (scrollable?).&lt;br /&gt;
Highlighted map tile selection image (floating, absolute).&lt;br /&gt;
Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick.&lt;br /&gt;
Put logo in floating div in top left corner (above data div).&lt;br /&gt;
No margins/padding around map image.&lt;br /&gt;
&lt;br /&gt;
===TODO: Delphi IRCiv client===&lt;br /&gt;
&lt;br /&gt;
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features).&lt;br /&gt;
Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players.&lt;br /&gt;
When the local player takes an action, download a new map.&lt;br /&gt;
&lt;br /&gt;
===Exec notes===&lt;br /&gt;
&lt;br /&gt;
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.&lt;br /&gt;
&lt;br /&gt;
Add a socket interface for buckets.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9098</id>
		<title>IRCiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9098"/>
		<updated>2015-08-24T12:17:26Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: added logging and irc_messages flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''IRCiv''' is a little Civilization-like strategy game under development.&lt;br /&gt;
&lt;br /&gt;
It's run as a script by the exec IRC bot, which usually lurks in the #civ channel on the irc.sylnt.us server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.&lt;br /&gt;
[[File:irciv.png|100px|IRCiv logo|right]]&lt;br /&gt;
&lt;br /&gt;
[[IRC]] | [[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[File:irciv_map.png|600px|sample IRCiv map]] [[http://irciv.bot.nu/?pid=3]]&lt;br /&gt;
&lt;br /&gt;
==Starting a new game==&lt;br /&gt;
* ensure game bot is in proposed game channel with /invite or ~join&lt;br /&gt;
* gm issues &amp;quot;~civ register-channel&amp;quot; command to generate map for channel&lt;br /&gt;
* each player in channel that wishes to join game issues &amp;quot;~civ init&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
&lt;br /&gt;
IRCiv commands must start with the [[IRC:exec|exec]] alias &amp;quot;~civ&amp;quot; unless an alias lock is set.&lt;br /&gt;
&lt;br /&gt;
===Quick start guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help or ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===status===&lt;br /&gt;
Outputs a status message to either PM (default) or the game channel if &amp;quot;public_status&amp;quot; flag is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; http://irciv.bot.nu/?pid=1&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; 1/2, warrior, +100, (45,41)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During testing exec auto sets the public_status flag for every player.&lt;br /&gt;
&lt;br /&gt;
Adding a space-delimited x y coordinate after the status command will return the status of that coordinate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status 45 42&lt;br /&gt;
&amp;lt;exec&amp;gt; status for coordinate 45,42: occupied by crutchy&lt;br /&gt;
&amp;lt;exec&amp;gt; city: fart&lt;br /&gt;
&amp;lt;exec&amp;gt; units: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===flag===&lt;br /&gt;
&lt;br /&gt;
syntax: [~civ] flag name&lt;br /&gt;
&lt;br /&gt;
flags recognised:&lt;br /&gt;
&lt;br /&gt;
- public_status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;outputs player active unit status to game channel instead of private message (ignored during development)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- grid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints gridlines on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- coords&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints terrain grid coordinates on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- city_names&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints city names under cities using player color on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- logging&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;logs status messages to a file in the irciv data directory&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- irc_messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;enables/disables status message output to irc&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~civ flag public_status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unflag===&lt;br /&gt;
syntax: [~civ] unflag name&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
syntax: [~civ] set key=value&lt;br /&gt;
&lt;br /&gt;
===unset===&lt;br /&gt;
syntax: [~civ] unset key&lt;br /&gt;
&lt;br /&gt;
===Active unit movement===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up or u&lt;br /&gt;
down or d&lt;br /&gt;
left or l&lt;br /&gt;
right or r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after movement command, status is automatically shown&lt;br /&gt;
&lt;br /&gt;
if unit successfully moves, the active unit will be cycled to the next available unit&lt;br /&gt;
&lt;br /&gt;
units can't move off map or off landmasses&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;public_status&amp;quot; flag isn't set, it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status&lt;br /&gt;
&lt;br /&gt;
===Building a city===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build or b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
only settlers can build cities&lt;br /&gt;
&lt;br /&gt;
===Administration commands===&lt;br /&gt;
&lt;br /&gt;
Under development.&lt;br /&gt;
&lt;br /&gt;
==Website==&lt;br /&gt;
&lt;br /&gt;
A simple website @ http://irciv.bot.nu/ has been set up to access map images output by the IRC script.&lt;br /&gt;
&lt;br /&gt;
A demo can be accessed here: http://irciv.bot.nu/?pid=1&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
===Development journal entries===&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/901&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/441&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/419&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/397&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/393&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/386&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/381&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/379&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/367&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/357&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/355&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/352&lt;br /&gt;
&lt;br /&gt;
==TO DO LIST==&lt;br /&gt;
# unit attacking&lt;br /&gt;
# city capturing&lt;br /&gt;
# city build queue&lt;br /&gt;
# diplomacy&lt;br /&gt;
# finances&lt;br /&gt;
# tech advancement&lt;br /&gt;
# new units&lt;br /&gt;
&lt;br /&gt;
== Development notes ==&lt;br /&gt;
&lt;br /&gt;
Have a &amp;quot;set color = R,G,B&amp;quot; setting, and publicly announce if a player changes color.&lt;br /&gt;
&lt;br /&gt;
Paint health bars above unit shields like civ2.&lt;br /&gt;
&lt;br /&gt;
Create attack_strength and defense_strength unit properties (for air,sea and land).&lt;br /&gt;
&lt;br /&gt;
If a unit moves into same coord as foreign unit and attack_strength &amp;gt; 0, initiate attack.&lt;br /&gt;
&lt;br /&gt;
Alliance settings? (use account name instead of nick)&lt;br /&gt;
&lt;br /&gt;
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.&lt;br /&gt;
&lt;br /&gt;
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense)&lt;br /&gt;
The defense rand must be no greater than the attack rand.&lt;br /&gt;
Modify attack/defense with terrain bonuses (as applicable).&lt;br /&gt;
&lt;br /&gt;
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: &amp;quot;irciv_webmaps_%%game_id%%_%%player_id%%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Improve map output&lt;br /&gt;
- include flags for various features: units, cities, fog, etc&lt;br /&gt;
&lt;br /&gt;
Goto command, using migrated delphi pathfinding algorithm.&lt;br /&gt;
&lt;br /&gt;
Territory: fixed radius around cities and coords occupied for certain time.&lt;br /&gt;
&lt;br /&gt;
Player negotiation/interaction/diplomacy.&lt;br /&gt;
&lt;br /&gt;
Tech advancement&lt;br /&gt;
&lt;br /&gt;
Finance/tax&lt;br /&gt;
&lt;br /&gt;
More units/city improvements&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
&lt;br /&gt;
===Website===&lt;br /&gt;
&lt;br /&gt;
Limit map file uploads to IP address (security by obscurity).&lt;br /&gt;
&lt;br /&gt;
Floating absolute positioned box in top left corner with mouse click data (scrollable?).&lt;br /&gt;
Highlighted map tile selection image (floating, absolute).&lt;br /&gt;
Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick.&lt;br /&gt;
Put logo in floating div in top left corner (above data div).&lt;br /&gt;
No margins/padding around map image.&lt;br /&gt;
&lt;br /&gt;
===TODO: Delphi IRCiv client===&lt;br /&gt;
&lt;br /&gt;
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features).&lt;br /&gt;
Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players.&lt;br /&gt;
When the local player takes an action, download a new map.&lt;br /&gt;
&lt;br /&gt;
===Exec notes===&lt;br /&gt;
&lt;br /&gt;
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.&lt;br /&gt;
&lt;br /&gt;
Add a socket interface for buckets.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9093</id>
		<title>IRCiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRCiv&amp;diff=9093"/>
		<updated>2015-08-18T10:18:13Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: changed dns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''IRCiv''' is a little Civilization-like strategy game under development.&lt;br /&gt;
&lt;br /&gt;
It's run as a script by the exec IRC bot, which usually lurks in the #civ channel on the irc.sylnt.us server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.&lt;br /&gt;
[[File:irciv.png|100px|IRCiv logo|right]]&lt;br /&gt;
&lt;br /&gt;
[[IRC]] | [[IRC:exec]]&lt;br /&gt;
&lt;br /&gt;
[[File:irciv_map.png|600px|sample IRCiv map]] [[http://irciv.bot.nu/?pid=3]]&lt;br /&gt;
&lt;br /&gt;
==Starting a new game==&lt;br /&gt;
* ensure game bot is in proposed game channel with /invite or ~join&lt;br /&gt;
* gm issues &amp;quot;~civ register-channel&amp;quot; command to generate map for channel&lt;br /&gt;
* each player in channel that wishes to join game issues &amp;quot;~civ init&amp;quot; command&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
&lt;br /&gt;
IRCiv commands must start with the [[IRC:exec|exec]] alias &amp;quot;~civ&amp;quot; unless an alias lock is set.&lt;br /&gt;
&lt;br /&gt;
===Quick start guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
help or ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===status===&lt;br /&gt;
Outputs a status message to either PM (default) or the game channel if &amp;quot;public_status&amp;quot; flag is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; http://irciv.bot.nu/?pid=1&lt;br /&gt;
&amp;lt;exec&amp;gt; #civ crutchy =&amp;gt; 1/2, warrior, +100, (45,41)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During testing exec auto sets the public_status flag for every player.&lt;br /&gt;
&lt;br /&gt;
Adding a space-delimited x y coordinate after the status command will return the status of that coordinate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~civ status 45 42&lt;br /&gt;
&amp;lt;exec&amp;gt; status for coordinate 45,42: occupied by crutchy&lt;br /&gt;
&amp;lt;exec&amp;gt; city: fart&lt;br /&gt;
&amp;lt;exec&amp;gt; units: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===flag===&lt;br /&gt;
&lt;br /&gt;
syntax: [~civ] flag name&lt;br /&gt;
&lt;br /&gt;
flags recognised:&lt;br /&gt;
&lt;br /&gt;
- public_status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;outputs player active unit status to game channel instead of private message (ignored during development)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- grid&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints gridlines on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- coords&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints terrain grid coordinates on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- city_names&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;paints city names under cities using player color on map images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~civ flag public_status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===unflag===&lt;br /&gt;
syntax: [~civ] unflag name&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
syntax: [~civ] set key=value&lt;br /&gt;
&lt;br /&gt;
===unset===&lt;br /&gt;
syntax: [~civ] unset key&lt;br /&gt;
&lt;br /&gt;
===Active unit movement===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
up or u&lt;br /&gt;
down or d&lt;br /&gt;
left or l&lt;br /&gt;
right or r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
after movement command, status is automatically shown&lt;br /&gt;
&lt;br /&gt;
if unit successfully moves, the active unit will be cycled to the next available unit&lt;br /&gt;
&lt;br /&gt;
units can't move off map or off landmasses&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;public_status&amp;quot; flag isn't set, it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status&lt;br /&gt;
&lt;br /&gt;
===Building a city===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build or b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
only settlers can build cities&lt;br /&gt;
&lt;br /&gt;
===Administration commands===&lt;br /&gt;
&lt;br /&gt;
Under development.&lt;br /&gt;
&lt;br /&gt;
==Website==&lt;br /&gt;
&lt;br /&gt;
A simple website @ http://irciv.bot.nu/ has been set up to access map images output by the IRC script.&lt;br /&gt;
&lt;br /&gt;
A demo can be accessed here: http://irciv.bot.nu/?pid=1&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
===Development journal entries===&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/901&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/441&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/419&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/397&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/393&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/386&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/381&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/379&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/367&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/357&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/355&lt;br /&gt;
&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/352&lt;br /&gt;
&lt;br /&gt;
==TO DO LIST==&lt;br /&gt;
# unit attacking&lt;br /&gt;
# city capturing&lt;br /&gt;
# city build queue&lt;br /&gt;
# diplomacy&lt;br /&gt;
# finances&lt;br /&gt;
# tech advancement&lt;br /&gt;
# new units&lt;br /&gt;
&lt;br /&gt;
== Development notes ==&lt;br /&gt;
&lt;br /&gt;
Have a &amp;quot;set color = R,G,B&amp;quot; setting, and publicly announce if a player changes color.&lt;br /&gt;
&lt;br /&gt;
Paint health bars above unit shields like civ2.&lt;br /&gt;
&lt;br /&gt;
Create attack_strength and defense_strength unit properties (for air,sea and land).&lt;br /&gt;
&lt;br /&gt;
If a unit moves into same coord as foreign unit and attack_strength &amp;gt; 0, initiate attack.&lt;br /&gt;
&lt;br /&gt;
Alliance settings? (use account name instead of nick)&lt;br /&gt;
&lt;br /&gt;
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.&lt;br /&gt;
&lt;br /&gt;
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense)&lt;br /&gt;
The defense rand must be no greater than the attack rand.&lt;br /&gt;
Modify attack/defense with terrain bonuses (as applicable).&lt;br /&gt;
&lt;br /&gt;
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: &amp;quot;irciv_webmaps_%%game_id%%_%%player_id%%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Improve map output&lt;br /&gt;
- include flags for various features: units, cities, fog, etc&lt;br /&gt;
&lt;br /&gt;
Goto command, using migrated delphi pathfinding algorithm.&lt;br /&gt;
&lt;br /&gt;
Territory: fixed radius around cities and coords occupied for certain time.&lt;br /&gt;
&lt;br /&gt;
Player negotiation/interaction/diplomacy.&lt;br /&gt;
&lt;br /&gt;
Tech advancement&lt;br /&gt;
&lt;br /&gt;
Finance/tax&lt;br /&gt;
&lt;br /&gt;
More units/city improvements&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
&lt;br /&gt;
===Website===&lt;br /&gt;
&lt;br /&gt;
Limit map file uploads to IP address (security by obscurity).&lt;br /&gt;
&lt;br /&gt;
Floating absolute positioned box in top left corner with mouse click data (scrollable?).&lt;br /&gt;
Highlighted map tile selection image (floating, absolute).&lt;br /&gt;
Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick.&lt;br /&gt;
Put logo in floating div in top left corner (above data div).&lt;br /&gt;
No margins/padding around map image.&lt;br /&gt;
&lt;br /&gt;
===TODO: Delphi IRCiv client===&lt;br /&gt;
&lt;br /&gt;
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features).&lt;br /&gt;
Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players.&lt;br /&gt;
When the local player takes an action, download a new map.&lt;br /&gt;
&lt;br /&gt;
===Exec notes===&lt;br /&gt;
&lt;br /&gt;
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.&lt;br /&gt;
&lt;br /&gt;
Add a socket interface for buckets.&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9068</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9068"/>
		<updated>2015-06-25T22:03:20Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Quick start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~title]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9067</id>
		<title>IRC:exec</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC:exec&amp;diff=9067"/>
		<updated>2015-06-25T22:02:53Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: /* Quick start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;'''[[User:exec|exec]]'''&amp;quot; is a bot that runs in a CLI that connects to the Soylent [[SoylentNews:IRC|IRC server]] (irc.sylnt.us) and executes other programs and facilitates their interaction with IRC.&lt;br /&gt;
&lt;br /&gt;
[[File:exec.png|right]]&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/exec&lt;br /&gt;
&lt;br /&gt;
[[IRC:exec_aliases|IRC:exec aliases]] | [[IRC]] | [[IRCiv]] | [[Suggestions]] | [[Test page]] | [[IRC:exec_suggestions|IRC:exec suggestions]] | [[ApiDocs|SlashCode API]]&amp;lt;br /&amp;gt;&lt;br /&gt;
http://soylentnews.org/~crutchy/journal/&lt;br /&gt;
&lt;br /&gt;
==Installing and running your own 'exec' bot==&lt;br /&gt;
&lt;br /&gt;
Register a nick with NickServ on the IRC server. In these instructions, %nick% is a placeholder for your bot's actual nick. Other placeholders should hopefully be self-explanatory. If you have any issues, hop onto irc.sylnt.us and ping 'crutchy'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mkdir %nick%&lt;br /&gt;
$ cd %nick%&lt;br /&gt;
$ mkdir data&lt;br /&gt;
$ mkdir log&lt;br /&gt;
$ mkdir pwd&lt;br /&gt;
$ cd pwd&lt;br /&gt;
$ echo &amp;quot;%bot_nickserv_password%&amp;quot; &amp;gt; %nick%&lt;br /&gt;
$ cd ..&lt;br /&gt;
$ git clone https://github.com/crutchy-/exec-irc-bot.git&lt;br /&gt;
$ cd exec-irc-bot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can edit default settings in irc.php, or create a settings file containing similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NICK=%nick%&lt;br /&gt;
USER_NAME=%nick%&lt;br /&gt;
FULL_NAME=%nick%.bot&lt;br /&gt;
PASSWORD_FILE=../pwd/%nick%&lt;br /&gt;
BUCKETS_FILE=../data/buckets&lt;br /&gt;
IGNORE_FILE=../data/ignore&lt;br /&gt;
EXEC_FILE=exec.txt&lt;br /&gt;
INIT_CHAN_LIST=#&lt;br /&gt;
EXEC_LOG_PATH=../log&lt;br /&gt;
IRC_LOG_URL=&lt;br /&gt;
IRC_HOST_CONNECT=irc.sylnt.us&lt;br /&gt;
IRC_HOST=irc.sylnt.us&lt;br /&gt;
IRC_PORT=6667&lt;br /&gt;
MEMORY_LIMIT=128M&lt;br /&gt;
OPERATOR_ACCOUNT=%your_personal_nickserv_account_name%&lt;br /&gt;
DEBUG_CHAN=#debug&lt;br /&gt;
NICKSERV_IDENTIFY_PROMPT=You have 60 seconds to identify to your nickname before it is changed.&lt;br /&gt;
ADMIN_ACCOUNTS=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can store this file anywhere, but its recommended that it be stored in the same directory as irc.php. In this example the config filename is 'sylnt'.&lt;br /&gt;
&lt;br /&gt;
Once you have your settings sorted out, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;php irc.php sylnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quick start==&lt;br /&gt;
&lt;br /&gt;
These commands can be triggered by anyone in a channel with the bot.&lt;br /&gt;
&lt;br /&gt;
* /invite exec (must be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ejoin|~join]] #channel (don't have to be channel op)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[IRC:exec_aliases#.7Esed|~sed]] on|off&amp;lt;br /&amp;gt;&lt;br /&gt;
sed syntax: [nick[:|,|&amp;gt;|.] ]s/pattern/replace[/[g]]&amp;lt;br /&amp;gt;--&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Epart|~part]] (bot leaves channel)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist|~list]] (lists available commands)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elist-auth|~list-auth]] (lists available commands requiring NickServ account authorization)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine|~define]] term&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-add|~define-add]] term, meaning&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Edefine-delete|~define-delete]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eisup|~isup]] host[:port] (checks connection, returns http status if found)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate|~translate]] tolang text (auto-detects source lang, eg: ~translate en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etranslate-sl|~translate-sl]] fromlang tolang text (eg: ~translate-sl es en prueba)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Equeue|~queue]] (returns number of SN submissions in the queue)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elock|~lock]] alias (treats all lines entered as being prefixed with alias, channel-specific)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Eunlock|~unlock]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ecount|~count]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efirst|~first]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Elast|~last]] &amp;amp;lt;nick&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-first|~find-first]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Efind-last|~find-last]] &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Etitle|~count]] on|off|&amp;amp;lt;url&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Commands requiring NickServ account authorization==&lt;br /&gt;
&lt;br /&gt;
A whois command is issued to verify the account name of a user identified with NickServ for authentication purposes.&lt;br /&gt;
&lt;br /&gt;
===Commands that anyone identified with NickServ can use===&lt;br /&gt;
&lt;br /&gt;
* ~suggest &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-api &amp;amp;lt;text&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~suggest-exec &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands limited to specific NickServ accounts===&lt;br /&gt;
&lt;br /&gt;
* ~wiki login&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki title[|section] (gets [section] content)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section|text&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki edit title|section| (deletes section)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~wiki logout&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~say text (say as exec with no amendments)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; &amp;amp;lt;data&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~bucket &amp;amp;lt;index&amp;amp;gt; unset&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administration commands==&lt;br /&gt;
&lt;br /&gt;
These internal bot commands are restricted to accounts in a hardcoded admin account list.&lt;br /&gt;
&lt;br /&gt;
* ~q (bot quits, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~restart (bot process restarts, all child processes including SedBot2 are terminated)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~rehash (reloads exec configuration file)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~ps (list process id and command for all currently running child processes)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~kill &amp;lt;pid&amp;gt; (kills child process)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~killall&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-override&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~dest-clear&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-dump (var_dumps bucket data to terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-save (saves bucket data to file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-load (loads bucket data from file)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-flush (clears all bucket data)&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~buckets-list (lists bucket indexes in terminal)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ~ignore&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~unignore&lt;br /&gt;
&lt;br /&gt;
==Operator commands==&lt;br /&gt;
&lt;br /&gt;
The operator's NickServ account is hardcoded.&lt;br /&gt;
Operator-only aliases are designated with @ in the exec line account list.&lt;br /&gt;
&lt;br /&gt;
* ~exec-add&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-del&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~exec-save&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~startup&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[IRC:exec_aliases#.7Ex|~x]] (live scripting)&lt;br /&gt;
&lt;br /&gt;
==Bot development==&lt;br /&gt;
&lt;br /&gt;
Developer(s): [[User:Crutchy|crutchy]]&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/crutchy-/exec-irc-bot&lt;br /&gt;
&lt;br /&gt;
Bot source files:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc.php&amp;lt;br /&amp;gt;&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/irc_lib.php&lt;br /&gt;
&lt;br /&gt;
Download above files, open a terminal and change to that directory, and run &amp;quot;php irc.php&amp;quot; to start the bot.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are also a few constants at the top of irc.php that you'll need to change before starting:&amp;lt;br /&amp;gt;&lt;br /&gt;
* NICK&amp;lt;br /&amp;gt;&lt;br /&gt;
* PASSWORD_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* BUCKETS_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* IGNORE_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_FILE&amp;lt;br /&amp;gt;&lt;br /&gt;
* INIT_CHAN_LIST&amp;lt;br /&amp;gt;&lt;br /&gt;
* EXEC_LOG_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_LOG_URL&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST_CONNECT&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_HOST&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC_PORT&amp;lt;br /&amp;gt;&lt;br /&gt;
* MEMORY_LIMIT&amp;lt;br /&amp;gt;&lt;br /&gt;
* OPERATOR_ACCOUNT&amp;lt;br /&amp;gt;&lt;br /&gt;
* DEBUG_CHAN&lt;br /&gt;
&lt;br /&gt;
Scripts may be stored anywhere that is accessible to the bot script for CLI execution. If stored in a different location, the script path must be included in the exec file line.&lt;br /&gt;
&lt;br /&gt;
Input to a script/program is via command line arguments only. Communication with a program through stdin is supported, but only using a similar syntax to IRC messages and currently stdin is used only to respond to bucket get messages (php scripts can use the lib.php get_bucket function).&lt;br /&gt;
&lt;br /&gt;
stdout of an executed script/program may be passed to an IRC channel or output to exec's stdout (terminal), depending on the value of ''auto-privmsg'' in the exec line. If ''auto-privmsg=0'', stdout from the script/program must begin with ''IRC_MSG '' or ''IRC_RAW '' for it to be sent to IRC.&lt;br /&gt;
If ''auto-privmsg=1'', all stdout from the script/program is assumed to be prefixed with ''IRC_MSG '' and is sent to IRC; this is generally required for programs that can't be easily edited, such as shell binaries (''cowsay'', ''fortune'', etc).&lt;br /&gt;
&lt;br /&gt;
Programs executed may be anything accessible from the CLI of the machine running the exec script. They may be shell programs (such as ''cowsay'' and ''fortune''), php scripts (executed using the CLI ''php'' command) or scripts in any other language executable by their respective CLI interpreters (python, perl, haskell, etc).&lt;br /&gt;
&lt;br /&gt;
==Buckets==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Buckets&amp;quot; are a feature of exec that allow scripts to store data in a common location which is accessible from any script and is retained/persistent between script executions. Each bucket consists of an array element in the main bot program that is read, written and cleared using IRC-like commands (see below) passed through stdout/stdin pipes from/to executed scripts - buckets are filled by pipes hahaha :-P&lt;br /&gt;
&lt;br /&gt;
Complex data in array form may be stored using php's serialize/unserialize (or equivalent in other languages).&lt;br /&gt;
&lt;br /&gt;
Buckets are referenced by an index string. Index strings cannot contain spaces.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
:exec BUCKET_GET :index&lt;br /&gt;
:exec BUCKET_SET :index data&lt;br /&gt;
:exec BUCKET_UNSET :index&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP scripts, there are basic get_bucket, set_bucket and unset_bucket functions available, along with get_array_bucket, append_array_bucket, set_array_bucket, and bucket_list functions, which can be found here: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/lib_buckets.php&lt;br /&gt;
&lt;br /&gt;
==exec.txt==&lt;br /&gt;
&lt;br /&gt;
The '''exec.txt''' file resides in the same directory as the bot script (irc.php) file and links aliases (triggers typed in IRC) to scripts to be executed, and contains usage parameters and restrictions.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/exec.txt&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias|timeout|repeat|auto-privmsg|empty-trailing-allowed|account-list|cmd-list|dest-list|reserved|shell-cmd&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
'''alias''' is the trigger typed in IRC at the start of a message that will trigger a script to be executed.&lt;br /&gt;
* All aliases should start with a common trigger character (such as ~) but can be any lowercase string without spaces.&lt;br /&gt;
* Aliases must be unique, but multiple scripts may be executed per alias by separating shell commands with '''&amp;amp;&amp;amp;'''.&lt;br /&gt;
* The aliases '''*''', '''&amp;lt;init&amp;gt;''', '''&amp;lt;startup&amp;gt;''', '''&amp;lt;quit&amp;gt;''' and '''&amp;lt;log&amp;gt;''' are reserved and have special meanings to the bot.&lt;br /&gt;
* The '''*''' reserved alias occurs on every IRC message received. The '''exec''' bot in Soylent IRC uses a single script for this alias. '''cmd.php''' is executed on every line and contains a switch statement to dispatch internal trigger messages on various IRC events (such as numerics, PRIVMSG, NOTICE, JOIN, PART, NICK, etc). The bot then parses these internal messages to further trigger other scripts.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;init&amp;gt;&amp;gt;''' reserved alias is triggered on bot startup before the IRC connection is made. It is useful for initializing data buckets for particular scripts. Buckets and internal trigger messages may be called at this point, but IRC functionality is not yet available.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;startup&amp;gt;&amp;gt;''' reserved alias is triggered immediately after the bot sends an identify message to NickServ, but is not yet identified. It is useful for running scripts that require an IRC connection.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;quit&amp;gt;&amp;gt;''' reserved alias is triggered on bot shutdown and restart. IRC functionality is still available to this alias script. It is useful for saving data buckets to file so that data can persist when the bot is restarted.&lt;br /&gt;
* The '''&amp;lt;&amp;lt;log&amp;gt;&amp;gt;''' reserved alias is triggered on every IRC message received (similar to *) but is executed immediately after the message is received (before other script triggers are processed) so is more stable for logging purposes due to a lower probability of messages being out of order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''timeout''' is the number of seconds a script is allowed to run for before being terminated by the bot.&lt;br /&gt;
* If a script times out a message is sent to the destination from which the alias was triggered to inform the user.&lt;br /&gt;
* It is always a good idea to set a timeout to prevent infinite loops in scripts from chewing up bot host resources.&lt;br /&gt;
* A timeout of 5 seconds is typical except for http-enabled scripts which sometimes require more time to complete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A non-zero '''repeat''' is the number of seconds between each automated alias trigger.&lt;br /&gt;
* Aliases with repeats may still be triggered manually.&lt;br /&gt;
* The first trigger will occur after the repeat has elapsed on startup (repeat triggers don't trigger immediately on startup).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''auto-privmsg''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will automatically privmsg every line of text output to a script's stdout or stderr so must be used with caution.&lt;br /&gt;
* This is useful for running programs that aren't scripted, such as compiled binaries that can't be changed (apt-get, fortune, etc).&lt;br /&gt;
* A value of 0 won't privmsg stdout/stderr and is required if a script needs to triggger other commands, send customized messages to IRC or use buckets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''empty-trailing-allowed''' may be 0 or 1.&lt;br /&gt;
* A value of 1 will allow an alias to trigger if there is no text following the alias.&lt;br /&gt;
* A value of 0 will require more text after the alias.&lt;br /&gt;
* If an alias requires more text and a user enters only the alias itself with no other text, a privmsg is sent to inform the user.&lt;br /&gt;
* If there is a chance that an alias may be entered without further text without intending to trigger the bot, this should be set to 0 and if need be handled silently within the triggered script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''account-list''' is a comma-delimited list of NickServ account names permitted to trigger the alias.&lt;br /&gt;
* If a user attempts to trigger an account-restricted alias and their account isn't listed or they aren't identified with NickServ, a message is output to the terminal but not to IRC.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
* A value of &amp;quot;*&amp;quot; will allow any NickServ-registered user to trigger alias.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''cmd-list''' is a comma-delimited list of commands that the alias may be triggered on, including IRC commands (PRIVMSG, NOTICE, NICK, etc) but also internal and bucket commands intercepted by the bot (INTERNAL, BUCKET_GET, etc).&lt;br /&gt;
* Attempts to trigger a cmd-restricted alias on an unspecified cmd fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dest-list''' is a comma-delimited list of destinations that the alias may be triggered from, including channel names and nicks.&lt;br /&gt;
* Attempts to trigger a dest-restricted alias from an unspecified destination fail silently.&lt;br /&gt;
* An empty list is unrestricted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''reserved''' is an unused parameter reserved for future use, and may be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shell-cmd''' is the cli command executed in a separate process by the bot when the assocated alias is triggered and all requirements are met.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* %%trailing%% excludes alias&lt;br /&gt;
* aliases here must be all lower case letters&lt;br /&gt;
* cmd list and dest list is not case sensitive, but conventionally use uppercase for cmd&lt;br /&gt;
* account, cmd and dest lists are all comma-separated&lt;br /&gt;
* set cmd list to PRIVMSG to enable alias to only be called by PRIVMSG cmd (NOTICE etc won't trigger)&lt;br /&gt;
* set dest list to #soylent to restrict triggering of alias to the #soylent channel (can also use a nick to restrict to PM)&lt;br /&gt;
&lt;br /&gt;
===Available exec templates===&lt;br /&gt;
&lt;br /&gt;
*%%trailing%% = &amp;lt;i&amp;gt;the message string visible in an IRC client&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%dest%% = &amp;lt;i&amp;gt;the channel/pm nick where the message originated&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%nick%% = &amp;lt;i&amp;gt;the nickname of the sender&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%start%% = &amp;lt;i&amp;gt;microtime(True) result when bot was started&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%alias%% = &amp;lt;i&amp;gt;the command alias that triggered the script&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%cmd%% = &amp;lt;i&amp;gt;the IRC command (PRIVMSG,NOTICE,QUIT,PART,NICK,JOIN,numeric,etc)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%data%% = &amp;lt;i&amp;gt;the entire IRC line (refer below)&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%exec%% = &amp;lt;i&amp;gt;the exec line for the trigger alias&amp;lt;/i&amp;gt;&lt;br /&gt;
*%%params%% = &amp;lt;i&amp;gt;the params part of the IRC line (refer below; usually same as %%dest%% except when %%cmd%% is a numeric)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRC line syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Script development==&lt;br /&gt;
&lt;br /&gt;
===PHP script template===&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/test/blob/master/script_template.php&lt;br /&gt;
&lt;br /&gt;
If anyone is interested in adding their own script, talk to crutchy (usually hangs out in #soylent and #test) who will be happy to help as best he can.&lt;br /&gt;
&lt;br /&gt;
===Internal commands===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IRC commands===&lt;br /&gt;
&lt;br /&gt;
IRC commands maybe manually constructed by echoing a string to stdout using the &amp;quot;:&amp;lt;prefix&amp;gt; &amp;lt;command&amp;gt; &amp;lt;params&amp;gt; :&amp;lt;trailing&amp;gt;&amp;quot; syntax, but there is also a selection of shortcuts available to make scripting easier. The following commands may be called using a &amp;quot;/command &amp;lt;trailing&amp;gt;&amp;quot; syntax.&lt;br /&gt;
&lt;br /&gt;
==Usage in IRC==&lt;br /&gt;
&lt;br /&gt;
To invoke a script in IRC client:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;alias [trailing]&amp;lt;/source&amp;gt;&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dot&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;crutchy&amp;gt; ~define atlantic ocean&lt;br /&gt;
  &amp;lt;exec&amp;gt; 1 | noun | the 2nd largest ocean; separates North and South America on the west from Europe and Africa on the east\n2 | adjective | relating to or bordering the Atlantic Ocean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In the above example, &amp;quot;~define&amp;quot; is the alias, &amp;quot;atlantic ocean&amp;quot; is passed to the script as %%trailing%% and can be accessed in PHP scripts using the $argv global array variable.&lt;br /&gt;
&lt;br /&gt;
[[Feeds]]&lt;br /&gt;
[[Feed sources]]&lt;br /&gt;
&lt;br /&gt;
==IRCiv==&lt;br /&gt;
&lt;br /&gt;
See [[IRCiv]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC voting system==&lt;br /&gt;
&lt;br /&gt;
http://sylnt.us/vote&lt;br /&gt;
&lt;br /&gt;
===Objectives===&lt;br /&gt;
* simple to use&lt;br /&gt;
* simple to access&lt;br /&gt;
* simple to get help&lt;br /&gt;
* secure as practicable&lt;br /&gt;
* difficult to vote more than once&lt;br /&gt;
* secret ballot&lt;br /&gt;
&lt;br /&gt;
===Features/usage/limitations===&lt;br /&gt;
* user can get help on voting using ~vote, ~vote help or ~vote ?&lt;br /&gt;
* user must be identified with NickServ to use voting system&lt;br /&gt;
* user can get list of available polls using ~vote list|l&lt;br /&gt;
* user can register a new poll using ~vote &amp;lt;poll_id&amp;gt; register [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* &amp;lt;poll_id&amp;gt; can only contain alphanumeric characters or _-.&lt;br /&gt;
* poll founder can unregister a poll using ~vote &amp;lt;poll_id&amp;gt; unregister (this will delete all data for &amp;lt;poll_id&amp;gt;)&lt;br /&gt;
* poll founder is automatically added to list of admins for poll&lt;br /&gt;
* poll founder can add a poll admin using ~vote &amp;lt;poll_id&amp;gt; add-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll founder can delete a poll admin using ~vote &amp;lt;poll_id&amp;gt; del-admin &amp;lt;admin_nickserv_account&amp;gt;&lt;br /&gt;
* poll can be opened for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; open&lt;br /&gt;
* poll can be closed for voting by poll admin using ~vote &amp;lt;poll_id&amp;gt; close&lt;br /&gt;
* poll admin can add a poll option using ~vote &amp;lt;poll_id&amp;gt; add-option &amp;lt;poll_option&amp;gt; [&amp;lt;description&amp;gt;] - description is optional and may contain spaces&lt;br /&gt;
* poll admin can delete a poll option using ~vote &amp;lt;poll_id&amp;gt; del-option &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes using ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user votes secretly using /msg exec ~vote &amp;lt;poll_id&amp;gt; &amp;lt;poll_option&amp;gt;&lt;br /&gt;
* user may vote any number of times, but only one vote is registered per NickServ account (to prevent ballot stuffing)&lt;br /&gt;
* poll admin can output a breakdown of votes with ~vote &amp;lt;poll_id&amp;gt; breakdown&lt;br /&gt;
* anyone identified with NickServ can output the current poll result using ~vote &amp;lt;poll_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting assistant==&lt;br /&gt;
&lt;br /&gt;
This feature is currently under development.&lt;br /&gt;
&lt;br /&gt;
https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/meeting.php&lt;br /&gt;
&lt;br /&gt;
Proof-of-concept script for development of a tool to assist Soylent PBC Board Meeting conduct, and also possibly to assist team meetings.&lt;br /&gt;
&lt;br /&gt;
Intended to automate minute-taking and posting of minutes on the wiki.&lt;br /&gt;
Meeting minutes will be posted automatically on the wiki on meeting close, with formatted sections for:&lt;br /&gt;
* basic details such as start time, finish time, chair(s), etc&lt;br /&gt;
* attendees with any notes regarding voiced/non-voiced nicks, speakers, authorized voters, admins, and anyone that joined/left partway through the meeting, etc&lt;br /&gt;
* formatted IRC script&lt;br /&gt;
* table of motions with vote counts, carried status, oppositions, who raised and who seconded etc&lt;br /&gt;
* other data may be added as the feature is evolved&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~meeting open&lt;br /&gt;
~meeting close&lt;br /&gt;
~meeting chair &amp;lt;nick&amp;gt;&lt;br /&gt;
~meeting motion &amp;lt;description&amp;gt;&lt;br /&gt;
aye|nay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There can only be one meeting per channel.&lt;br /&gt;
Any number of meetings (in different channels) can occcur simultaneously.&lt;br /&gt;
&lt;br /&gt;
The bot stores a list of meeting data bucket indexes in the &amp;lt;&amp;lt;MEETING_LIST&amp;gt;&amp;gt; bucket.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets have indexes named &amp;lt;&amp;lt;MEETING_DATA $dest&amp;gt;&amp;gt; where $dest is the channel name.&lt;br /&gt;
&lt;br /&gt;
Meeting data buckets are arrays, each containing the following elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
channel = name of channel where meeting is being conducted&lt;br /&gt;
chairs = array containing chair data&lt;br /&gt;
finish = meeting close timestamp&lt;br /&gt;
messages = array of privmsg data&lt;br /&gt;
events = array of event data (quits/joins/kicks/nicks/etc)&lt;br /&gt;
initial nicks = list of nicks at meeting open&lt;br /&gt;
initial nicks complete = boolean&lt;br /&gt;
final nicks = list of nicks at meeting close&lt;br /&gt;
final nicks complete = boolean&lt;br /&gt;
quorum = boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each chair data element contains an array with the following elements. A new chair array is added whenever the chair position is handed over.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nick = NickServ account name of chair&lt;br /&gt;
start = timestamp that chair commenced&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==execfs==&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Source code available here:&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs.php&lt;br /&gt;
* https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/execfs_lib.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* make an import/export command to bring in data subtrees in text line format with tab prefixes for levels&lt;br /&gt;
* flexible permissions system that allows/denies based on alias, nick, account, alias permissions, creator, etc&lt;br /&gt;
* permissions system should have easy way to jail a script from being able to access any bucket/directory except down from a certain path&lt;br /&gt;
* develop feature to synchronize data between instances of exec that are authorized&lt;br /&gt;
&lt;br /&gt;
==Soylent IRCd==&lt;br /&gt;
&lt;br /&gt;
Currently under development. Source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/ircd.php&lt;br /&gt;
&lt;br /&gt;
Will be very simple. Likely won't implement all ircd functionality, but may implement some non-standard Soylent-specific features.&lt;br /&gt;
&lt;br /&gt;
==Remote listener==&lt;br /&gt;
&lt;br /&gt;
A basic remote listener has been developed, with source code available here: https://github.com/crutchy-/exec-irc-bot/blob/master/website/listen.php&lt;br /&gt;
&lt;br /&gt;
Ideas for future development:&lt;br /&gt;
* provide easy access to buckets from scripts running outside of exec (such as apache php scripts that serve web content)&lt;br /&gt;
* provide api from remote sources (on a designated port) to control the bot similarly as from irc&lt;br /&gt;
* provide interface by which remote scripts (such as apache web scripts) can interact with scripts run by exec&lt;br /&gt;
&lt;br /&gt;
==Distributed web service==&lt;br /&gt;
&lt;br /&gt;
This is just a pipe dream at the moment, with some ideas jotted down for future development.&lt;br /&gt;
&lt;br /&gt;
* templating system based on execfs. html is built from separate hierarchical data structures containing templates and content&lt;br /&gt;
* templates and content are maintained from IRC, though would be nice to develop clients and web interfaces for viewing and editing&lt;br /&gt;
* content and templates stored in separate execfs directories&lt;br /&gt;
* template directory to be protected using permissions&lt;br /&gt;
* any client can edit content (if permitted)&lt;br /&gt;
* develop a script to generate html from template and content execfs directories, or use an apache php script to construct web content on the fly&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
[[Category:IRC:exec]]&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ZNC&amp;diff=9063</id>
		<title>ZNC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ZNC&amp;diff=9063"/>
		<updated>2015-06-23T06:08:15Z</updated>

		<summary type="html">&lt;p&gt;Crutchy: Undo revision 9062 by Exec (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SoylentNews runs its own IRC bouncer (ZNC) for staff use.&lt;br /&gt;
&lt;br /&gt;
== What is an IRC bouncer? ==&lt;br /&gt;
&amp;lt;p&amp;gt;An IRC bouncer is benign. It acts as your proxy to IRC servers of your choice, a concierge if you will. While you are away, the bouncer stays connected to all your IRC networks and channels as your representative then (optionally) tells you everything that went on while you were away.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Rather than your connection to an IRC server being client &amp;gt;&amp;gt; IRC server(s) it becomes client &amp;gt;&amp;gt; Bouncer &amp;gt;&amp;gt; IRC server(s). The nice thing is the bouncer never sleeps so Bouncer &amp;gt;&amp;gt; IRC server(s) is always maintained, the client can come and go at will. When you reconnect your IRC client to the Bouncer you can (optionally) get scrollback for all the channels you were in prior to your client disconnection.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is ZNC? ==&lt;br /&gt;
ZNC is a popular IRC bouncer. See [http://wiki.znc.in/ZNC ZNC] Along with [http://www.psybnc.at/ psyBNC] these two are the most commonly used IRC Bouncers. psyBNC seems unmaintained right now unfortunately.&lt;br /&gt;
&lt;br /&gt;
== Setting up ZNC - for Staff ==&lt;br /&gt;
&amp;lt;p&amp;gt;Assumptions at this point are that you have a SoylentNews IRC nick, have it registered with nickserv, have an irc client (rather than using the web interface) and are SN staff.. so let's get on with the nuts and bolts... &amp;lt;/p&amp;gt;&lt;br /&gt;
* An IRC Admin will notify you of your ZNC username and initial password.&lt;br /&gt;
* Go to [https://irc.soylentnews.org:60000/ SN ZNC Web Interface] with a web browser and login with your shiny new ZNC credentials.&lt;br /&gt;
* Go to Your Settings in the right hand menu and change your password in the subsequent screen by populating the Password and Confirm password fields, scroll all the way down and hit Save.&lt;br /&gt;
* Probably want to go ahead and Logout &amp;amp; log back in with your new password at this point.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
* Return to Your Settings and populate the IRC Information section (same kind of info you'd use in an IRC client).&lt;br /&gt;
* Scroll down to the Modules section - as a minimum you probably want chansaver and ctcpflood checked, you may want to check some of the others n.b. the name of each module is clickable to bring up a ZNC wiki page on what they each do.&lt;br /&gt;
* Further down the page still, in Flags - you probably want to check Prepend Timestamps - this prepends played back messages with their time/date on client reconnection after a time away.&lt;br /&gt;
* Nearly done - ZNC Behaviour section - probably want to set a Timezone there so replayed messages carry your localised time rather than UTC. You can also have some fun with CTCP replies. e.g.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;CLIENTINFO No&lt;br /&gt;
FINGER Kinky&lt;br /&gt;
PING No&lt;br /&gt;
TIME No&lt;br /&gt;
USERINFO No&lt;br /&gt;
VERSION No&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Finally...  hit Save :)&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
THIS ARTICLE NEEDS A LOT OF WORK STILL! :D&lt;/div&gt;</summary>
		<author><name>Crutchy</name></author>
	</entry>
</feed>