I would cache these flags to named variables so the evaluation fits comfortably on one line.

Also I'm not sure the logic is exactly right.  At the moment, I think any truth-y value from the last condition would make the entire conditional true.  In other words, `hubotMsg` and `author` could be false, but if `self.options.mode is 'whitelist' and author.room in self.options.channels` is true than the conditional would pass.  It seems like that's not what we want, or at least would be a change in behavior.

```javascript
if (false && false && false || true) {
  console.log("It's all true")
}
// It's all true 
```

I think it should look more like this.

```javascript
if (false && false && (false || true)) {
  console.log("It's all true")
}
// [Doesn't print anything]
```