plugins/PERL-HOWTO

Tue, 10 Oct 2000 10:35:05 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Tue, 10 Oct 2000 10:35:05 +0000
changeset 966
57ba1b059564
parent 806
3e5139e2f16e
child 1101
d656fabb1d6c
permissions
-rw-r--r--

[gaim-migrate @ 976]
yay, the applet works again (mostly)

750
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 This is really the wrong place for a HOWTO on writing perl scripts for gaim,
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 but there didn't seem to be a much better place.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 If you've ever written a perl script for X-Chat then you've basically written
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 one for gaim as well. perl.c in gaim's source is basically an exact copy of
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 X-Chat's perl.c file, with small modifications to suit AIM rather than IRC.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 Basically the reason for including perl is based on the experience with the
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 plugins. X-Chat's docs on Perl Scripting sums it up nicely:
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 it's not quite as simple to stick a module together in C and make it
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 stable compared to the development time of perl code
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 Plugins are more powerful as they can directly access gaim's functions and
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 variables; as such they should be used for things like modifying the UI or
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 when something takes quite a bit of trickery not offered by perl. But for
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 the most part things should be written in Perl. It's more stable than
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 plugins.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18
806
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
19 There's a really quick simple perl script in this directory, gaim.pl, that
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
20 should show most of the functions. Most things should be self-explanatory.
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
21
750
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 Everything available in normal perl scripts should be available in gaim's
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 perl interface, so I'm not going to bother describing that. The important
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 things are the functions provided by gaim's internal AIM module, which is
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 what most of this document is about. So, onto the functions.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27 AIM::register(name, version, shutdownroutine, unused)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 Just like X-Chat. This is the first function your script should call.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 shutdownroutine is a function that will be called when the script
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 gets unloaded (like when gaim gets closed). This function returns
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 gaim's version number.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 AIM::get_info(integer)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 This function returns different information based on the integer passed
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 to it.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 0 - the version of gaim you're running ("0.10.0" for example).
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 1 - the screenname to last attempt to sign on
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 2 - either "Offline", "TOC", or "Oscar"
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 AIM::print(title, message)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 This displays a nice little dialog window.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 AIM::buddy_list()
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 This returns the buddy list (no groups, just the names of the buddies)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 AIM::online_list()
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 This returns the list of online buddies.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 AIM::deny_list()
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 This returns the deny list. This is probably going to be modified before
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 0.10.0 is released to return either the deny or the permit list and the
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 current mode.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 AIM::command(command, ...)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 This sends commands to the server, and each command takes various
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 arguments. The command should be self-explanatory:
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 "signon" - no args.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60 "signoff" - no args.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
61 "away" - the second arg is the away message
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62 "back" - no args.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 "idle" - the second arg is how long (in seconds) to set the idle time
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 "warn" - the second arg is the name of the person to warn
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 AIM::user_info(nick)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67 Returns 7 data items:
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 the screenname of the buddy
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 "Online" or "Offline"
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70 their warning level
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 signon time, in seconds since the epoch
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 idle time, in seconds (?)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 user class, an integer with bit values
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 AOL 1
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 ADMIN 2
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 UNCONFIRMED 4
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 NORMAL 8
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 AWAY 16
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 their capabilites, an integer with bit values
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 BUDDYICON 1
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81 VOICE 2
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 IMIMAGE 4
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 CHAT 8
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 GETFILE 16
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 SENDFILE 32
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 This is probably going to change before 0.10.0 is released to
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 also return the alias of the buddy.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 AIM::print_to_conv(who, what)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 This should be obvious. If you can't figure this out on your own, you
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 shouldn't be using a computer.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 AIM::print_to_chat(room, what)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 This should be just as obvious as the last command.
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96
802
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
97
785
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
98 AIM::add_event_handler(event, function)
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
99 This is the most important of them all. This is basically exactly like
802
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
100 gaim_signal_connect for plugins. You pass which event you want to connect to
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
101 (a string with the same name as the events for plugins, see SIGNALS), and a
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
102 string with the name of the function you want called. Simple enough?
750
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103
802
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
104 When this is triggered, the arguments will be passed in @_ and are not
785
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
105 broken into a list, but left as one long string. You'll have to parse those
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
106 yourself with split. (Sounding exactly like X-Chat yet?) The arguments are
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
107 the exact same as those passed to the plugins, and are passed after the
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
108 plugins have had their way with them. Perl scripts cannot modify the values
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
109 so that gaim knows what the changes are. Unlike X-Chat, perl scripts cannot
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
110 short-circut gaim (that is, your script will be called in order it was added,
fcf85892216c [gaim-migrate @ 795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 750
diff changeset
111 despite what other scripts do, and afterwards, execution will continue as
802
5dd2ba397dfe [gaim-migrate @ 812]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 785
diff changeset
112 normal). Names of buddies and chat rooms will be in quotes, and all other
806
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
113 values (like text messages) will not be. (Watch the debug window to get a
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
114 better feel for this, or better yet, look at the bottom of plugins.c.)
750
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116 AIM::add_timeout_handler(integer, function)
0bf82abd1f5e [gaim-migrate @ 760]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 This calls function after integer number of seconds. It only calls function
806
3e5139e2f16e [gaim-migrate @ 816]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 802
diff changeset
118 once, so if you want to keep calling function, keep readding the handler.

mercurial