generated at
Cannot read property 'includes' of nullに対処する

filterなどで channel.topic.includes('foo') を書くと Cannot read property 'includes' of null のようなエラーが出る
これはTextChannelクラス .topic プロパティが必ず文字列を返すわけではなくてnullの可能性があるから起こる
ドキュメントを見ると Type: ?string と書かれていて、この string の前にある ? がnullの可能性を表している
あとはテキストチャンネル以外も含まれる .channels.cache などに対して実行するとボイスチャンネルで違うエラーもでる
Cannot read property 'includes' of undefined というエラーだが、ボイスチャンネルなどに .topic はないので起こる
メモ:Discordの仕様で一度でもトピックを変更したことがあるチャンネルだと全て消しても null ではなく '' になる

Node.js v14から使えるJavaScriptの新しい構文もある
上の書き方だと長くて書くのが大変なので(特に複数つながる場合とか)、短く書ける構文が追加された
channel.topic?.includes('foo') のようにnullである可能性がある部分の最後に ? を書く
こうすると上のと同じような動作をするようになる
この新しい構文 ?. Optional Chaining 演算子という

これはDiscord.js固有の問題ではなくて、nullの可能性があるときによく出くわすことなので伝統的な回避方法がある
channel.topic && channel.topic.includes('foo')
これは channel.topic がある場合のみ channel.topic.includes('foo') を実行するような動作をする