From da84e6fd330de8a3276d8aabce36b5220d155f00 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Wed, 26 Jan 2011 00:25:04 +0000 Subject: [PATCH] documentation: added doc folder, moved README to it, and copied Candide wiki page as PBot.html with some minor edits --- PBot/VERSION.pm | 2 +- doc/PBot.html | 1259 +++++++++++++++++++++++++++++++++++++++++++++++ doc/README | 59 +++ 3 files changed, 1319 insertions(+), 1 deletion(-) create mode 100755 doc/PBot.html create mode 100644 doc/README diff --git a/PBot/VERSION.pm b/PBot/VERSION.pm index d56e3dd7..5a9886fe 100644 --- a/PBot/VERSION.pm +++ b/PBot/VERSION.pm @@ -13,7 +13,7 @@ use warnings; # These are set automatically by the build/commit script use constant { BUILD_NAME => "PBot", - BUILD_REVISION => 254, + BUILD_REVISION => 255, BUILD_DATE => "2011-01-25", }; diff --git a/doc/PBot.html b/doc/PBot.html new file mode 100755 index 00000000..de20c1d0 --- /dev/null +++ b/doc/PBot.html @@ -0,0 +1,1259 @@ + + + + + + + + + PBot - C + + + + + + + + + + + + + + + + + +
+
+
+ +

PBot

+
+

From C

+
+ +

Contents

+ + + +
+

[edit] PBot

+

[edit] About PBot

+

PBot is an IRC bot written in Perl in _pragma's spare time. +

All of PBot's commands may begin with its name or !, or be followed by its name. +

Note that commands need not be submitted to the channel; you can /msg its instead. If you /msg PBot, she will respond with a private message in return. Also, you do not need to specify its name or one of the trigger symbols. +

+

[edit] Source

+

PBot's source may be found at http://code.google.com/p/pbot2-pl/. It can be browsed at http://code.google.com/p/pbot2-pl/source/browse/#svn/trunk/PBot.
+The URL for the source of any loaded modules may be found by using the 'info' command: +

+
 <pragma_> info faq
+ <PBot> faq: Module loaded by pragma_ on Fri Dec 31 02:34:04 2004 -> 
+           http://code.google.com/p/pbot2-pl/source/browse/trunk/modules/cfaq.pl, used 512 times (last by ecrane)
+
+

[edit] Directing output to a user

+

You may have PBot send the output of a command to a specific person via a /msg (opposed to in the channel), by using the +'tell <nick> about <command>' syntax: +

+
 <pragma_> !tell prec about man fork
+ <pragma_> PBot, tell Major-Willard about faq fflush
+
+

You may also direct PBot to prepend the nickname of a specific +person to a factoid in the channel by stating the nickname after the +factoid: +

+
 <pragma_> !help defrost
+ <PBot> defrost: To learn all about me, see http://www.iso-9899.info/wiki/PBot
+
+

[edit] Factoids

+

[edit] List of factoids

+

The most recent exported list of factoids can be found itse: +http://blackshell.com/~msmud/PBot/factoids.html. +

+

[edit] Adding a factoid

+

Titse are two ways to add a factoid. The first is: +

+
  !<factoid> is <description>
+
+

In this case, the factoid will be created as belonging to +the channel in which the command was executed. If +this is done via private message, then the factoid will belong to the +special .* channel, which stands for all channels or global channels. +

+

[edit] factadd

+

The second method allows you to add a factoid to any channel. This +method is suitable to add to a specific channel from a private message: +

+
  !factadd <channel> <keyword> is <description>
+
+

In this method, you may add factoids to any channel, including the special .* channel, which stands for all channels. +

Examples: +

+
  example a: !keyword is Information about factoid
+  example b: !factadd ##c c is /say C rocks!
+  example c (in channel ##c): !c is /say C rocks!
+
+

[edit] global channel

+

Factoids may be added to a special channel named .*. Factoids that +are set in this channel will be accessible to any channel, including +private messages. However, factoids that are set in a specific channel +will override factoids of the same name that are set in the .* channel +or otits channels. +

For example, a factoid named 'malloc' set in ##c will be called +instead of 'malloc' set in .*, +if the factoid were triggered in ##c; otitswise, the latter 'malloc' +will be triggered if the factoid were triggered in anotits channel. +

Likewise, if titse is a 'malloc' factoid set in ##c++ and the factoid is triggered in the ##c++ channel, +then this version of 'malloc' will be called instead of the ##c or the .* factoid. +

+

[edit] Special commands

+
[edit] /say
+

If a factoid begins with "/say " then PBot will not use +the "<factoid> is <description>" format when displaying the +factoid. Also, the "$nick" special variable will expand to +the nick of the caller. +

+
 Example:
+   <pragma_> !hi is /say Well, hello titse, $nick.
+   <PBot> 'hi' added.
+   <prec> PBot, hi
+   <PBot> Well, hello titse, prec.
+
+
[edit] /me
+

If a factoid begins with "/me " then PBot will ACTION the factoid. +

+
 Example:
+   <pragma_> !bounce is /me bounces around.
+   <PBot> 'bounce' added.
+   <pragma_> !bounce
+   *PBot bounces around.
+
+
[edit] /call
+

If a factoid begins with "/call " then PBot will call an existing command. +

+
 Example:
+   <pragma_> !boing is /call bounce
+   <PBot> 'boing' added.
+   <pragma_> !boing
+   *PBot bounces around.
+
+
[edit] /msg
+

If a factoid begins with "/msg <nick> " then PBot will /MSG the factoid +text to <nick> +

+

[edit] Special variables

+

Currently titse are two special variables: +

+
[edit] $nick
+
 $nick:  expands to the nick of the caller
+
+
[edit] $args
+
 $args:  expands to any text following the keyword
+
+

[edit] adlib list variables

+

You may create a list of adlib words by using the normal factoid creation method. +Also note that multiple words can be surrounded with double quotes to constitute one element. +

+
 Example:
+   <pragma_> !colors is red green blue "bright yellow" pink "dark purple" orange
+   <PBot> 'colors' added
+
+

Then you can instruct PBot to pick a random word from this list to use in anotits factoid by +inserting the list as a variable. +

+
 Example:
+   <pragma_> !sky is /say The sky is $colors.
+   <PBot> 'sky' added.
+   <pragma_> !sky
+   <PBot> The sky is dark purple.
+   <pragma_> !sky
+   <PBot> The sky is green.
+
+

A practical example, creating the RTFM trigger: +

+
 <pragma_> !sizes is big large tiny small huge gigantic teeny
+ <PBot> 'sizes' added.
+ <pragma_> !attacks is whaps thwacks bashes smacks punts whacks
+ <PBot> 'attacks' added.
+ <pragma_> !rtfm is /me $attacks $args with a $sizes $colors manual.
+ <PBot> 'rtfm' added.
+ <pragma_> !rtfm mauke
+ * PBot thwacks mauke with a big red manual.
+
+

[edit] Deleting a factoid

+

[edit] factrem

+

[edit] forget

+

To remove a factoid, use the factrem or forget command. The syntax is: +

+
 !factrem <channel> <keyword>
+ !forget <channel> <keyword>
+
+

[edit] Viewing/triggering a factoid

+

To view or trigger a factoid, one merely issues its keyword as a command. +

+
  <pragma_> PBot, c?
+  <PBot> C rocks!
+
+

[edit] Viewing/triggering anotits channel's factoid

+

[edit] fact

+

To view or trigger a factoid belonging to a specific channel, use the fact command: +

+
 !fact <channel> <keyword> [arguments]
+
+

[edit] Aliasing a factoid

+

[edit] factalias

+

To create an factoid that acts as an alias for a command, use the +'factalias' command or '!<alias> is /call <command>'. +

+
 !<newalias> is /call <command>
+
+

The syntax for 'factalias' is: +

+
 !factalias <channel> <new keyword> <command>
+
+
 Example:
+   <pragma_> !book is /me points accusingly at $args, "Witse is your book?!"
+   <PBot> 'book' added.
+   <pragma_> !book newbie
+   *PBot points accusingly at newbie, "Witse is your book?!"
+   <pragma_> !rafb is /call book
+   <PBot> 'rafb' added.
+   <pragma_> !rafb runtime
+   *PBot points accusingly at runtime, "Witse is your book?!"
+
+
 Anotits example:
+   <pragma_> !offtopic is /say In this channel, '$args' is off-topic.
+   <pragma_> !offtopic C++
+   <PBot> In this channel, 'C++' is off-topic.
+   <pragma_> !factalias ##c C++ offtopic C++ (or !C++ is /call offtopic C++)
+   <pragma_> !C++
+   <PBot> In this channel, 'C++' is off-topic.
+
+

[edit] Changing a factoid

+

[edit] factchange

+

To change a factoid, use the 'factchange' command: +

+
 Usage:  factchange <channel> <keyword> s/<pattern>/<change to>/
+ <pragma_> !factchange ##c c s/rocks/rules/ + <PBot> c changed. + <pragma_> !c + <PBot> C rules! +
+

Note that the 2nd argument is a Perl-style regex. See 'man perlre'. +

+
 For instance, it is possible to append to a factoid by using:
+      'factchange channel factoid s/$/text to append/'
+
+
 Likewise, you can prepend to a factoid by using:
+      'factchange channel factoid s/^/text to prepend/'
+
+

Alternatively, you may append to a factoid by using 'is also': +

+
  <pragma_> PBot, c is also See FAQ at http://www.eskimo.com/~scs/C-faq/top.html
+  <PBot> Changed: c is /say C rules! ; See FAQ at http://www.eskimo.com/~scs/C-faq/top.html
+
+

[edit] factset

+

To view or set factoid meta-data, such as owner, rate-limit, etc, use the 'factset' command. +

+
 Usage:  factset <channel> <factoid> [<key> [value]]
+
+

Omit <key> and <value> to list all the keys and values +for a factoid. Specify <key>, but omit <value> to see the +value for a specific key. +

+

[edit] factunset

+

To unset factoid meta-data, use the 'factunset' command. +

+

[edit] Finding a factoid

+

[edit] factfind

+

To search the database for a factoid, you may use the 'factfind' command. You may optionally +specify whetits to narrow by channel and/or include factoid owner and/or last referenced by in the search. +

If titse is only one match for the query, it will display that factoid, otitswise it will list all matches. +

+
Usage: factfind [-channel channel] [-owner nick] [-by nick] [text]
+Example:
+ <pragma_> PBot, factfind cast
+ <PBot> 3 factoids match: [##c] NULL casting dontcastmalloc
+
+

[edit] Information about a factoid

+

[edit] factinfo

+

To get information about a factoid, such as who submitted it and when, use the 'factinfo' command: +

+
 !factinfo <channel> <keyword>
+
+
 <pragma_> PBot, factinfo ##c NULL
+ <PBot> NULL: Factoid submitted by Major-Willard for all channels on Sat Jan 1 16:17:42 2005 
+           [5 years and 178 days ago], referenced 39 times (last by pragma_ on Sun Jun 27 04:40:32 2010 [5 seconds ago])
+
+

If the factoid has been submitted for the special .* channel, then it will be shown as 'submitted for all channels'. Otitswise, +it will be shown as 'submitted for #channel'. +

+

[edit] factshow

+

To see the factoid string literal, use the 'factshow' command: +

+
 !factshow <channel> <keyword>
+
+
 <pragma_> !factshow ##c hi
+ <PBot> hi: /say $greetings, $nick.
+
+

[edit] factset

+

To view factoid meta-data, such as owner, rate-limit, etc, use the 'factset' command. +

+
 Usage:  factset <channel> <factoid> [<key> [value]]
+
+

Omit <key> and <value> to list all the keys and values +for a factoid. Specify <key>, but omit <value> to see the +value for a specific key. +

+

[edit] count

+

To see how many factoids and what percentage of the database <nick> has submitted, use the 'count' command: +

+
 <pragma_> count prec
+ <PBot> prec has submitted 28 factoids out of 233 (12%)
+ <pragma_> count twkm
+ <PBot> twkm has submitted 74 factoids out of 233 (31%)
+ <pragma_> count pragma
+ <PBot> pragma has submitted 27 factoids out of 233 (11%)
+
+

[edit] histogram

+

To see a histogram of the top 10 factoid submitters, use the 'histogram' command: +

+
 <pragma_> !histogram
+ <PBot> 268 factoids, top 10 submitters: twkm: 74 (27%) Major-Willard:              
+           64 (23%) pragma_: 40 (14%) prec: 39 (14%) defrost: 14 (5%)  
+           PoppaVic: 10 (3%) infobahn: 7 (2%) orbitz: 3 (1%) mauke: 3 
+           (1%) Tom^: 2 (1%) 
+
+

[edit] top10

+

To see the top 10 most popular factoids, use the 'top10' command. +

+

[edit] Commands

+

To see all the currently available commands, use the list commands command. +

Some commands are: +

+

[edit] Quotegrabs

+

Note that quotegrabs are a new addition and are currently a +work-in-progress. Expect new features, and feel free to make +suggestions! +

+

[edit] Table of quotegrabs

+

A table of grabbed quotes can be found itse: http://blackshell.com/~msmud/PBot/quotegrabs.html +

+

[edit] grab

+

Grabs a message someone says, and adds it to the quotegrabs database. +

+
Usage: !grab <nick> [history] [channel] -- witse [history] is an optional argument that is an integral number of recent messages;
+       e.g., to grab the 3rd most recent message for nick, use !grab nick 3.
+
+

[edit] getq

+

Retrieves and displays a specific grabbed quote from the quotegrabs database. +

+
Usage: !getq <quote-id>
+
+

[edit] rq

+

Retrieves and displays a random grabbed quote from the quotegrabs database. You may filter by nick, channel and/or quote text. +

+
Usage: !rq [nick search regex] [channel search regex] [text search regex]
+
+

[edit] delq

+

Deletes a specific grabbed quote from the quotegrabs database. (Admins only.) +

+
Usage: delq <quote-id>
+
+


+

+

[edit] Modules

+

[edit] cc

+

Code compiler (and executor). This command will compile and execute +user-provided code in a number of languages, and then display the +compiler and/or program output. +

+
[edit] Usage
+
 Usage: !cc [compiler options] [-lang=<language>] <code> [-input=<stdin input>]
+        !cc <run|undo|show|paste|replace|prepend|append|remove|s/// [and ...]>
+
+
  • The -input=<stdin input> option provides STDIN input (i.e., scanf(), getc(stdin), etc.); MUST be the last option. +
  • The run, undo, show, replace, etc commands are part of interactive-editing. See below. +
+
[edit] Supported Languages
+

The -lang option accepts the following languages: C, C99 and C++. +You may also use the -std=<c89|gnu89|c99|gnu99|etc> compiler +option to specify which standard to follow. +

Support for additional languages coming soon. +

+
[edit] Default Language
+

The default language (e.g., without an explicit -lang or -std option) is C99 strict; which is gcc -Werror -std=c99 -strict. +

+
[edit] C and C++ Functionality
+

In C and C++, you may #include <file.h> one after anotits on +the same line. The bot will automatically put them on separate lines. +

Likewise, you can also #define macros; however, #defines require +an explicit "\n" sequence to terminate, otitswise the remainder of the +line will be part of the macro. +

Note that common typical includes such as stdio.h, stdlib.h, and string.h are already included by default. +

+
[edit] main() Function Unnecessary
+

In C and C++, if titse is no main function, then a main function will + created and wrapped around the appropriate bits of your code; anything +outside of any functions, excluding preprocessor stuff, will be put into + this new main function. Here's an example: +

+
 <pragma_> !cc int add(int a, int b) { return a + b; } printf("4 + 6 = %d -- ", add(4, 6)); int add3(int a, int b, int c) 
+           { return add(a, b) + c; } printf("7 + 8 + 9 = %d", add3(7, 8, 9));
+ <PBot> 4 + 6 = 10 -- 7 + 8 + 9 = 24
+
+

The previous code gets compiled as: +

+
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+ 
+int add(int a, int b) {
+    return a + b;
+}
+ 
+int add3(int a, int b, int c) {
+    return add(a, b) + c;
+}
+ 
+int main(int argc, char **argv) {
+    printf("4 + 6 = %d -- ", add(4, 6));
+    printf("7 + 8 + 9 = %d", add3(7, 8, 9));
+    return 0;
+}
+
+
[edit] Embedding Newlines
+

In Assembler, you may start a newline in the code via a \n sequence or a semi-colon. +

In C and C++, #defines must be terminated by a \n sequence. +

In all otits languages, you may embed a newline in the code by using |n. Yes, that's the pipe character followed by 'n'. +

+
[edit] Interactive Editing
+

The !cc command supports interactive-editing. The general syntax is:  !cc [command]. +

The commands are: run, show, paste, undo, prepend, append, remove, replace, and s//. With the exception of undo, which must be the first command, the rest of the commands may be chained togetits by separating them with whitespace or "and". +

The commands are described in more detail below: +

+
[edit] show
+

To show the latest code in the buffer, use the show command: +

+
 <pragma_> !cc show
+ <PBot> pragma_: printf("Hello, world!");
+
+

This command is stand-alone and cannot be chained with otits interactive-editing commands. +

+
[edit] paste
+

To paste the full source of the latest code in the buffer as the compiler sees it, use the paste command: +

+
 <pragma_> !cc paste
+ <PBot> pragma_: http://some.random.paste-site.com/paste/results
+
+

This command is stand-alone and cannot be chained with otits interactive-editing commands. +

+
[edit] run
+

To attempt to compile and execute the latest code in the buffer, use the run command: +

+
 <pragma_> !cc run
+ <PBot> pragma_: Hello, world!
+
+

This command is stand-alone and cannot be chained with otits interactive-editing commands. +

+
[edit] undo
+

To undo any changes, use undo. The undo command must be the first command before any subsequent commands. +

+
[edit] s//
+

To change the latest code in the buffer, use the s/regex/substitution/[gi] pattern. +

+
 <pragma_> !cc s/Hello/Good-bye/ and s/world/void/
+ <PBot> pragma_: Good-bye, void!
+ <pragma_> !cc show
+ <PBot> pragma_: printf("Good-bye, void!");
+
+
[edit] replace
+

Alternatively, you may use the replace command. The usage is: +

+
 !cc replace [all, first, second, ..., tenth, last] 'from' with 'to'
+
+
[edit] append
+

Text may be appended with the append command: +

+
 !cc append 'text'
+
+
[edit] prepend
+

Text may be prepended with the prepend command: +

+
 !cc prepend 'text'
+
+
[edit] remove
+

Text may be deleted with the remove command: +

+
 !cc remove [all, first, second, ..., tenth, last] 'text'
+
+
[edit] Some Examples
+
 Examples:
+
+
   < pragma_> !cc int fib2(int n, int p0, int p1) { return n == 1 ? p1 : fib2(n  - 1, p1, p0 + p1); } 
+               int fib(int n) { return n == 0 ? 0 : fib2(n, 0, 1); } for(int i = 0; i < 21; i++) printf("%d ", fib(i));
+   < PBot> pragma_: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
+
+
   < pragma_> !cc int i = 0, last = 1; while(i <= 7000) { printf("%d ", i); i += last; last = i - last; }
+    <PBot> pragma_: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
+
+
   <Icewing> !cc int n=0, f[2]={0,1}; while(n<20) printf("%d ",f[++n&1]=f[0]+f[1]); // based on cehteh
+   <PBot> Icewing: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
+
+
  <3monkeys> !cc @p=(0,1); until($#p>20) { print"$p[-2]\n"; push @p, $p[-2] + $p[-1] } -lang=Perl
+   <PBot> 3monkeys: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
+
+
   <spiewak> !cc -lang=Ruby p,c=0,1; 20.times{p p; c=p+p=c}
+   <PBot> spiewak: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
+
+
     <Jafet> !cc main = print $ take 20 $ let fibs = 0 : scanl (+) 1 fibs in fibs; -lang=Haskell
+   <PBot> Jafet: [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181]
+
+

[edit] cc2

+

This command is identical to the cc command, with the following exceptions: does not accept compiler options. +

Uses http://ideone.com. +

+
[edit] Usage
+
 Usage: !cc [-nowarn] [-showurl] [-lang=<language>] <code> [-input=<stdin input>]
+        !cc <run|undo|show|replace|add|remove [and ...]>
+
+
  • The -nowarn option is specific to the C programming language; +it removes the -Werror and -strict options, and changes -std to gnu89. +
  • The -showurl option reformats the final code with includes and + indentation, and displays the Ideone pasted URL. (Useful for viewing +the complete and compilable code.) +
  • The -input=<stdin input> option provides STDIN input (i.e., scanf(), getc(stdin), etc.); MUST be the last option. +
  • The run, undo, show, replace, add, etc commands are part of interactive-editing. See below. +
+
[edit] Supported Languages
+

The -lang option accepts the following languages: +

+
     Ada                            => Ada (gnat-4.3.2),
+     asm                            => Assembler (nasm-2.07),
+     Assembler                      => Assembler (nasm-2.07),
+     Bash                           => Bash (bash 4.0.35),
+     bc                             => bc (bc-1.06.95),
+     bf                             => Brainf**k (bff-1.0.3.1),
+     Brainfuck                      => Brainf**k (bff-1.0.3.1),
+     C                              => C (gcc-4.3.4),
+     C#                             => C# (gmcs 2.0.1),
+     C++                            => C++ (gcc-4.3.4),
+     C99                            => C99 strict (gcc-4.3.4),
+     CLIPS                          => CLIPS (clips 6.24),
+     clisp                          => Common Lisp (clisp) (clisp 2.47),
+     Clojure                        => Clojure (clojure 1.1.0),
+     COBOL                          => COBOL (open-cobol-1.0),
+     COBOL85                        => COBOL 85 (tinycobol-0.65.9),
+     D                              => D (dmd) (dmd-2.042),
+     Erlang                         => Erlang (erl-5.7.3),
+     Forth                          => Forth (gforth-0.7.0),
+     Fortran                        => Fortran (gfortran-4.3.4),
+     gawk                           => AWK (gawk) (gawk-3.1.6),
+     gnu89                          => C (gcc-4.3.4),
+     Go                             => Go (gc 2010-01-13),
+     Haskell                        => Haskell (ghc-6.8.2),
+     Icon                           => Icon (iconc 9.4.3),
+     Intercal                       => Intercal (c-intercal 28.0-r1),
+     Java                           => Java (sun-jdk-1.6.0.17),
+     JavaScript                     => JavaScript (rhino) (rhino-1.6.5),
+     JavaScript-rhino               => JavaScript (rhino) (rhino-1.6.5),
+     JavaScript-spidermonkey        => JavaScript (spidermonkey) (spidermonkey-1.7),
+     JS                             => JavaScript (rhino) (rhino-1.6.5),
+     JScript                        => JavaScript (rhino) (rhino-1.6.5),
+     Lua                            => Lua (luac 5.1.4),
+     mawk                           => AWK (mawk) (mawk-1.3.3),
+     nasm                           => Assembler (nasm-2.07),
+     Nemerle                        => Nemerle (ncc 0.9.3),
+     Nice                           => Nice (nicec 0.9.6),
+     Ocaml                          => Ocaml (ocamlopt 3.10.2),
+     Pascal                         => Pascal (fpc) (fpc 2.2.0),
+     Pascal-fpc                     => Pascal (fpc) (fpc 2.2.0),
+     Pascal-gpc                     => Pascal (gpc) (gpc 20070904),
+     Perl                           => Perl (perl 5.8.8),
+     PHP                            => PHP (php 5.2.11),
+     Pike                           => Pike (pike 7.6.86),
+     Prolog                         => Prolog (gnu) (gprolog-1.3.1),
+     Prolog-gnu                     => Prolog (gnu) (gprolog-1.3.1),
+     Prolog-swi                     => Prolog (swi) (swipl 5.6.64),
+     Python                         => Python (python 2.6.4),
+     Python3                        => Python3 (python-3.1.1),
+     R                              => R (R-2.9.2),
+     Ruby                           => Ruby (ruby 1.8.7),
+     Scala                          => Scala (Scalac 2.7.7),
+     Scheme                         => Scheme (guile) (guile 1.8.5),
+     Smalltalk                      => Smalltalk (gst 3.1),
+     Tcl                            => Tcl (tclsh 8.5.7),
+     Unlambda                       => Unlambda (unlambda-2.0.0),
+     VB                             => Visual Basic .NET (mono-2.4.2.3)
+
+
[edit] Default Language
+

The default language (e.g., without an explicit -lang or -std option) is C99 strict; which is gcc -Werror -std=c99 -strict. +

+

[edit] cc3

+

The cc3 command is identical to the cc2 command, with the exception of using an older version of GCC (4.1.2) through http://codepad.org. This version does not support the -input option, -nowarn option, or interactive-editing. +

It can compile and display the output for code from the following + languages: C (GNU89), C++, D, Haskell, Lua, OCaml, PHP, Perl, Python, +Ruby, Scheme and Tcl. Defaults to C (GNU89). +

+

[edit] faq

+

Displays questions from the comp.lang.c faq. + Some queries may return more than one result; if this happens, you may + use the 'match #' optional argument to specify the match you'd like to +view. +

+
 Usage: !faq [match #] <search regex>
+ Samples:
+   <pragma_> !faq cast malloc
+   <PBot> 2 results, displaying #1: 7. Memory Allocation, 7.6 Why am  
+             I getting ``warning: assignment of pointer from integer 
+             lacks a cast for calls to malloc? : 
+             http://www.eskimo.com/~scs/C-faq/q7.6.html
+   <pragma_> !faq 2 cast malloc
+   <PBot> 2 results, displaying #2: 7. Memory Allocation, 7.7 Why 
+             does some code carefully cast the values returned by 
+             malloc to the pointer type being allocated? :    
+             http://www.eskimo.com/~scs/C-faq/q7.7.html
+   <pragma_> !faq ^6.4
+   <PBot> 6. Arrays and Pointers, 6.4 Why are array and pointer 
+             declarations interchangeable as function formal 
+             parameters? : http://www.eskimo.com/~scs/C-faq/q6.4.html
+
+

[edit] cstd

+

Searches ISO/IEC 9899:TC3 (WG14/N1256), also known as the C99 draft standard. http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf +

+
 Usage: cstd [-list] [-n#] [section] [search regex]
+          If specified, 'section' must be in the form of X.YpZ witse X and Y are section/chapter and, optionally, pZ is paragraph. 
+          To display a specific section and all its paragraphs, specify just the 'section' without pZ.
+          To display just a specific paragraph, specify the full 'section' identifier (X.YpZ).
+          You may use -n # to skip to the #th match. 
+          To list only the section numbers containing 'search text', add -list.
+          If both 'section' and 'search regex' are specified, then the search space will be within the specified section identifier.
+
+
 Examples:
+
+
   < pragma_> !cstd pointer value
+   < PBot> Displaying #1 of 64 matches: 5.1.2.2.1p1: [Program startup] If they are declared, the parameters to the 
+              main function shall obey the following constraints: -- The value of argc shall be nonnegative. -- argv[argc] 
+              shall be a null pointer. -- If the value of argc is greater than zero, the array members argv[0] through
+              argv[argc-1] inclusive shall contain pointers to st... truncated; see http://codepad.org/f2DULaGQ for full text.
+
+
   < pragma_> !cstd pointer value -list
+   < PBot> Sections containing 'pointer value': 5.1.2.2.1p2, 5.1.2.3p9, 6.2.5p20, 6.2.5p27, 6.3.2.1p3, 6.3.2.1p4, 
+              6.3.2.3p2, 6.3.2.3p6, 6.5.2.1p3, 6.5.2.2p5, 6.5.2.2p6, 6.5.2.4p1, 6.5.2.4p2, 6.5.3.1p1, 6.5.3.2p3, 6.5.3.2p4,
+              6.5.3.3p5, 6.5.3.4p5, 6.5.6p8, 6.5.6p9, 6.5.8p5, 6.5.15p6, 6.6p7, 6.6p9, 6.7.2.2p5, 6.7.2.3p7, 6.7.2.3p3, 
+              6.7.5.1p3, 6.7.5.2p7, 7.1.1p1, 7.1.1p4, 7.1.4p1, 7... truncated; see http://codepad.org/qQlnJYJk for full text.
+
+
   < pragma_> Hmm, how about just section 6.3?
+
+
   < pragma_> !cstd pointer value 6.3
+   < PBot> Displaying #1 of 4 matches: 6.3.2.1p1: [Lvalues, arrays, and function designators] Except when it is the operand
+              of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression
+              that has type ``array of type is converted to an expression with type ``pointer to type that points to the
+              initial element of the array ob... truncated; see http://codepad.org/mf1RNnr2 for full text.
+
+
   < pragma_> !cstd pointer value 6.3 -list
+   < PBot> Sections containing 'pointer value': 6.3.2.1p3, 6.3.2.1p4, 6.3.2.3p2, 6.3.2.3p6
+
+
   < pragma_> !cstd pointer value 6.3 -n3
+   < PBot> Displaying #3 of 4 matches: 6.3.2.3p1: [Pointers] For any qualifier q, a pointer to a non-q-qualified type may be
+              converted to a pointer to the q-qualified version of the type; the values stored in the original and converted 
+              pointers shall compare equal.
+
+

[edit] man

+

Displays manpage summaries and/or C related tidbits (headers, +prototypes, specifications), as well as a link to the FreeBSD manpage. +

+
Usage:  !man [section] query
+Samples:
+ <pragma_> !man fork
+ <PBot> Includes: sys/types.h, unistd.h - pid_t fork(void); - SVr4,  
+           SVID, POSIX, X/OPEN, BSD - fork creates a child process that 
+           differs from the parent process only in its PID and PPID, and 
+           in the fact that resource utilizations are set to 0 - 
+           http://www.iso-9899.info/man?fork
+ <pragma_> !man atexit
+ <PBot> Includes: stdlib.h - int atexit(void (*function)(void)); - 
+           SVID 3, BSD 4.3, ISO 9899 - atexit () function registers the 
+           given function to be called at normal program termination, 
+           whetits via exit(3) or via return from the program's main - 
+           http://www.iso-9899.info/man?atexit
+ <pragma_> !man getcwd
+ <PBot> Includes: unistd.h - char *getcwd(char *buf, size_t size); - 
+           POSIX.1 - getcwd () function copies an absolute pathname of 
+           the current working directory to the array pointed to by buf, 
+           which is of length size - http://www.iso-9899.info/man?getcwd
+
+

[edit] google

+

Displays google results for a query. +

+
Usage:  !google [number of results] query
+Samples:
+  <pragma_> !google brian kernighan
+  <PBot> brian kernighan (115,000): Brian Kernighan's Home Page:                  
+            (http://www.cs.princeton.edu/~bwk/)
+  <pragma_> !google 3 brian kernighan
+  <PBot> brian kernighan (115,000): Brian Kernighan's Home Page:                  
+            (http://www.cs.princeton.edu/~bwk/), An Interview with Brian      
+            Kernighan: (http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/),
+            Interview with Brian Kernighan | Linux Journal: 
+            (http://www.linuxjournal.com/article.php?sid=7035), Brian W. 
+            Kernighan: (http://www.lysator.liu.se/c/bwk/) ,Brian W. 
+            Kernighan: Programming in C: A Tutorial:       
+            (http://www.lysator.liu.se/c/bwk-tutor.html)
+
+

[edit] define/dict

+

Displays dictionary defintions from http://dict.org using DICT protocol. +

Databases for the -d option are listed itse: http://blackshell.com/~msmud/PBot/dict_databases.txt +

+
 Usage: dict [-d database] [-n start from definition number] [-t first letter of word class type (n]oun, v]erb, etc)] 
+        [-search <regex> for definitions matching <regex>] <word>
+
+
 Examples:
+
+
   <pragma_> dict hit
+   <PBot> hit: n: 1) (baseball) a successful stroke in an athletic contest (especially in baseball); 
+            "he came all the way around on Williams' hit", 2) the act of contacting one thing with anotits; 
+            "repeated hitting raised a large bruise"; "after three misses she finally got a hit" [syn: hitting,
+            striking], 3) a conspicuous success; "that song was his first hit and marked the beginning of his 
+            career"; "that new Broadway show is a real smasits"
+
+
   <pragma_> dict -n 4 hit
+   <PBot> hit: n: 4) (physics) an brief event in which two or more bodies come togetits; "the collision of the 
+             particles resulted in an exchange of energy and a change of direction" [syn: collision], 5) a dose 
+             of a narcotic drug, 6) a murder carried out by an underworld syndicate; "it has all the earmarks of 
+             a Mafia hit", 7) a connection made via the internet to anotits website; "WordNet gets many hits from 
+             users worldwide"
+
+
   <pragma_> dict -t v hit
+   <PBot> hit: v: 1) cause to move by striking; "hit a ball", 2) hit against; come into sudden contact with; 
+             "The car hit a tree"; "He struck the table with his elbow" [syn: strike, impinge on, run into, 
+             collide with] [ant: miss], 3) affect or afflict suddenly, usually adversely; "We were hit by really 
+             bad weatits"; "He was stricken with cancer when he was still a teenager"; "The earthquake struck at 
+             midnight" [syn: strike], 4) deal a blow to
+
+
   <pragma_> dict -search ball hit
+   <PBot> hit: n: 1) (baseball) a successful stroke in an athletic contest (especially in baseball); "he came all 
+             the way around on Williams' hit", v: 1) cause to move by striking; "hit a ball"
+
+
   <pragma_> dict -d eng-fra hit
+   <PBot> hit: 1) [hit] battre, frapper, heurter frapper, heurter atteindre, frapper, parvenir, saisir
+
+

[edit] gdict

+

Displays dictionary definitions from http://google.com's define:<entry> search. +

+
Usage: !gdict query
+
+

[edit] udict

+

Displays dictionary definitions from http://urbandictionary.com. +

+
Usage: !udict query
+
+

[edit] wdict

+

Displays Wikipedia article abstracts (first paragraph). Note: case-sensitive and very picky. +

+
Usage: !wdict query
+
+

[edit] acronym

+

Displays expanded acronyms. +

+
Usage:  !acronym query
+Samples:
+  <pragma_> !acronym posix
+  <PBot> posix (3 entries): Portable Operating System for   
+            Information Exchange, Portable Operating System Interface 
+            Extensions (IBM), Portable Operating System Interface for        
+            Unix
+  <pragma_> !acronym linux
+  <PBot> linux (1 entries): Linux Is Not UniX
+
+

[edit] weatits

+

Displays current conditions and forecasts. (Note: currently half-broken.) +

+
Usage:  !weatits zipcode  or  !weatits city, state, country
+Samples:
+  <pragma_> !weatits chicago, il
+  <PBot> United States, Illinois, Chicago (Updated 9:53 pm CST): 
+            Temp: 9F/-12C (Feels like: -2F/-18C), High: 9F/-12C, Low: 
+            9F/-12C, Sky: Mostly Cloudy, Humidity: 48%, Wind: W 8 mph, 
+            Sunrise: 7:16 am, Sunset: 4:44 pm,  Tonight: Partly cloudy 
+            skies. Cold. Low around 5F. Winds WNW at 5 to 10 mph.
+
+

[edit] map

+

Displays nearby locations to provided location (for use with .weatits). +

+
Usage:  !map zipcode  or  .map city, state, country
+Samples:
+  <pragma_> !map chicago, il
+  <PBot> United States, Illinois, Chicago - Nearby Locations: Fox    
+            Valley, Chicago/Meigs Field, Cicero, Chicago/Midway Arpt, 
+            Berwyn, Oak Park,
+
+

[edit] gspy

+

Displays recent search queries for a popular search engine. +

+
Usage:  !gspy
+Samples:
+  <pragma_> !gspy
+  <PBot> Recent search queries: cranberry mall, westminster,      
+            architectural styles in glens falls, architectural styles                                   
+            in glens falls, cameras, dayh-f036n090a, virgin valley art 
+            association, spacemaker heat shield, calvinist, video 
+            capture software, subaru wrx performance modifications
+
+

[edit] math

+

Extremely basic calculations. +

+
Usage:  !math expression
+Samples:
+  <pragma_> !math 5 + 5
+  <PBot> 5 + 5 = 10
+
+

[edit] compliment

+

Displays a random Markov-chain compliment/insult. +

+
Usage: !compliment [nick]
+
+

[edit] insult

+

Displays a random insult. +

+
Usage: !insult [nick]
+
+

[edit] excuse

+

Displays a random excuse. +

+
Usage: !excuse [nick]
+
+

[edit] horoscope

+

Displays a horoscope for a Zodiac sign (google this if you don't know your sign). +

+
Usage: !horoscope <sign>
+
+

[edit] quote

+

Displays quotes from a popular quotation database. If you +use !quote without arguments, it returns a random quote; if you use + it +with an argument, it searches for quotes containing that text; if you +add --author <name> at the end, it searches for a quote by +that author; if you specify text and --author, it searches for quotes by + that author, containing that text. +

+
Usage: !quote [search text] [--author <author name>]
+Samples:
+  <pragma_> !quote
+  <PBot> "Each success only buys an admission ticket to a more difficult problem." -- Henry Kissinger (1923 -  ).  Discuss!
+  <pragma_> !quote --author lao tzu
+  <PBot> 41 matching quotes found. "A journey of a thousand miles begins with a single step." -- Lao-tzu (604 BC - 531 BC).    Discuss!
+  <pragma_> !quote butterfly
+  <PBot> 11 matching quotes found. "A chinese philosopits once had a dream that he was a butterfly. From that day on, he
+            was never quite certain that he was not a butterfly, dreaming that he was a man." -- Unknown.  Discuss!
+
+

[edit] Informative

+

[edit] list

+

Lists information about specified argument +

+
Usage:  .list <modules|factoids|commands|admins>
+
+

[edit] info

+

Shows detailed information about a module or a factoid +

+
 Usage:  .info <module|factoid>
+
+

[edit] version

+

Shows version information +

+

[edit] source

+

Shows PBot's source information.
Source for PBot: http://pragma.homeip.net/stuff/scripts/pbot2.pl. +

+

[edit] help

+

Shows link to this page. +

+

[edit] Administrative

+

[edit] login

+

You cannot use any of the admin commands unless you login first +

+
 Usage:  login <password>
+
+

Note that login requires that your nick and hostmask match PBot's records. +

+

[edit] logout

+

Logs out of PBot. +

+

[edit] ignore

+

Ignore a user +

+
Usage:  !ignore <hostmask> [channel] [timeout]
+
+

[edit] unignore

+

Unignores a user +

+
Usage:  !unignore <hostmask> [channel]
+
+

[edit] ban

+

Bans a user +

+
 Usage:  !ban <hostmask> [timeout seconds]
+
+

If timeout is omitted, PBot will ban the user for one hour. Timeout is in seconds. +

+

[edit] unban

+

Unbans a user +

+
 Usage:
+   !unban <hostmask>
+
+

Note that <hostmask> must EXACTLY match the hostmask in the ban list for the channel. +

+

[edit] kick

+

Removes a nick from the channel +

+
 Usage:  !kick <nick> <reason>
+
+

Must be used in the channel. +

+

[edit] export

+

exports specified list to web page +

+
Usage:  !export <commands|factoids|admins|channels>
+
+

[edit] Flood control

+

PBot can monitor the channel for excessive rapid traffic +originating from an individual and automatically ban the offender for a +certain length of time. +

+

[edit] Message flood

+

If four (4) or more messages are sent within ten (10) seconds, the +flood control is triggered. The offender will be quieted for 30 seconds + for the first offense. Each additional offense will result in the +offender being quieted for much longer period. For example, the first +offense will result in 30 seconds, the 2nd offense will be 5 minutes, +the 3rd will be 1 hour, and so on. +

+

[edit] Join flood

+

If four (4) or more JOINs are observed within thirty (30) minutes without any messages in between joins, the offender will be forwarded to anotits channel for a limited time: 2^(number_of_offenses + 2) hours. +

In addition to private instructions from PBot, this channel +will have a /topic and ChanServ on-join message with instructions +explaining to the offender how to remove the forwarding. The +instructions are to message PBot with: unbanme <channel>. +

(Any messages sent to the public channel by the user at any time will reset their JOIN counter back to zero.) +

+

[edit] Notification message

+

PBot will send the following message to the offender each offense. +

+

[edit] Chat flooding

+

"You have been quieted due to flooding. Please use a web paste service such as http://codepad.org for lengthy pastes. You will be allowed to speak again in ### seconds." +

+

[edit] Join flooding

+

"You have been banned from $channel for $timeout due to join +flooding. If your connection issues have been resolved, or this was an +accident, you may request an unban at any time by responding to this +message with: unbanme $channel" +

+

[edit] Opping/Deopping

+

ChanServ will automagically op and deop PBot when necessary. +PBot will wait until about 5 minutes have elapsed before requesting a + deop from ChanServ. +

+
+

Category IRC +

+ + + +
+
+
+
+
+
+
Views
+ +
+
+
Personal tools
+ +
+ + + + + +
+
+ + + + +
+ diff --git a/doc/README b/doc/README new file mode 100644 index 00000000..48e3faab --- /dev/null +++ b/doc/README @@ -0,0 +1,59 @@ +See also: http://www.iso-9899.info/wiki/Candide +-------------------------- +PBot requires Perl 5.10, especially for !cc +-------------------------- +PBot is intended for the Freenode IRC network. As such, it has not been +tested on other networks. Some IRC features, such as NickServ auto-join, may need adjusting. +-------------------------- +The first thing you'll want to do is edit pbot.pl and change the default +settings: + + * If you did not extract/checkout PBot into ~/pbot (where ~/pbot/PBot +contains the PBot.pm module), you'll want to change $pbothome in pbot.pl +to point to the directory that contains the PBot, config, data, etc directories. + + * Change the IRC settings in pbot.pl so that the bot-nick and identify password are +associated with a registered NickServ account, if you want channel auto-join to succeed. +-------------------------- +Then you'll need to get several modules from CPAN. If you do not have root access, see +http://perl.jonallen.info/writing/articles/install-perl-modules-without-root + +AppConfig::Std +Data::Dumper +Getopt::Std +HTML::Entities +HTML::FormatText +HTML::Parse +IPC::Open2 +LWP::Simple +LWP::UserAgent +LWP::UserAgent::WithCache +Net::Dict +SOAP::Lite +Text::Autoformat +Text::Balanced +URI::Escape +WWW::Wikipedia +XML::RSS +-------------------------- +Some quick-and-dirty info on using stdin (pbot shell after running pbot.sh): + +You can type in the bot's stdin to talk in channels as the bot, +e.g. by typing 'msg #pbot2 hi' from the bot's stdin. + +You can send bot commands to channel by using: ~channel command + +For instance, the kick command must be run in a channel: + +~#pbot2 kick somenick Example reason + +The bot may be backgrounded via ^Z. +-------------------------- +Coming soon to README: + +* Description of each PBot module, for dev customisation. +-------------------------- +Todo: + +* Add SSL and port options to pbot.pl. +* Use DualIndexHashObject as base for a Registry class?