mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-06-05 22:39:13 +02:00
some more code cleanup
This commit is contained in:
parent
76e8ab80a5
commit
17606e756b
@ -1,18 +1,14 @@
|
|||||||
# DATABASE LOGIC
|
# DATABASE LOGIC
|
||||||
import json
|
import json
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
from sqlite3 import Error
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
|
||||||
from logging import Filter
|
from logging import Filter
|
||||||
|
from sqlite3 import Error
|
||||||
|
|
||||||
|
from nostr_sdk import Timestamp, Keys, PublicKey, Filter, Kind
|
||||||
from nostr_sdk import Timestamp, Keys, PublicKey, EventBuilder, Filter, Kind
|
|
||||||
|
|
||||||
from nostr_dvm.utils.definitions import relay_timeout
|
from nostr_dvm.utils.definitions import relay_timeout
|
||||||
|
from nostr_dvm.utils.nostr_utils import send_nip04_dm
|
||||||
from nostr_dvm.utils.nostr_utils import send_event, send_nip04_dm
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -190,17 +186,15 @@ async def update_user_balance(db, npub, additional_sats, client, config, giftwra
|
|||||||
|
|
||||||
if config is not None:
|
if config is not None:
|
||||||
keys = Keys.parse(config.PRIVATE_KEY)
|
keys = Keys.parse(config.PRIVATE_KEY)
|
||||||
# time.sleep(1.0)
|
|
||||||
|
|
||||||
message = ("Added " + str(additional_sats) + " Sats to balance. New balance is " + str(
|
message = ("Added " + str(additional_sats) + " Sats to balance. New balance is " + str(
|
||||||
new_balance) + " Sats.")
|
new_balance) + " Sats.")
|
||||||
|
|
||||||
if giftwrap:
|
# always send giftwrapped. sorry not sorry.
|
||||||
await client.send_private_msg(PublicKey.parse(npub), message, None)
|
#if giftwrap:
|
||||||
else:
|
await client.send_private_msg(PublicKey.parse(npub), message, None)
|
||||||
#await client.send_direct_msg(PublicKey.parse(npub), message, None)
|
#else:
|
||||||
#await client.send_private_msg(PublicKey.parse(npub), message, None)
|
# await send_nip04_dm(client, message, PublicKey.parse(npub), config)
|
||||||
await send_nip04_dm(client, message, PublicKey.parse(npub), config)
|
|
||||||
|
|
||||||
|
|
||||||
def update_user_subscription(npub, subscribed_until, client, dvm_config):
|
def update_user_subscription(npub, subscribed_until, client, dvm_config):
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import os
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
@ -63,7 +62,6 @@ class EventDefinitions:
|
|||||||
KIND_NIP88_TIER_EVENT = Kind(37001)
|
KIND_NIP88_TIER_EVENT = Kind(37001)
|
||||||
KIND_NUT_WALLET = Kind(37375)
|
KIND_NUT_WALLET = Kind(37375)
|
||||||
|
|
||||||
|
|
||||||
ANY_RESULT = [KIND_NIP90_RESULT_EXTRACT_TEXT,
|
ANY_RESULT = [KIND_NIP90_RESULT_EXTRACT_TEXT,
|
||||||
KIND_NIP90_RESULT_SUMMARIZE_TEXT,
|
KIND_NIP90_RESULT_SUMMARIZE_TEXT,
|
||||||
KIND_NIP90_RESULT_TRANSLATE_TEXT,
|
KIND_NIP90_RESULT_TRANSLATE_TEXT,
|
||||||
@ -97,6 +95,7 @@ class RequiredJobToWatch:
|
|||||||
event: Event
|
event: Event
|
||||||
timestamp: int
|
timestamp: int
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class InvoiceToWatch:
|
class InvoiceToWatch:
|
||||||
sender: str
|
sender: str
|
||||||
@ -108,4 +107,4 @@ class InvoiceToWatch:
|
|||||||
|
|
||||||
|
|
||||||
relay_timeout = EventSource.relays(timedelta(seconds=5))
|
relay_timeout = EventSource.relays(timedelta(seconds=5))
|
||||||
relay_timeout_long = EventSource.relays(timedelta(seconds=10))
|
relay_timeout_long = EventSource.relays(timedelta(seconds=10))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from nostr_sdk import Keys, LogLevel, PublicKey
|
from nostr_sdk import Keys, LogLevel
|
||||||
|
|
||||||
from nostr_dvm.utils.nip88_utils import NIP88Config
|
from nostr_dvm.utils.nip88_utils import NIP88Config
|
||||||
from nostr_dvm.utils.nip89_utils import NIP89Config
|
from nostr_dvm.utils.nip89_utils import NIP89Config
|
||||||
@ -8,6 +8,7 @@ from nostr_dvm.utils.nostr_utils import check_and_set_private_key
|
|||||||
from nostr_dvm.utils.outbox_utils import AVOID_OUTBOX_RELAY_LIST
|
from nostr_dvm.utils.outbox_utils import AVOID_OUTBOX_RELAY_LIST
|
||||||
from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys
|
from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys
|
||||||
|
|
||||||
|
|
||||||
class DVMConfig:
|
class DVMConfig:
|
||||||
SUPPORTED_DVMS = []
|
SUPPORTED_DVMS = []
|
||||||
PRIVATE_KEY: str = ""
|
PRIVATE_KEY: str = ""
|
||||||
@ -21,24 +22,22 @@ class DVMConfig:
|
|||||||
]
|
]
|
||||||
|
|
||||||
RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev",
|
RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev",
|
||||||
"wss://relay.nostr.net" , "wss://relay.primal.net"]
|
"wss://relay.nostr.net", "wss://relay.primal.net"]
|
||||||
|
|
||||||
# Straight Censorship (reply guy spam)
|
# Straight Censorship (reply guy spam)
|
||||||
WOT_FILTERING = False
|
WOT_FILTERING = False
|
||||||
WOT_BASED_ON_NPUBS = ["99bb5591c9116600f845107d31f9b59e2f7c7e09a1ff802e84f1d43da557ca64",
|
WOT_BASED_ON_NPUBS = ["99bb5591c9116600f845107d31f9b59e2f7c7e09a1ff802e84f1d43da557ca64",
|
||||||
"460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c",
|
"460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c",
|
||||||
"3f770d65d3a764a9c5cb503ae123e62ec7598ad035d836e2a810f3877a745b24"
|
"3f770d65d3a764a9c5cb503ae123e62ec7598ad035d836e2a810f3877a745b24"
|
||||||
]
|
]
|
||||||
WOT_DEPTH = 2
|
WOT_DEPTH = 2
|
||||||
|
|
||||||
|
|
||||||
AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST
|
AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST
|
||||||
#If a DVM has a paid subscription, overwrite list without the paid one.
|
# If a DVM has a paid subscription, overwrite list without the paid one.
|
||||||
|
|
||||||
|
|
||||||
RELAY_TIMEOUT = 5
|
RELAY_TIMEOUT = 5
|
||||||
RELAY_LONG_TIMEOUT = 30
|
RELAY_LONG_TIMEOUT = 30
|
||||||
EXTERNAL_POST_PROCESS_TYPE = 0 # Leave this on None, except the DVM is external
|
EXTERNAL_POST_PROCESS_TYPE = 0 # Leave this on None, except the DVM is external
|
||||||
LNBITS_INVOICE_KEY = '' # Will all automatically generated by default, or read from .env
|
LNBITS_INVOICE_KEY = '' # Will all automatically generated by default, or read from .env
|
||||||
LNBITS_ADMIN_KEY = '' # In order to pay invoices, e.g. from the bot to DVMs, or reimburse users.
|
LNBITS_ADMIN_KEY = '' # In order to pay invoices, e.g. from the bot to DVMs, or reimburse users.
|
||||||
LNBITS_URL = 'https://lnbits.com'
|
LNBITS_URL = 'https://lnbits.com'
|
||||||
|
@ -24,7 +24,7 @@ async def build_client(config):
|
|||||||
|
|
||||||
|
|
||||||
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
|
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
|
||||||
external_post_process=PostProcessFunctionType.NONE):
|
external_post_process=PostProcessFunctionType.NONE):
|
||||||
dvm_config = DVMConfig()
|
dvm_config = DVMConfig()
|
||||||
dvm_config.PUBLIC_KEY = PublicKey.from_hex(pubkey).to_hex()
|
dvm_config.PUBLIC_KEY = PublicKey.from_hex(pubkey).to_hex()
|
||||||
dvm_config.FIX_COST = fix_cost
|
dvm_config.FIX_COST = fix_cost
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
from nostr_sdk import Tag, Keys, EventBuilder, Kind
|
from nostr_sdk import Keys, EventBuilder, Kind
|
||||||
|
|
||||||
from nostr_dvm.utils.nostr_utils import send_event
|
from nostr_dvm.utils.nostr_utils import send_event
|
||||||
from nostr_dvm.utils.print_utils import bcolors
|
from nostr_dvm.utils.print_utils import bcolors
|
||||||
|
|
||||||
|
|
||||||
async def gallery_announce_list(tags, dvm_config, client):
|
async def gallery_announce_list(tags, dvm_config, client):
|
||||||
|
|
||||||
|
|
||||||
keys = Keys.parse(dvm_config.NIP89.PK)
|
keys = Keys.parse(dvm_config.NIP89.PK)
|
||||||
content = ""
|
content = ""
|
||||||
event = EventBuilder(Kind(10011), content, tags).to_event(keys)
|
event = EventBuilder(Kind(10011), content, tags).to_event(keys)
|
||||||
eventid = await send_event(event, client=client, dvm_config=dvm_config, blastr=True)
|
eventid = await send_event(event, client=client, dvm_config=dvm_config, blastr=True)
|
||||||
|
|
||||||
print(bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced Gallery for " + dvm_config.NIP89.NAME +" (EventID: " + str(eventid.to_hex()) +")" + bcolors.ENDC)
|
print(
|
||||||
|
bcolors.BLUE + "[" + dvm_config.NIP89.NAME + "] Announced Gallery for " + dvm_config.NIP89.NAME + " (EventID: " + str(
|
||||||
|
eventid.to_hex()) + ")" + bcolors.ENDC)
|
||||||
|
@ -2,9 +2,10 @@ import os
|
|||||||
import urllib
|
import urllib
|
||||||
from datetime import time
|
from datetime import time
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
import ffmpegio
|
|
||||||
|
|
||||||
|
import ffmpegio
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from nostr_dvm.utils.nostr_utils import get_event_by_id
|
from nostr_dvm.utils.nostr_utils import get_event_by_id
|
||||||
from nostr_dvm.utils.scrapper.media_scrapper import YTDownload, get_media_duration
|
from nostr_dvm.utils.scrapper.media_scrapper import YTDownload, get_media_duration
|
||||||
|
|
||||||
|
@ -5,14 +5,15 @@ from collections import namedtuple
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from nostr_sdk import Tag, Keys, nip44_encrypt, nip44_decrypt, Nip44Version, EventBuilder, Client, Filter, Kind, \
|
||||||
|
EventId, nip04_decrypt, nip04_encrypt, Options, NostrSigner, PublicKey, Metadata
|
||||||
|
|
||||||
from nostr_dvm.utils.database_utils import fetch_user_metadata
|
from nostr_dvm.utils.database_utils import fetch_user_metadata
|
||||||
from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout, relay_timeout_long
|
from nostr_dvm.utils.definitions import EventDefinitions, relay_timeout, relay_timeout_long
|
||||||
from nostr_dvm.utils.dvmconfig import DVMConfig
|
from nostr_dvm.utils.dvmconfig import DVMConfig
|
||||||
from nostr_dvm.utils.nostr_utils import check_and_set_private_key
|
from nostr_dvm.utils.nostr_utils import check_and_set_private_key
|
||||||
from nostr_dvm.utils.zap_utils import pay_bolt11_ln_bits, zaprequest
|
|
||||||
from nostr_sdk import Tag, Keys, nip44_encrypt, nip44_decrypt, Nip44Version, EventBuilder, Client, Filter, Kind, \
|
|
||||||
EventId, nip04_decrypt, nip04_encrypt, Options, NostrSigner, PublicKey, init_logger, LogLevel, Metadata
|
|
||||||
from nostr_dvm.utils.print_utils import bcolors
|
from nostr_dvm.utils.print_utils import bcolors
|
||||||
|
from nostr_dvm.utils.zap_utils import pay_bolt11_ln_bits, zaprequest
|
||||||
|
|
||||||
|
|
||||||
class NutWallet(object):
|
class NutWallet(object):
|
||||||
@ -29,7 +30,7 @@ class NutWallet(object):
|
|||||||
self.a: str = ""
|
self.a: str = ""
|
||||||
self.legacy_encryption: bool = False # Use Nip04 instead of Nip44, for reasons, turn to False ASAP.
|
self.legacy_encryption: bool = False # Use Nip04 instead of Nip44, for reasons, turn to False ASAP.
|
||||||
self.trust_unknown_mints: bool = False
|
self.trust_unknown_mints: bool = False
|
||||||
self.missing_balance_strategy: str = "mint" #none to do nothing until manually minted, mint to mint from lightning or swap to use existing tokens from other mints (fees!) (not working yet!)
|
self.missing_balance_strategy: str = "mint" # none to do nothing until manually minted, mint to mint from lightning or swap to use existing tokens from other mints (fees!) (not working yet!)
|
||||||
|
|
||||||
|
|
||||||
class NutMint(object):
|
class NutMint(object):
|
||||||
@ -120,7 +121,7 @@ class NutZapWallet:
|
|||||||
nut_wallet = None
|
nut_wallet = None
|
||||||
|
|
||||||
wallet_filter = Filter().kind(EventDefinitions.KIND_NUT_WALLET).author(keys.public_key())
|
wallet_filter = Filter().kind(EventDefinitions.KIND_NUT_WALLET).author(keys.public_key())
|
||||||
#relay_timeout = EventSource.relays(timedelta(seconds=10))
|
# relay_timeout = EventSource.relays(timedelta(seconds=10))
|
||||||
wallets = await client.get_events_of([wallet_filter], relay_timeout_long)
|
wallets = await client.get_events_of([wallet_filter], relay_timeout_long)
|
||||||
|
|
||||||
if len(wallets) > 0:
|
if len(wallets) > 0:
|
||||||
@ -195,7 +196,7 @@ class NutZapWallet:
|
|||||||
|
|
||||||
# Now all proof events
|
# Now all proof events
|
||||||
proof_filter = Filter().kind(Kind(7375)).author(keys.public_key())
|
proof_filter = Filter().kind(Kind(7375)).author(keys.public_key())
|
||||||
#relay_timeout = EventSource.relays(timedelta(seconds=5))
|
# relay_timeout = EventSource.relays(timedelta(seconds=5))
|
||||||
proof_events = await client.get_events_of([proof_filter], relay_timeout)
|
proof_events = await client.get_events_of([proof_filter], relay_timeout)
|
||||||
|
|
||||||
latest_proof_sec = 0
|
latest_proof_sec = 0
|
||||||
@ -449,7 +450,7 @@ class NutZapWallet:
|
|||||||
|
|
||||||
async def fetch_mint_info_event(self, pubkey, client):
|
async def fetch_mint_info_event(self, pubkey, client):
|
||||||
mint_info_filter = Filter().kind(Kind(10019)).author(PublicKey.parse(pubkey))
|
mint_info_filter = Filter().kind(Kind(10019)).author(PublicKey.parse(pubkey))
|
||||||
#relay_timeout = EventSource.relays(timedelta(seconds=5))
|
# relay_timeout = EventSource.relays(timedelta(seconds=5))
|
||||||
preferences = await client.get_events_of([mint_info_filter], relay_timeout)
|
preferences = await client.get_events_of([mint_info_filter], relay_timeout)
|
||||||
mints = []
|
mints = []
|
||||||
relays = []
|
relays = []
|
||||||
@ -778,12 +779,11 @@ class NutZapWallet:
|
|||||||
+ bcolors.ENDC)
|
+ bcolors.ENDC)
|
||||||
|
|
||||||
async def swap(self, amountinsats, incoming_mint_url, outgoing_mint_url, nut_wallet):
|
async def swap(self, amountinsats, incoming_mint_url, outgoing_mint_url, nut_wallet):
|
||||||
#TODO this doesn't seem to work yet.
|
# TODO this doesn't seem to work yet.
|
||||||
from cashu.wallet.cli.cli_helpers import print_mint_balances
|
from cashu.wallet.cli.cli_helpers import print_mint_balances
|
||||||
from cashu.wallet.wallet import Wallet
|
from cashu.wallet.wallet import Wallet
|
||||||
from cashu.core.crypto.keys import PrivateKey
|
from cashu.core.crypto.keys import PrivateKey
|
||||||
|
|
||||||
|
|
||||||
outgoing_mint = self.get_mint(nut_wallet, outgoing_mint_url)
|
outgoing_mint = self.get_mint(nut_wallet, outgoing_mint_url)
|
||||||
|
|
||||||
outgoing_wallet = await Wallet.with_db(
|
outgoing_wallet = await Wallet.with_db(
|
||||||
@ -797,7 +797,6 @@ class NutZapWallet:
|
|||||||
|
|
||||||
print(outgoing_wallet.available_balance)
|
print(outgoing_wallet.available_balance)
|
||||||
|
|
||||||
|
|
||||||
incoming_mint = self.get_mint(nut_wallet, incoming_mint_url)
|
incoming_mint = self.get_mint(nut_wallet, incoming_mint_url)
|
||||||
incoming_wallet = await Wallet.with_db(
|
incoming_wallet = await Wallet.with_db(
|
||||||
url=incoming_mint_url,
|
url=incoming_mint_url,
|
||||||
@ -808,8 +807,6 @@ class NutZapWallet:
|
|||||||
await incoming_wallet.load_mint()
|
await incoming_wallet.load_mint()
|
||||||
incoming_wallet.proofs = incoming_mint.proofs
|
incoming_wallet.proofs = incoming_mint.proofs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if incoming_wallet.url == outgoing_wallet.url:
|
if incoming_wallet.url == outgoing_wallet.url:
|
||||||
raise Exception("mints for swap have to be different")
|
raise Exception("mints for swap have to be different")
|
||||||
|
|
||||||
|
@ -19,8 +19,6 @@ async def create_reaction(keys, title, dtag):
|
|||||||
emoji_tag1 = Tag.parse(["emoji", name, url])
|
emoji_tag1 = Tag.parse(["emoji", name, url])
|
||||||
emoji_tags.append(emoji_tag1)
|
emoji_tags.append(emoji_tag1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
keys = Keys.parse(keys)
|
keys = Keys.parse(keys)
|
||||||
content = ""
|
content = ""
|
||||||
event = EventBuilder(Kind(30030), content, [d_tag, title_tag] + emoji_tags).to_event(keys)
|
event = EventBuilder(Kind(30030), content, [d_tag, title_tag] + emoji_tags).to_event(keys)
|
||||||
@ -65,4 +63,4 @@ keys = check_and_set_private_key("test_client")
|
|||||||
eventid = "da05cefc512ad43363f84131343f5d2a80303ea3b9368b9ad7f010e07db37d90"
|
eventid = "da05cefc512ad43363f84131343f5d2a80303ea3b9368b9ad7f010e07db37d90"
|
||||||
|
|
||||||
asyncio.run(create_reaction(keys=keys, title="ThugAmy", dtag="ThugAmy"))
|
asyncio.run(create_reaction(keys=keys, title="ThugAmy", dtag="ThugAmy"))
|
||||||
#asyncio.run(delete_reaction(keys=keys, eid=eventid, dtag="ThugAmy"))
|
# asyncio.run(delete_reaction(keys=keys, eid=eventid, dtag="ThugAmy"))
|
||||||
|
@ -1,40 +1,40 @@
|
|||||||
{
|
{
|
||||||
"features": {
|
"features": {
|
||||||
"responsive_web_graphql_exclude_directive_enabled": true,
|
"responsive_web_graphql_exclude_directive_enabled": true,
|
||||||
"verified_phone_label_enabled": false,
|
"verified_phone_label_enabled": false,
|
||||||
"responsive_web_graphql_timeline_navigation_enabled": true,
|
"responsive_web_graphql_timeline_navigation_enabled": true,
|
||||||
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
"responsive_web_graphql_skip_user_profile_image_extensions_enabled": false,
|
||||||
"tweetypie_unmention_optimization_enabled": true,
|
"tweetypie_unmention_optimization_enabled": true,
|
||||||
"vibe_api_enabled": false,
|
"vibe_api_enabled": false,
|
||||||
"responsive_web_edit_tweet_api_enabled": false,
|
"responsive_web_edit_tweet_api_enabled": false,
|
||||||
"graphql_is_translatable_rweb_tweet_is_translatable_enabled": false,
|
"graphql_is_translatable_rweb_tweet_is_translatable_enabled": false,
|
||||||
"view_counts_everywhere_api_enabled": true,
|
"view_counts_everywhere_api_enabled": true,
|
||||||
"longform_notetweets_consumption_enabled": true,
|
"longform_notetweets_consumption_enabled": true,
|
||||||
"tweet_awards_web_tipping_enabled": false,
|
"tweet_awards_web_tipping_enabled": false,
|
||||||
"freedom_of_speech_not_reach_fetch_enabled": false,
|
"freedom_of_speech_not_reach_fetch_enabled": false,
|
||||||
"standardized_nudges_misinfo": false,
|
"standardized_nudges_misinfo": false,
|
||||||
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled": false,
|
||||||
"interactive_text_enabled": false,
|
"interactive_text_enabled": false,
|
||||||
"responsive_web_twitter_blue_verified_badge_is_enabled": true,
|
"responsive_web_twitter_blue_verified_badge_is_enabled": true,
|
||||||
"responsive_web_text_conversations_enabled": false,
|
"responsive_web_text_conversations_enabled": false,
|
||||||
"longform_notetweets_richtext_consumption_enabled": false,
|
"longform_notetweets_richtext_consumption_enabled": false,
|
||||||
"responsive_web_enhance_cards_enabled": false,
|
"responsive_web_enhance_cards_enabled": false,
|
||||||
"longform_notetweets_inline_media_enabled": true,
|
"longform_notetweets_inline_media_enabled": true,
|
||||||
"longform_notetweets_rich_text_read_enabled": true,
|
"longform_notetweets_rich_text_read_enabled": true,
|
||||||
"responsive_web_media_download_video_enabled": true,
|
"responsive_web_media_download_video_enabled": true,
|
||||||
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
"responsive_web_twitter_article_tweet_consumption_enabled": true,
|
||||||
"creator_subscriptions_tweet_preview_api_enabled": true
|
"creator_subscriptions_tweet_preview_api_enabled": true
|
||||||
},
|
},
|
||||||
"variables": {
|
"variables": {
|
||||||
"with_rux_injections": false,
|
"with_rux_injections": false,
|
||||||
"includePromotedContent": true,
|
"includePromotedContent": true,
|
||||||
"withCommunity": true,
|
"withCommunity": true,
|
||||||
"withQuickPromoteEligibilityTweetFields": true,
|
"withQuickPromoteEligibilityTweetFields": true,
|
||||||
"withBirdwatchNotes": true,
|
"withBirdwatchNotes": true,
|
||||||
"withDownvotePerspective": false,
|
"withDownvotePerspective": false,
|
||||||
"withReactionsMetadata": false,
|
"withReactionsMetadata": false,
|
||||||
"withReactionsPerspective": false,
|
"withReactionsPerspective": false,
|
||||||
"withVoice": true,
|
"withVoice": true,
|
||||||
"withV2Timeline": true
|
"withV2Timeline": true
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user