diff options
| -rw-r--r-- | utils/README | 29 | ||||
| -rwxr-xr-x | utils/centericq2bitlbee.sh | 115 | ||||
| -rw-r--r-- | utils/convert_gnomeicu.txt | 7 | ||||
| -rwxr-xr-x | utils/convert_purple.py | 113 | ||||
| -rwxr-xr-x | utils/create_nicksfile.pl | 210 | 
5 files changed, 116 insertions, 358 deletions
| diff --git a/utils/README b/utils/README index 8cbbfede..7e875af9 100644 --- a/utils/README +++ b/utils/README @@ -17,33 +17,10 @@ at once.  Of course this program can be used for other programs too, not just BitlBee. -* create_nicksfile.pl (Christian Friedl <christian.friedl@chello.at>) +* convert_purple.py -This program reads your ~/.licq/ configuration data and convert it to a -correct .nicks file. This program can be extended to read other contact -list file formats as well. - - -* centericq2bitlbee.sh (geno <geno@xenyon.com>) - -Converter script for CenterICQ ICQ contact lists. See the documentation -for more information. - - -* convert_gnomeicu.txt - -Not a program, but this one contains a regex which should correctly -convert GnomeICU configuration files into the BitlBee format. - - -* Dynamic MOTD for BitlBee (Geert Hauwaerts <geert@hauwaerts.be>) - -Originally, I wanted to put this program here, but Geert put it online -on his own server, with docs and stuff, so I guess it's better to put -a link here. dmotd is a little script which generates a motd with some -nice statistics, especially nice for servers with many people on it. - -See http://dmotd.hauwaerts.be/ for more information. +Converts libpurple configs into something BitlBee can use, so you don't +have to re-add all your accounts by hand.  * BitlBee-specific Irssi scripts for: tab completion, typing notifica- diff --git a/utils/centericq2bitlbee.sh b/utils/centericq2bitlbee.sh deleted file mode 100755 index b8c134e8..00000000 --- a/utils/centericq2bitlbee.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# -#  Author       geno, <geno@xenyon.com> -#  Date         2004-04-24 -#  Version      0.1c -# - -show_help() -{ -cat << _EOF_ - -This script converts your CenterICQ contacts (AIM/ICQ) to BitlBee's contacts. -The use of this script is on you own risk. You agree by using this script. :-) - -SYNTAX: `basename $0` <protoname> [<add_proto_tag>] - -	protoname     - Choose the protocol you want to get your contacts from -			by using "aim" or "icq" here. - -	add_proto_tag - This is optional and adds a suffix to each nickname. -			For an AIM contact it will look like this: geno|aim -			For an ICQ contact it will be |icq , WOW! :-D -			To enable this option use "on".  - -NOTE: -	After the conversion of one protocol is done you will find a file -	called bitlbee_[protoname] in ~/.centericq . Append the content of -	this file to /var/lib/bitlbee/[username].nicks . - -	[username] is your username you use to talk to the BitlBee Server. -	You will have to be root to edit this file! - -CREDITS: -	This script was written by geno (geno@xenyon.com). -	I hope it will help you to make the switch to BitlBee a bit easier. :-) - -_EOF_ -exit 0 -} - -case $1 in -	"") show_help ;; -	"icq") -		nick_protocol="[1-9]*/" -		protocol_const="3" -	;; -	 -	"aim") -		nick_protocol="a*/" -		protocol_const="1" -	;; -	 -	*) show_help ;; -esac - -# can we see CenterICQ's directory ? -if [ ! -d ~/.centericq ]; then -	echo "The directory of CenterICQ (~/.centericq) was not found!" -	echo "Maybe you are logged in with the wrong username." -	exit 1 -fi - -# change to the center of all evil ;) -cd ~/.centericq - -# get the listing of all nicks -nick_listing=`ls -d $nick_protocol | sed 's/\ /_DuMmY_/g' | sed 's/\/_DuMmY_/\/ /g'` - -echo -e "\nConverting ...\n" - -# remove old conversion -rm -f ~/.centericq/bitlbee_$1 - -for nick_accountname in $nick_listing; do -	# get rid of the slash and replace _DuMmY_ with space -	nick_accountname=`echo "$nick_accountname" | sed 's/\/$//' | sed 's/_DuMmY_/\ /g'` -	 -	# find centericq alias -	nick_cicq_alias=`cat "$nick_accountname/info" | sed '46!d'` -	 -	# if the centericq alias is the same as the account's name then -	# it's not a real alias; search for account nickname -	if [ "$nick_accountname" == "$nick_cicq_alias" ]; then -		nick_accountalias=`cat "$nick_accountname/info" | sed '1!d'` -	fi - -	# save the best nickname for conversion -	if [ "x$nick_accountalias" == "x" ]; then -		nick="$nick_cicq_alias" -	else -		nick="$nick_accountalias" -	fi - -	# cut off the prefix 'a' of the accountname -	if [ "$1" == "aim" ]; then -		nick_accountname=`echo "$nick_accountname" | sed 's/^a//'` -	fi - -	# replace each space with an underscore (spaces are not allowed in irc nicknames) -	nick=`echo "$nick" | sed 's/\ /_/g'` - -	# if tags are wanted we will add them here -	if [ "$2" == "on" ]; then -		nick=`echo "$nick"\|$1` -	fi - -	# print output to std -	echo "Found '$nick_accountname' with alias '$nick'" -	# save output to file -	echo "$nick_accountname" $protocol_const "$nick" >> ~/.centericq/bitlbee_$1 -done - -echo -e "\nYou can find this list as a file in ~/.centericq/bitlbee_$1." -echo -e "See help if you don't know what you have to do next.\n" - diff --git a/utils/convert_gnomeicu.txt b/utils/convert_gnomeicu.txt deleted file mode 100644 index e2bd1377..00000000 --- a/utils/convert_gnomeicu.txt +++ /dev/null @@ -1,7 +0,0 @@ -15:03:38        zoo| wilmer: watch this: -15:03:40        zoo| cat ~/.icq/contacts.xml | sed "s/<\/user>/\n/g" | -                     sed "s/^.*<uin>//g" | sed "s/<\/nick>//" | sed "s/ /_/g" | -                     sed "s/<\/uin><nick>/ 3 /g" | grep -v -e "^<" -15:04:23        zoo| it does output your gnomeicu nicks to stdout - -Thanks to Claas Langbehn. Use this at your own risk, it's not tested by us. diff --git a/utils/convert_purple.py b/utils/convert_purple.py new file mode 100755 index 00000000..85433119 --- /dev/null +++ b/utils/convert_purple.py @@ -0,0 +1,113 @@ +#!/usr/bin/python +# +# Part of BitlBee. Reads a libpurple accounts.xml file and generates some +# commands/XML that BitlBee understands. For easy migration from Pidgin/ +# Finch/whatever to BitlBee, be it a public server or your own. +# +# Licensed under the GPL2 like the rest of BitlBee. +# +# Copyright 2010 Wilmer van der Gaast <wilmer@gaast.net> +# + +import getopt +import getpass +import os +import subprocess +import sys + +import xml.dom.minidom + +BITLBEE = '/usr/sbin/bitlbee' + +def parse_purple(f): +	protomap = { +		'msn-pecan': 'msn', +		'aim': 'oscar', +		'icq': 'oscar', +	} +	supported = ('msn', 'jabber', 'oscar', 'yahoo', 'twitter') +	accs = list() +	 +	if os.path.isdir(f): +		f = f + '/accounts.xml' +	xt = xml.dom.minidom.parse(f) +	for acc in xt.getElementsByTagName('account')[1:]: +		protocol = acc.getElementsByTagName('protocol')[0].firstChild.wholeText +		name = acc.getElementsByTagName('name')[0].firstChild.wholeText +		password = acc.getElementsByTagName('password')[0].firstChild.wholeText +		if protocol.startswith('prpl-'): +			protocol = protocol[5:] +		if name.endswith('/'): +			name = name[:-1] +		if protocol in protomap: +			protocol = protomap[protocol] +		if protocol not in supported: +			print 'Warning: protocol probably not supported by BitlBee: ' + protocol +		accs.append((protocol, name, password)) +	 +	return accs + +def print_commands(accs): +	print 'To copy all your Pidgin accounts to BitlBee, just copy-paste the following' +	print 'commands into your &bitlbee channel:' +	print +	for acc in accs: +		print 'account add %s %s %s' % acc + +def bitlbee_x(*args): +	bb = subprocess.Popen([BITLBEE, '-x'] + list(args), stdout=subprocess.PIPE) +	return bb.stdout.read().strip() + +def print_xml(accs): +	try: +		bitlbee_x('hash', 'blaataap') +	except: +		print "Can't find/use BitlBee binary. It has to be a 1.2.5 binary or higher." +		print +		usage() +	 +	print 'BitlBee .xml files are encrypted using the identify password. Please type your' +	print 'preferred identify password.' +	user = getpass.getuser() +	pwd = getpass.getpass() +	 +	root = xml.dom.minidom.Element('user') +	root.setAttribute('nick', user) +	root.setAttribute('password', bitlbee_x('hash', pwd)) +	root.setAttribute('version', '1') +	for acc in accs: +		accx = xml.dom.minidom.Element('account') +		accx.setAttribute('protocol', acc[0]) +		accx.setAttribute('handle', acc[1]) +		accx.setAttribute('password', bitlbee_x('enc', pwd, acc[2])) +		accx.setAttribute('autoconnect', '1') +		root.appendChild(accx) +	 +	print +	print 'Write the following XML data to a file called %s.xml (rename it if' +	print 'you want to use a different nickname). It should be in the directory where' +	print 'your BitlBee account files are stored (most likely /var/lib/bitlbee).' +	print +	print root.toprettyxml() + +def usage(): +	print 'Usage: %s [-f <purple accounts file>] [-b <bitlbee executable>] [-x]' % sys.argv[0] +	print +	print 'Generates "account add" commands by default. -x generates a .xml file instead.' +	print 'The accounts file can normally be found in ~/.purple/.' +	sys.exit(os.EX_USAGE) + +try: +	flags = dict(getopt.getopt(sys.argv[1:], 'f:b:x')[0]) +except getopt.GetoptError: +	usage() +if '-f' not in flags: +	usage() +if '-b' in flags: +	BITLBEE = flags['-b'] + +parsed = parse_purple(flags['-f']) +if '-x' in flags: +	print_xml(parsed) +else: +	print_commands(parsed) diff --git a/utils/create_nicksfile.pl b/utils/create_nicksfile.pl deleted file mode 100755 index abd6d3d2..00000000 --- a/utils/create_nicksfile.pl +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/perl -use strict; -use Getopt::Long; - - -my $conn                = undef; -my %readline_funcs      = ( 'licq' => \&import_readline_licq ); -my %open_funcs          = ( 'licq' => \&import_open_licq ); -my %close_funcs         = ( 'licq' => \&import_close_licq ); -my $funcname            = undef; -my $dirname             = undef; -my $filename            = undef; -my $imported            = 0; -my $not_imported        = 0; -my $debug               = 0; - -main(); -exit(0); - - -sub main { -        my ($server,$port,$nick,$pass,$func,$dir,$file,$outfile); -        my $dirfile; -        if (($dirfile=pop @ARGV) =~ /^\-/ || !$dirfile) { -                tell_usage(); -                exit(0); -        } -        if ($dirfile =~ m|/|) { -                $dirfile =~ m|^(.*)(/.+)$|; -                $dir=$1; -                $file=$2; -        } else { -                $dir=undef; -                $file = $dirfile; -        } -        GetOptions( -                'from=s',  => \$func, -                'of=s',  => \$outfile, -                'debug',  => \$debug -        ); -        if (!import_start($func,$dir,$file,$outfile,$debug)) { -                tell_usage(); -        } -} - -sub tell_usage { -        print "Usage: create_nicksfile.pl [--from=FROM] [--of=OUTPUTFILE] [--debug] FILENAME\n"; -        print "       FROM defines which application we import from.\n", -        print "       Note that currently the only valid value for FROM is licq.\n"; -        print "       For further information, you might want to do perldoc create_nicksfile.pl\n"; -} - -sub import_start { -        $funcname          = (shift) || 'licq'; -        $dirname        = shift; -        $filename       = shift; -        my $outfile        = shift || 'bitlbee.nicks'; -        $debug          = shift; -        my ($alias,$protocol,$name,$found); -        open(OUT,'>'.$outfile) || die "unable to open $outfile"; -        if (defined $open_funcs{$funcname}) { -                if (&{$open_funcs{$funcname}}($dirname,$filename)) { -                        do { -                                ($alias,$protocol,$name,$found)=&{$readline_funcs{$funcname}}(); -                                print OUT "$alias $protocol $name\n" if $found; -                        } while ($found); -                } else { -                        import_err('Unable to open '.$filename); -                        return 0; -                } -        } else { -                import_err($funcname.' is no defined import function.'); -                return 0; -        } -        close OUT; -        &{$close_funcs{$funcname}}(); -        return 1; -} - -sub import_err { -        my $msg=shift; -        print "\nError: $msg\n"; -} - -sub import_open_licq { -        my ($dir,$name)=@_; -        return open(IN,'<'.$dir.'/users.conf'); -} -sub import_close_licq { -        close IN; -} -sub import_readline_licq { -        my ($uin,$alias); -        my $line; -GETLINE: -        $line=<IN>; -        if ($line) { -                while ($line && $line !~ /^User\d+/) { -                        $line=<IN>; -                } -                if ($line) { -                        if ($line =~ /^User\d+\s*=\s*(\d+)(\.Licq)?$/) { # getting UIN -                                $uin=$1; -                                open(ALIAS,'<'.$dirname.'/users/'.$uin.'.Licq') || -                                open(ALIAS,'<'.$dirname.'/users/'.$uin.'.uin') || do { -                                        warn "unable to open userfile for $uin"; -                                        return (undef,undef,0); -                                }; -                                while (<ALIAS>) { -                                        if (/^Alias\s*=\s*(.*)$/) { -                                                $alias=$1; -                                                $alias =~ s/\s+/_/g; -                                                last; -                                        } -                                } -                                close ALIAS; -                                $imported++; -                                return ($uin,3,$alias,1); -                        } else { -                                warn('Unknown line format: '.$line); -                                $not_imported++; -                                goto GETLINE; #### grrrr, sometimes there are negative uins in licq files... -                        } -                } else { -                        return (undef,undef,0); -                } -        } else { -                return undef; -        } -} - -__END__ - -=head1 NAME - -create_nicksfile.pl - Create a valid bitlbee .nicks file - -=head1 SYNOPSIS - -create_nicksfile.pl [--from=FROM] [--of=OUTPUTFILE] [--debug] FILENAME - -        FROM defines which application we import from. -        Note that currently the only valid value for FROM  -        is licq. - -        If of is missing, we write to bitlbee.nicks. - -=head1 DESCRIPTION - -We run thru the -files where the contacts reside and create -a bitlbee .nicks-file from them. - -=head1 DEPENDENCIES - -On the perlside, we need Getopt::Long. - -=head1 CAVEATS - -=head1 TODO - -&import_readline_... should take a filehandle as argument. - -Add more import functions. If you are interested, -to do so, you need to write the following functions: - -=over - -=item * - -import_open_<WHATEVER>(DIR,FILENAME) - -=item * - -import_close_<WHATEVER>() - -=item * - -import_readline_<WHATEVER>() - -=back - -and add them to the hashes - -=over - -=item * - -%readline_funcs - -=item * - -%open_funcs - -=item * - -%close_funcs - -=back - -at the top of this script. - - -=head1 AUTHORS - -Christian Friedl <vijeno@chello.at> - -Updated for the new Licq list firmat by Hugo Buddelmeijer <kmail@hugo.doemaarwat.nl> - -=cut | 
