<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://otfbot.org/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://otfbot.org/feed.php">
        <title>OTFBot - The friendly Bot</title>
        <description></description>
        <link>https://otfbot.org/</link>
        <image rdf:resource="https://otfbot.org/lib/tpl/simple/images/favicon.ico" />
       <dc:date>2026-04-03T23:55:30+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://otfbot.org/bugs?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/callbacks?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/dev?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/docs?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/download?rev=1400486033&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/non-blocking?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/start?rev=1623091480&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/synced-join?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/tests?rev=1358456981&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/topbar?rev=1470676998&amp;do=diff"/>
                <rdf:li rdf:resource="https://otfbot.org/unicode?rev=1358456981&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://otfbot.org/lib/tpl/simple/images/favicon.ico">
        <title>OTFBot - The friendly Bot</title>
        <link>https://otfbot.org/</link>
        <url>https://otfbot.org/lib/tpl/simple/images/favicon.ico</url>
    </image>
    <item rdf:about="https://otfbot.org/bugs?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>bugs</title>
        <link>https://otfbot.org/bugs?rev=1358456981&amp;do=diff</link>
        <description>Bug Tracker

Our bug tracker is located at &lt;http://www.otfbot.org/bugs/&gt;</description>
    </item>
    <item rdf:about="https://otfbot.org/callbacks?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>callbacks</title>
        <link>https://otfbot.org/callbacks?rev=1358456981&amp;do=diff</link>
        <description>Callbacks

twisted invoces callbacks just by invocing the function of the class implementing the Protocol (i.e. IRCClient). we need to run a lot of plugins, so our structure is a bit more complicated.

we implement the twisted-callbacks, and run _apirunner(</description>
    </item>
    <item rdf:about="https://otfbot.org/dev?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dev</title>
        <link>https://otfbot.org/dev?rev=1358456981&amp;do=diff</link>
        <description>Development Documentation

For API-Documentation See API Documentation

Tech

we try to use consequently:

	*  unicode
	*  non-blocking I/O

please read about the why and how.

some interesting topics explained

	*  callbacks
	*  synced-join

How to create a (ircClient) plugin?

Have a look at our example plugin to see which callbacks exist. you can react on each of those as you like using python code.</description>
    </item>
    <item rdf:about="https://otfbot.org/docs?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>docs</title>
        <link>https://otfbot.org/docs?rev=1358456981&amp;do=diff</link>
        <description>Documentation

	*  FAQ
	*  plugins
	*   Generated code documentatio
	*  quick-start</description>
    </item>
    <item rdf:about="https://otfbot.org/download?rev=1400486033&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-05-19T07:53:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>download</title>
        <link>https://otfbot.org/download?rev=1400486033&amp;do=diff</link>
        <description>Download

Development Versions

Use Git to get the most current version of the bot.

Grab your copy with the following command:

git clone https://github.com/otfbot/otfbot.git

PyPi

you need setuptools and maybe essential development tools, depending on how many requiered python modules are already installed on your system.
on debian:</description>
    </item>
    <item rdf:about="https://otfbot.org/non-blocking?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>non-blocking</title>
        <link>https://otfbot.org/non-blocking?rev=1358456981&amp;do=diff</link>
        <description>Non-Blocking I/O

Some Input-Output blocks the program until its finished. this is a problem in the IRC-Bot, because everything needs to wait until the operation is finished. Despite from blocking the bot from interacting with the user, even the network connection can get a timeout, because the bot cannot answer PING requests from the server.</description>
    </item>
    <item rdf:about="https://otfbot.org/start?rev=1623091480&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-06-07T18:44:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>start</title>
        <link>https://otfbot.org/start?rev=1623091480&amp;do=diff</link>
        <description>OTFBot

OtfBot is a modular IRC bot. It has modules to respond to !commands, answer to keywords, post RDF headlines in the channel, kick users because of bad words, interact with the user with an A.I. (megahal, others), display 8-ball quotes, and much more. New plugins can be created in minutes.</description>
    </item>
    <item rdf:about="https://otfbot.org/synced-join?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>synced-join</title>
        <link>https://otfbot.org/synced-join?rev=1358456981&amp;do=diff</link>
        <description>If a IRC-User joins a channel, this happens:

	*  JOIN channel
	*  server acknowledges the JOIN
	*  ???
	*  WHO channel
	*  ???
	*  list of people in the channel, ENDOFWHO

if a plugin would react on .joined(channel), it cannot use the userlist, because the userlist is only filled after ENDOFWHO. even worse, events like userQuit, userLeft, etc. cannot update the userlist until ENDOFWHO. so after ENDOFWHO the userlist may be even too long without synchronisation.</description>
    </item>
    <item rdf:about="https://otfbot.org/tests?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tests</title>
        <link>https://otfbot.org/tests?rev=1358456981&amp;do=diff</link>
        <description>Tested Plugins

Here should be documented which plugins where (successfully) tested and what was tested / what was not tested (if appliable)

ircClient

&lt;sortable 1&gt;
 Plugin  Date  git commit tested  what was tested  what was not tested  commands  2010/08/28</description>
    </item>
    <item rdf:about="https://otfbot.org/topbar?rev=1470676998&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-08-08T17:23:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>topbar</title>
        <link>https://otfbot.org/topbar?rev=1470676998&amp;do=diff</link>
        <description>*  Home
	*  Download
	*  Documentation
		*  Plugins
		*  Jabber
		*  FAQ
		*  Git apidocs

	*  Development
		*  Tests 
		*  unicode
		*  Non-blocking IO
		*  git

	*  Bugs</description>
    </item>
    <item rdf:about="https://otfbot.org/unicode?rev=1358456981&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-17T21:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>unicode</title>
        <link>https://otfbot.org/unicode?rev=1358456981&amp;do=diff</link>
        <description>Unicode

Internally everything SHOULD be unicode-objects.
The big advantage of an unicode object is, that it knows its encoding, and can be converted to any wanted encoding) a str-instance does not know what its chars represent.

the relevant Callbacks (mostly msg, query, command, noticed) get the input string as unicode object, and they SHOULD use sendmsg and sendme with unicode messages.</description>
    </item>
</rdf:RDF>
