Setting up a Facebook account in !BitlBee

Facebook's offering a XMPP server for some time already, which means you can use their chat using any XMPP/Jabber client, including BitlBee.

Connecting using OAuth

This method is only available in very new versions of BitlBee (not yet in 3.0.4 for example, but if you use the testing.bitlbee.org public server you can try this out already).

   1 12:12:54 <wilmer> account add jabber wilmer@chat.facebook.com
   2 12:12:54 <root> Account successfully added with tag fb
   3 12:12:54 <root> You can now use the /OPER command to enter the password
   4 12:12:54 <root> Alternatively, enable OAuth if the account supports it: account fb set oauth on
   5 12:13:03 <wilmer> acc fb set oauth on
   6 12:13:03 <root> oauth = `on'
   7 12:13:06 <wilmer> acc fb on
   8 12:13:06 <root> fb - Logging in: Starting OAuth authentication

Now, like with Twitter-OAuth, you can authenticate with Facebook using your web browser and allow BitlBee to use your account, without giving your password to BitlBee. Once you complete this, login will continue:

   1 12:19:23 <root> fb - Logging in: Requesting OAuth access token
   2 12:19:25 <root> fb - Logging in: Connecting
   3 12:19:25 <root> fb - Logging in: Connected to server, logging in
   4 12:19:25 <root> fb - Logging in: Converting stream to TLS
   5 12:19:26 <root> fb - Logging in: Connected to server, logging in
   6 12:19:26 <root> fb - Logging in: Authentication finished
   7 12:19:27 <root> fb - Logging in: Server claims your JID is `-1278655042@chat.facebook.com' instead of `wilmer@chat.facebook.com'. This mismatch may cause problems with groupchats and possibly other things.
   8 12:19:27 <root> fb - Logging in: Authenticated, requesting buddy list
   9 12:19:28 <root> fb - Logging in: Logged in

As you can see, during login the server will tell you your real (numeric) XMPP username. It might be a good idea to update your account settings with this information using account set.

OAuth is likely to work better on public servers than the old authentication method described below. Also, for this method you shouldn't have to create a Facebook username. But most important of all, OAuth will give the BitlBee server permission to use your Facebook account just for chat. Even if your account information leaks, it won't provide access to any other part of your Facebook account.

Connecting the old way (with a password)

First, you do need to have a Facebook username.

Important: You will have to use all lowercase letters for your Facebook username in Bitlbee, but not on Facebook itself. E.g. your username on Facebook can be "Someone", but in Bitlbee, you'll have to use "someone".

   1 23:44:32 <wilmer> account add jabber yourusername@chat.facebook.com ''yourpassword''
   2 23:44:32 <root> Account successfully added
   3 23:44:42 <wilmer> account facebook set nick_source full_name
   4 23:44:42 <root> nick_source = `full_name'
   5 23:44:43 <wilmer> account on
   6 23:44:44 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Connecting
   7 23:44:44 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Connected to server, logging in
   8 23:44:45 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Authentication finished
   9 23:44:45 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Server changed session resource string to `BitlBee_5d9293ae_4870E52387B28'
  10 23:44:46 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Authenticated, requesting buddy list
  11 23:44:47 <root> jabber(wvdgaast@chat.facebook.com) - Logging in: Logged in

If you're getting authentication failures, try logging out and back into the Facebook website.

Numeric usernames

All contacts have numeric handles, which makes for very ugly usernames by default, since nicknames are generated from the IM handle. By setting the nick_source account setting to full_name, like this:

account fb set nick_source full_name           (BitlBee 3.0+)
account set facebook/nick_source full_name     (Older versions)

(Replacing X with the number of your Facebook account), the nicknames will be generated based on the full names. Enter:

help set nick_source

For more detailed information on what this setting does and what its parameters are.

By default nicks will be entirely lowercased. It can be easier to distinguish names if you use the capitalisation Facebook applies to names. This is not true CamelCase, but close. To turn lowercasing of nicks off enter:

set lcnicks off

Note: The nick_source setting was added in BitlBee 1.2.5.

Alternatively, there exists scripts that automatically renames numeric handles for some IRC clients.

Irssi

Irssi users can use this script to rename the contacts. Note that this script can translate some non-ASCII characters to something more IRC-friendly, whereas the BitlBee setting will just strip everything non-ASCII.

Weechat

Weechat users can use the facebook-rename script to automatically rename any user who joins with a numerical name. Note that your Bitlbee server handle must be named 'bitlbee', or you'll have to change the "bitlbeeServer" parameter value on the top of the script to your handle name.

This script, like the BitlBee setting, will simply strip everything non-ASCII.

I get nothing after "Logging in: Authenticated, requesting buddy list"

This is a problem with Facebook, not with BitlBee. It's especially likely that you get this error on public servers. The problem's caused by security measures on Facebook's side. They keep track of the IP addresses from where you've used their website in the past, and often restrict access to your account via their XMPP server to just those IP addresses. Most new users had used facebook chat previously only from their home/office etc and facebook probably keeps a log of all IPs that were used to access that account. And, when you access your account from a public server (which is located in a different country/continent for most of users), facebook refuses to let you in. (Gmail/gtalk do similar tracking except that instead of refusing user to login, they flag a warning and prompt user to change password in case the access sounds malicious). If you get this error, you can try to log into Facebook (via an SSH tunnel, for example) from the IP address that also hosts the BitlBee instance.

But if you use a public BitlBee server, unfortunately there's not much you can do. BitlBee can't offer any help with this since that could be seen as a violation of their terms of service. Fortunately not all accounts are affected by this, several people have reported that they can log into Facebook XMPP from wherever they want. Possibly accounts get unlocked once they're used from many places (i.e. different IPs) already. You can try logging in to facebook web chat from different IPs (maybe office, home, university) a few times before it lets you login from a public bilbee server.

Note: It seems that this should no longer happen, and most likely Facebook XMPP will now allow connections from any IP address, after verifying the connection attempt on their website.

Note2: If this does still happen to you, try using OAuth as described above.

"Warning: Received incomplete IQ-set packet"

In versions 1.2.7 and older you may be getting this message when using BitlBee + Facebook Chat via XMPP. It's completely harmless, but very annoying. You can upgrade to a newer version to make it go away, or use /ignore to at least not see it anymore. In Irssi, something like this should work:

/ignore -pattern "Received incomplete IQ-set packet" root *

I can't set myself as away.

Yes. That has nothing to do with BitlBee though, it's a well-known limitation of the very poor XMPP service offered by Facebook.