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 {
Core struct {
RestID string `json:"rest_id"`
Core struct {
UserResults struct {
Result struct {
IsBlueVerified bool `json:"is_blue_verified"`

View file

@ -20,29 +20,38 @@ type newTweet struct {
Data struct {
CreateTweet struct {
TweetResults struct {
Result tweet `json:"result"`
Result result `json:"result"`
} `json:"tweet_results"`
} `json:"create_tweet"`
} `json:"data"`
}
func (newTweet *newTweet) parse() *Tweet {
var tweet = &newTweet.Data.CreateTweet.TweetResults.Result
r := &newTweet.Data.CreateTweet.TweetResults.Result
if tweet.NoteTweet.NoteTweetResults.Result.Text != "" {
tweet.Legacy.FullText = tweet.NoteTweet.NoteTweetResults.Result.Text
t := &r.tweet
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)
if tw == nil {
return nil
}
if tw.Views == 0 && tweet.Views.Count != "" {
tw.Views, _ = strconv.Atoi(tweet.Views.Count)
if tw.Views == 0 && t.Views.Count != "" {
tw.Views, _ = strconv.Atoi(t.Views.Count)
}
if tweet.QuotedStatusResult.Result != nil {
tw.QuotedStatus = tweet.QuotedStatusResult.Result.parse()
if t.QuotedStatusResult.Result != nil {
tw.QuotedStatus = t.QuotedStatusResult.Result.parse()
}
return tw
}