概要
FacebookのFQLで"user"テーブルの"can_message"カラムを取得すると常にtrueが返ります。
現象
Facebookのメッセージフィルタ設定には
・基本フィルタ
・絞り込み
の2種類があります。このいずれを選んだ状態でも
select can_message from user where uid=[USER_ID]
の結果はtrueになります。
原因
現在、この"can_message"カラムはおそらく意味のないものとなっています。というのも、昨年末に行われたFacebookのメッセージフィルタに関する仕様変更が影響していると思われるためです。
Facebook、メッセージのフィルタ設定の新設と有料メッセージテストを発表 - ITmedia エンタープライズ
この記事によれば、以前のメッセージフィルタ設定ではメッセージを送信できるユーザーを制限できました(例えば友達のみとか)。それが新しいフィルタ設定に移行し、ユーザー制限に代わってフォルダの振り分けに変更されました。これに伴い、ユーザー制限の状態を表していたと思われる"can_message"カラムは常にtrueを返すこととなったようです。
参考
stackoverflowの回答の中でこの件に触れている方がいます。
Facebook UI, how to check if a user can send facebook message to another user - Stack Overflow
Stéphane Bruckertさんの回答です。そのうち廃止されるのでは?とも予測しているようですね。