fix: handle TweetWithVisibilityResults and rest_id fallback in CreateTweet response

This commit is contained in:
Lain Iwakura 2026-05-21 20:39:28 +03:00
parent 9d847cd18e
commit d5a47d4a67
Signed by: lain
GPG key ID: 8160466B2E8D1441
2 changed files with 21 additions and 11 deletions

View file

@ -7,7 +7,8 @@ import (
) )
type tweet struct { type tweet struct {
Core struct { RestID string `json:"rest_id"`
Core struct {
UserResults struct { UserResults struct {
Result struct { Result struct {
IsBlueVerified bool `json:"is_blue_verified"` IsBlueVerified bool `json:"is_blue_verified"`

View file

@ -20,29 +20,38 @@ type newTweet struct {
Data struct { Data struct {
CreateTweet struct { CreateTweet struct {
TweetResults struct { TweetResults struct {
Result tweet `json:"result"` Result result `json:"result"`
} `json:"tweet_results"` } `json:"tweet_results"`
} `json:"create_tweet"` } `json:"create_tweet"`
} `json:"data"` } `json:"data"`
} }
func (newTweet *newTweet) parse() *Tweet { func (newTweet *newTweet) parse() *Tweet {
var tweet = &newTweet.Data.CreateTweet.TweetResults.Result r := &newTweet.Data.CreateTweet.TweetResults.Result
if tweet.NoteTweet.NoteTweetResults.Result.Text != "" { t := &r.tweet
tweet.Legacy.FullText = tweet.NoteTweet.NoteTweetResults.Result.Text if r.Typename == "TweetWithVisibilityResults" {
t = &r.Tweet
} }
var legacy *legacyTweet = &tweet.Legacy
var user *legacyUser = &tweet.Core.UserResults.Result.Legacy if t.RestID != "" && t.Legacy.IDStr == "" {
t.Legacy.IDStr = t.RestID
}
if t.NoteTweet.NoteTweetResults.Result.Text != "" {
t.Legacy.FullText = t.NoteTweet.NoteTweetResults.Result.Text
}
var legacy *legacyTweet = &t.Legacy
var user *legacyUser = &t.Core.UserResults.Result.Legacy
tw := parseLegacyTweet(user, legacy) tw := parseLegacyTweet(user, legacy)
if tw == nil { if tw == nil {
return nil return nil
} }
if tw.Views == 0 && tweet.Views.Count != "" { if tw.Views == 0 && t.Views.Count != "" {
tw.Views, _ = strconv.Atoi(tweet.Views.Count) tw.Views, _ = strconv.Atoi(t.Views.Count)
} }
if tweet.QuotedStatusResult.Result != nil { if t.QuotedStatusResult.Result != nil {
tw.QuotedStatus = tweet.QuotedStatusResult.Result.parse() tw.QuotedStatus = t.QuotedStatusResult.Result.parse()
} }
return tw return tw
} }