Index: otr.c
===================================================================
--- otr.c	(revision ea902752503fc5b356d6513911081ec932d804f2)
+++ otr.c	(revision 9f03c472fef309878ff2f3bc720d51e6d03077f1)
@@ -429,5 +429,5 @@
 
 	/* don't do OTR on certain (not classic IM) protocols, e.g. twitter */
-	if (a->prpl->options & OPT_NOOTR) {
+	if (a->prpl->options & PRPL_OPT_NOOTR) {
 		return 0;
 	}
@@ -457,5 +457,5 @@
 
 	/* don't do OTR on certain (not classic IM) protocols, e.g. twitter */
-	if (ic->acc->prpl->options & OPT_NOOTR ||
+	if (ic->acc->prpl->options & PRPL_OPT_NOOTR ||
 	    iu->bu->flags & BEE_USER_NOOTR) {
 		return msg;
Index: protocols/nogaim.h
===================================================================
--- protocols/nogaim.h	(revision ea902752503fc5b356d6513911081ec932d804f2)
+++ protocols/nogaim.h	(revision 9f03c472fef309878ff2f3bc720d51e6d03077f1)
@@ -140,4 +140,25 @@
 };
 
+/* This enum takes a few things from libpurple and a few things from old OPT_ flags.
+ * The only flag that was used before this struct was PRPL_OPT_NOOTR.
+ *
+ * The libpurple ones only use the same values as the PurpleProtocolOptions
+ * enum for convenience, but there's no promise of direct compatibility with
+ * those values. As of libpurple 2.8.0 they use up to 0x800 (1 << 11), which is
+ * a nice coincidence.
+ */
+typedef enum {
+	/* The protocol doesn't use passwords
+	 * Mirrors libpurple's OPT_PROTO_NO_PASSWORD */
+	PRPL_OPT_NO_PASSWORD = 1 << 4,
+
+	/* The protocol doesn't require passwords, but may use them
+	 * Mirrors libpurple's OPT_PROTO_PASSWORD_OPTIONAL */
+	PRPL_OPT_PASSWORD_OPTIONAL = 1 << 7,
+
+	/* The protocol is not suitable for OTR, see OPT_NOOTR */
+	PRPL_OPT_NOOTR = 1 << 12,
+} prpl_options_t;
+
 struct prpl {
 	int options;
Index: protocols/purple/purple.c
===================================================================
--- protocols/purple/purple.c	(revision ea902752503fc5b356d6513911081ec932d804f2)
+++ protocols/purple/purple.c	(revision 9f03c472fef309878ff2f3bc720d51e6d03077f1)
@@ -1725,4 +1725,5 @@
 	for (prots = purple_plugins_get_protocols(); prots; prots = prots->next) {
 		PurplePlugin *prot = prots->data;
+		PurplePluginProtocolInfo *pi = prot->info->extra_info;
 		struct prpl *ret;
 
@@ -1738,4 +1739,13 @@
 			ret->name += 5;
 		}
+
+		if (pi->options & OPT_PROTO_NO_PASSWORD) {
+			ret->options |= PRPL_OPT_NO_PASSWORD;
+		}
+
+		if (pi->options & OPT_PROTO_PASSWORD_OPTIONAL) {
+			ret->options |= PRPL_OPT_PASSWORD_OPTIONAL;
+		}
+
 		register_protocol(ret);
 
Index: protocols/twitter/twitter.c
===================================================================
--- protocols/twitter/twitter.c	(revision ea902752503fc5b356d6513911081ec932d804f2)
+++ protocols/twitter/twitter.c	(revision 9f03c472fef309878ff2f3bc720d51e6d03077f1)
@@ -1092,5 +1092,5 @@
 	struct prpl *ret = g_new0(struct prpl, 1);
 
-	ret->options = OPT_NOOTR;
+	ret->options = PRPL_OPT_NOOTR | PRPL_OPT_NO_PASSWORD;
 	ret->name = "twitter";
 	ret->login = twitter_login;
@@ -1119,4 +1119,5 @@
 	ret = g_memdup(ret, sizeof(struct prpl));
 	ret->name = "identica";
+	ret->options =  PRPL_OPT_NOOTR;
 	register_protocol(ret);
 }
Index: root_commands.c
===================================================================
--- root_commands.c	(revision ea902752503fc5b356d6513911081ec932d804f2)
+++ root_commands.c	(revision 9f03c472fef309878ff2f3bc720d51e6d03077f1)
@@ -470,4 +470,11 @@
 				irc_rootmsg(irc, "No need to enter a password for this "
 				            "account since it's using OAuth");
+			} else if (prpl->options & PRPL_OPT_NO_PASSWORD) {
+				*a->pass = '\0';
+			} else if (prpl->options & PRPL_OPT_PASSWORD_OPTIONAL) {
+				*a->pass = '\0';
+				irc_rootmsg(irc, "Passwords are optional for this account. "
+				            "If you wish to enter the password with /OPER, do "
+				            "account %s set -del password", a->tag);
 			} else {
 				irc_rootmsg(irc, "You can now use the /OPER command to "
@@ -479,4 +486,6 @@
 				}
 			}
+		} else if (prpl->options & PRPL_OPT_NO_PASSWORD) {
+			irc_rootmsg(irc, "Note: this account doesn't use password for login");
 		}
 
