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!
https://pbs.twimg.com/media/F564jbGX0AYZKrg.png
Y
最後の行にYが入っている
これ例としてよくないな...wogikaze.icon
<が展開できていないのも含んでいる
後で調べる
期待する展開
🚨 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!
https://pbs.twimg.com/media/F564jbGX0AYZKrg.png
原因
https://code2svg.vercel.app/svg/L92-104/https://raw.githubusercontent.com/takker99/scrapbox-url-customizer/456c3fcb1bce21e5b73f873d81bfda5089b0c3ae/internal/processTweet.ts#.svg https://github.com/takker99/scrapbox-url-customizer/blob/456c3fcb1bce21e5b73f873d81bfda5089b0c3ae/internal/processTweet.ts#L92
tweet.textはツイートの文章(短縮リンクやハッシュタグを含む)
text.slice()で要素ごとに分割しているが絵文字が含まれると正しく取り出せない
code:js
const unicodeSubstring = (str, start, end) => {
const reg = new RegExp(^[\\s\\S]{${start}}([\\s\\S]{0,${end - start}}), 'u')
}
unicodeSubstring(tweet.text,indices0 - 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. <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. <3 Enjoy!"
text:''
あっ………………………………………………………………………………………………………………………………………………………takker.icon
こっちのほうがスマートでGOODwogikaze.icon
こんな文字は「しらんがな」です
絵文字の闇すぎるから困ったときに直そう...wogikaze.icon 🚨 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!
https://pbs.twimg.com/media/F564jbGX0AYZKrg.png
オマケ:<について
便利そうなので取り込みますtakker.icon
旧
&quot;"""クォーテーション&amp;"&"アンパサンド&lt;"<"小なり&gt;">"大なり&nbsp;" "空白&copy;"©"コピーライト
テスト
新
""""クォーテーション&"&"アンパサンド<"<"小なり>">"大なり " "空白©"©"コピーライト
テスト
テスト
Paris 🍷🥖
https://pbs.twimg.com/media/FeOZYI7aAAAsObU.jpg https://pbs.twimg.com/media/FeOZYJAakAAZLHP.jpg
Paris 🍷🥖
https://pbs.twimg.com/media/FeOiU7UakAAFWy8.jpg https://video.twimg.com/ext_tw_video/1577282774926778374/pu/pl/u6Ym3TTgqR5gZ82E.m3u8?tag=12&container=fmp4&v=b24#.mp4
https://video.twimg.com/ext_tw_video/1577282774922588160/pu/pl/mCNp6j4WjNav3Zss.m3u8?tag=12&container=fmp4#.mp4 https://pbs.twimg.com/media/FeOiU7VacAARf4W.jpg
動画が表示できなくなってる...
code: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.icon
bitrateが0のやつ見つけたけど眠いので今日はやらないwogikaze.icon
variants.filter(variant => variant.content_type.startsWith("video"))でいけそうtakker.icon
オマケ2
メディアがあったときに入る謎の空行
これはメディアの後にテキストがあるのかどうか判定するときにミスっているぽい
https://code2svg.vercel.app/svg/L106/https://raw.githubusercontent.com/takker99/scrapbox-url-customizer/b3dd429d5a43c6f5bd34f8427b63cca181fe301f/internal/processTweet.ts#.svg https://github.com/takker99/scrapbox-url-customizer/blob/b3dd429d5a43c6f5bd34f8427b63cca181fe301f/internal/processTweet.ts#L106C73-L106C73
なんかミスってる気がするので訂正
なんかうまいこと単体テスト入れてPR書いてくれるとうれし~takker.icon
自分はもうおやすみする時間なので
おやすもwogikaze.icon
snapshot testは
$ deno test --allow-read --allow-write -- -u
で更新できる
生成されたsnapshot通りになるかどうかは
$ deno test --allow-read
で確認できる
修正助かります!yosider.icon