If a scraped tweet has tombstone type 'suspended', then the user should be marked as banned during reply-joining
This commit is contained in:
parent
acf903d16a
commit
1e09477a5e
@ -557,6 +557,8 @@ func (e APIV2Entry) ToTweetTrove() TweetTrove {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We don't have any user info yet. We may be able to reconstruct some later with reply-joining
|
||||||
|
// But for now, it's just "Unknown User"
|
||||||
fake_user := GetUnknownUser()
|
fake_user := GetUnknownUser()
|
||||||
ret.Users[fake_user.ID] = fake_user
|
ret.Users[fake_user.ID] = fake_user
|
||||||
parsed_tombstone_tweet.UserID = fake_user.ID
|
parsed_tombstone_tweet.UserID = fake_user.ID
|
||||||
@ -784,8 +786,10 @@ func (api_response APIV2Response) ToTweetTrove() (TweetTrove, error) {
|
|||||||
if replied_tweet.UserID == 0 || replied_tweet.UserID == GetUnknownUser().ID {
|
if replied_tweet.UserID == 0 || replied_tweet.UserID == GetUnknownUser().ID {
|
||||||
replied_tweet.UserID = tweet.InReplyToUserID
|
replied_tweet.UserID = tweet.InReplyToUserID
|
||||||
if replied_tweet.UserID == 0 || replied_tweet.UserID == GetUnknownUser().ID {
|
if replied_tweet.UserID == 0 || replied_tweet.UserID == GetUnknownUser().ID {
|
||||||
|
// We know absolutely nothing about them; can't determine a UserID or handle
|
||||||
|
// Create a dummy user just so the Tweet will have a non-0 user ID.
|
||||||
fake_user := GetUnknownUser()
|
fake_user := GetUnknownUser()
|
||||||
ret.Users[fake_user.ID] = fake_user
|
ret.Users[fake_user.ID] = fake_user // Make sure the dummy user appears in the Trove
|
||||||
replied_tweet.UserID = fake_user.ID
|
replied_tweet.UserID = fake_user.ID
|
||||||
}
|
}
|
||||||
} // replied_tweet.UserID should now be a real UserID
|
} // replied_tweet.UserID should now be a real UserID
|
||||||
@ -797,6 +801,11 @@ func (api_response APIV2Response) ToTweetTrove() (TweetTrove, error) {
|
|||||||
if existing_user.Handle == "" {
|
if existing_user.Handle == "" {
|
||||||
existing_user.Handle = tweet.InReplyToUserHandle
|
existing_user.Handle = tweet.InReplyToUserHandle
|
||||||
}
|
}
|
||||||
|
// If the replied tweet is a "user was suspended" tombstone, it can be inferred that the
|
||||||
|
// user must be suspended
|
||||||
|
if replied_tweet.TombstoneType == "suspended" {
|
||||||
|
existing_user.IsBanned = true
|
||||||
|
}
|
||||||
ret.Users[replied_tweet.UserID] = existing_user
|
ret.Users[replied_tweet.UserID] = existing_user
|
||||||
ret.TombstoneUsers = append(ret.TombstoneUsers, existing_user.Handle)
|
ret.TombstoneUsers = append(ret.TombstoneUsers, existing_user.Handle)
|
||||||
|
|
||||||
|
@ -1013,3 +1013,36 @@ func TestNoFailOnComposerEntryInRegularThread(t *testing.T) {
|
|||||||
|
|
||||||
assert.Len(trove.Tweets, 3)
|
assert.Len(trove.Tweets, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test a thread with a banned user
|
||||||
|
func TestParseTweetThreadWithBannedUser(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
require := require.New(t)
|
||||||
|
data, err := os.ReadFile("test_responses/api_v2/tweet_from_banned_user.json")
|
||||||
|
require.NoError(err)
|
||||||
|
var api_response APIV2Response
|
||||||
|
err = json.Unmarshal(data, &api_response)
|
||||||
|
require.NoError(err)
|
||||||
|
|
||||||
|
trove, err := api_response.ToTweetTrove()
|
||||||
|
require.NoError(err)
|
||||||
|
|
||||||
|
assert.Len(trove.Tweets, 6)
|
||||||
|
banned_tweet1, is_ok := trove.Tweets[1709579269247234284]
|
||||||
|
assert.True(is_ok)
|
||||||
|
assert.True(banned_tweet1.IsStub)
|
||||||
|
assert.Equal(banned_tweet1.UserID, UserID(1595500307374829568))
|
||||||
|
assert.Equal(banned_tweet1.TombstoneType, "suspended")
|
||||||
|
|
||||||
|
banned_tweet2, is_ok := trove.Tweets[1709580398026805736]
|
||||||
|
assert.True(is_ok)
|
||||||
|
assert.True(banned_tweet2.IsStub)
|
||||||
|
assert.Equal(banned_tweet2.UserID, UserID(1595500307374829568))
|
||||||
|
assert.Equal(banned_tweet2.TombstoneType, "suspended")
|
||||||
|
|
||||||
|
// assert.Len(trove.Users, 3)
|
||||||
|
banned_user, is_ok := trove.Users[1595500307374829568]
|
||||||
|
assert.True(is_ok)
|
||||||
|
assert.Equal(banned_user.Handle, UserHandle("spandrell3"))
|
||||||
|
assert.True(banned_user.IsBanned)
|
||||||
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user