generated at
url-customizerでtweetを展開する際に絵文字が入っているとバグる

色んなものを展開しようとこのサイトのポストで試していたら再現

> 🚨 New Desktop Feature: Channel Status
>
> Let the rest of the server know what you're up to in voice so people can join in. <3 Enjoy!
>
> Y

最後の行に Y が入っている
これ例としてよくないな...wogikaze
< が展開できていないのも含んでいる
後で調べる

期待する展開
> 🚨 New Desktop Feature: Channel Status
>
> Let the rest of the server know what you're up to in voice so people can join in. <3 Enjoy!
>

原因
tweet.text はツイートの文章(短縮リンクやハッシュタグを含む)
text.slice() で要素ごとに分割しているが絵文字が含まれると正しく取り出せない
js
const unicodeSubstring `` = (str, start, end) => { const reg = new RegExp(`^[\\s\\S]{${start}}([\\s\\S]{0,${end - start}})`, 'u') return str.match(reg)?.[1] } unicodeSubstring(tweet.text,indices[0] - offset,tweet.text.length)
before : "🚨 New Desktop Feature: Channel Status\n\nLet the rest of the server know what you're up to in voice so people can join in. &lt;3 Enjoy! "
text : 'Y'
before : "🚨 New Desktop Feature: Channel Status\n\nLet the rest of the server know what you're up to in voice so people can join in. &lt;3 Enjoy!"
text : ''
あっ………………………………………………………………………………………………………………………………………………………takker
取り急ぎ修正しました
unicodeSubstring ではなくspread operator書記素クラスターごとに分割する方法を取っています
こっちのほうがスマートでGOODwogikaze
ちなみにFull Emoji Modifierの分割には失敗しましたtakker
こんな文字は「しらんがな」です
絵文字の闇すぎるから困ったときに直そう...wogikaze

> 🚨 New Desktop Feature: Channel Status
>
> Let the rest of the server know what you're up to in voice so people can join in. &lt;3 Enjoy!
>
>

オマケ: < について
便利そうなので取り込みますtakker
> &amp;quot;"""クォーテーション&amp;amp;"&amp;"アンパサンド&amp;lt;"&lt;"小なり&amp;gt;"&gt;"大なり&amp;nbsp;" "空白&amp;copy;"©"コピーライト
>
> テスト
> &quot;"""クォーテーション&amp;"&"アンパサンド&lt;"<"小なり&gt;">"大なり&nbsp;" "空白&copy;"©"コピーライト
>
> テスト

テスト
> Paris 🍷🥖
>
>
>
> Paris 🍷🥖
>
>
動画が表示できなくなってる...
js
...tweet.entities.media?.map?.((media) => ({ type: "media", indices: media.indices, media: tweet.mediaDetails?.flatMap?.((detail) => detail.url === media.url ? [{ type: detail.type, //url: new URL(detail.video_info?.variants?.sort?.((a, b) => b.bitrate - a.bitrate)?.[0].url ?? detail.media_url_https) url: new URL(detail.video_info?.variants.filter(variant => variant.bitrate)?.sort?.((a, b) => b.bitrate - a.bitrate)?.[0].url ?? detail.media_url_https) }] : []) ?? [] })) ?? []
これも入れましたtakker
bitrateが0のやつ見つけたけど眠いので今日はやらないwogikaze
variants.filter(variant => variant.content_type.startsWith("video")) でいけそうtakker

オマケ2
メディアがあったときに入る謎の空行
これはメディアの後にテキストがあるのかどうか判定するときにミスっているぽい
なんかミスってる気がするので訂正
なんかうまいこと単体テスト入れてPR書いてくれるとうれし~takker
自分はもうおやすみする時間なので
おやすもwogikaze
テストケースの追加方法は#33を参照
snapshot testは
$ deno test --allow-read --allow-write -- -u
で更新できる
生成されたsnapshot通りになるかどうかは
$ deno test --allow-read
で確認できる

修正助かります!yosider