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. +
++ + + + + +