Giter Club home page Giter Club logo

-'s People

Watchers

神卜凡 avatar

-'s Issues

李跳跳自定义规则

https://github.com/Snoopy1866/LiTiaotiao-Custom-Rules

规则如下:

[
{
"-1835777899": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"common_confirm_dialog_center_layout","action":"common_confirm_dialog_cancel"},{"id":"打开定位","action":"我知道了"},{"id":"及时获取&消息","action":"取消"},{"id":"tv_love_sub_title","action":"iv_close_love_tips"},{"id":"打开通知","action":"iv_notice_close"}]}"
},
{
"320552729": "{"popup_rules":[{"id":"立即更新","action":"稍后更新"}]}"
},
{
"-330301876": "{"popup_rules":[{"id":"native_ad_container","action":"topon_btn_close"},{"id":"csj_ad_logo","action":"csj_btn_close"},{"id":"| 跳过","action":"| 跳过"},{"id":"再看&可领奖励","action":"坚持退出"}],"click_way_popup":1}"
},
{
"2130042610": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"1386065562": "{"popup_rules":[{"id":"init_top_img","action":"init_time_text"}]}"
},
{
"960022320": "{"popup_rules":[{"id":"给您发送通知","action":"不接收"}]}"
},
{
"361910168": "{"popup_rules":[{"id":"lpk","action":"关闭"},{"id":"=广告","action":"=更多"},{"id":"=关闭此条广告","action":"=关闭此条广告"},{"id":"=立即前往","action":"close"}]}"
},
{
"-1518567568": "{"popup_rules":[{"id":"请评价我们的产品","action":"下次再说"}]}"
},
{
"239830085": "{"popup_rules":[{"id":"发现新版本","action":"稍后更新"},{"id":"限时&星币购买","action":"GLOBAL_ACTION_BACK"},{"id":"关注我","action":"b3p"},{"id":"推送通知&开启","action":"dhf"}]}"
},
{
"706813998": "{"popup_rules":[{"id":"打开推送通知","action":"暂不开启"},{"id":"开启通知权限","action":"取消"},{"id":"打开通知权限","action":"暂不开启"},{"id":"main_iv_limit_confirm","action":"main_iv_limit_close"},{"id":"host_lockscreen_guide_alert_dialog_rich_confirm_title_tv","action":"host_lockscreen_guide_alert_dialog_rich_confirm_cancel_btn"},{"id":"host_layout_vote_title","action":"host_timeline_card_close"},{"id":"main_x_play_anchor_shop_cover","action":"main_x_play_anchor_shop_close_btn"},{"id":"live_iv_bottom_close","action":"live_iv_bottom_close"},{"id":"立即抽奖","action":"GLOBAL_ACTION_BACK"},{"id":"有通行证奖励可领取","action":"引导关闭按钮"},{"id":"liveExitDialogBg","action":"liveBtnExit"},{"id":"main_ad_broadside_img","action":"main_ad_broadside_close"}]}"
},
{
"-2028968188": "{"popup_rules":[{"id":"iv_home_ad_bg","action":"iv_home_ad_close"},{"id":"iv_invite_icon","action":"iv_invite_close"}]}"
},
{
"-103523392": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"进入直播间热聊","action":"稍后再说"},{"id":"开启地理位置权限","action":"拒绝"}]}"
},
{
"1695025949": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"847156324": "{"popup_rules":[{"id":"=立即更新","action":"=取消"},{"id":"ad_time_view","action":"=关闭"},{"id":"关闭广告","action":"=不感兴趣"},{"id":"不感兴趣&举报广告","action":"=不感兴趣"},{"id":"coolapk_card_view","action":"close_view"}]}"
},
{
"-833566134": "{"popup_rules":[{"id":"发现新版本","action":"下次再说"}]}"
},
{
"-1864872766": "{"popup_rules":[{"id":"恭喜获得&红包","action":"unused_res_a"},{"id":"狠心离开&去看看","action":"狠心离开"},{"id":"=logo","action":"=close"}]}"
},
{
"-558836051": "{"popup_rules":[{"id":"reaper_ad_source_layout","action":"close"},{"id":"adv_main","action":"iv_close"}]}"
},
{
"-2114933808": "{"popup_rules":[{"id":"ksad_interstitial_native","action":"ksad_auto_close_btn"},{"id":"ad_area","action":"close_btn","delay_popup":5000},{"id":"img_native","action":"img_native_close"},{"id":"iv_apk_icon","action":"iv_close"},{"id":"广告","action":"跳过"},{"id":"tv_feedback_submit","action":"iv_feedback_close"}]}"
},
{
"1893781697": "{"popup_rules":[{"id":"新版体验邀请","action":"bt_cancel_experience"},{"id":"tv_red_envelop_main_title","action":"img_cf_view_close"},{"id":"img_floating_ad_cmb","action":"img_close_floating_ad_cmb"},{"id":"定位服务","action":"btn_mid_center_couple_negative"},{"id":"真的要放弃吗","action":"残忍离开"},{"id":"img_cmb_drag_pendant_close","action":"img_cmb_drag_pendant_close"}]}"
},
{
"342704719": "{"popup_rules":[{"id":"升级提醒","action":"稍后再说"}]}"
},
{
"-1488821919": "{"popup_rules":[{"id":"打开通知","action":"iv_close"}]}"
},
{
"-811421306": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"mLinSignBg","action":"imgSignClone"},{"id":"打开&推送通知","action":"以后再说"}]}"
},
{
"114295028": "{"popup_rules":[{"id":"updata_title","action":"update_close"}]}"
},
{
"2053958218": "{"popup_rules":[{"id":"允许&推送通知","action":"取消"},{"id":"dialog_card","action":"dialog_close"}]}"
},
{
"-895263099": "{"popup_rules":[{"id":"更新提示","action":"取消"}]}"
},
{
"332614644": "{"popup_rules":[{"id":"首次答题特权","action":"iv_remind_close"}]}"
},
{
"1143986695": "{"popup_rules":[{"id":"发现新版本","action":"tv_ignore_this_version"},{"id":"开启系统日历的访问权限","action":"取消"}]}"
},
{
"-796004189": "{"popup_rules":[{"id":"想给你发送通知","action":"不允许"}]}"
},
{
"-1053900032": "{"popup_rules":[{"id":"suite_completed_ads_container","action":"suite_completed_close_ad_button"}]}"
},
{
"-895188853": "{"popup_rules":[{"id":"huyaui_float_notify_count_close","action":"huyaui_float_notify_count_close"},{"id":"开启通知,不错过订阅的主播开播","action":"iv_right"},{"id":"push_popup_sec_txt","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"1875899872": "{"popup_rules":[{"id":"开启定位权限","action":"home_close_img"}]}"
},
{
"1319538838": "{"popup_rules":[{"id":"开启推送","action":"push_set_close_img"},{"id":"完善昵称有利于收获更多的粉丝","action":"close_img"}]}"
},
{
"-1031558479": "{"popup_rules":[{"id":"发现新版本","action":"GLOBAL_ACTION_BACK"},{"id":"送你&新人购物券","action":"GLOBAL_ACTION_BACK"},]}"
},
{
"1219698816": "{"popup_rules":[{"id":"青少年模式","action":"pop_youngset_know_txt"},{"id":"newuser_fuli_img_intent","action":"newuser_fuli_img_closed"},{"id":"tv_notice_content","action":"tv_notice_content"}]}"
},
{
"-557467920": "{"popup_rules":[{"id":"开启消息通知","action":"取消"}]}"
},
{
"-747700391": "{"popup_rules":[{"id":"立即免费领取","action":"ivClose"},{"id":"新用户福利仅一次","action":"放弃福利"},{"id":"开通会员&特惠","action":"ivClose"}]}"
},
{
"-189732215": "{"popup_rules":[{"id":"banner_image","action":"image_close_banner"}]}"
},
{
"1765779203": "{"popup_rules":[{"id":"red_packet_content","action":"red_packet_close"},{"id":"bn_","action":"bs3"},{"id":"添加桌面小组件","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"502255059": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"开启消息通知","action":"arg"}]}"
},
{
"2091464343": "{"popup_rules":[{"id":"发现新版本","action":"以后再说"},{"id":"获取&剪切板","action":"不允许"},{"id":"开启推送通知","action":"取消"},{"id":"drag_img","action":"close_btn"},{"id":"图片跳转","action":"此图片未加标签"},{"id":"ad_image","action":"close_btn"},{"id":"img_advertlogo","action":"iv_close_top"}]}"
},
{
"991562021": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"-322418038": "{"popup_rules":[{"id":"upgrade_dialog_cancel","action":"upgrade_dialog_cancel"}]}"
},
{
"-1709882794": "{"popup_rules":[{"id":"update_title","action":"btn_close"},{"id":"bottom_center_close_button","action":"bottom_center_close_button"},{"id":"订单已满&优惠换购","action":"放弃机会"},{"id":"恭喜你获得以下权益","action":"GLOBAL_ACTION_BACK"},{"id":"popContentImg","action":"popCloseBtn"}]}"
},
{
"1536737232": "{"popup_rules":[{"id":"打开通知,及时收到互动消息","action":"right_icon"},{"id":"选择通知类型","action":"暂不开启"},{"id":"bottom_process_tv","action":"close"},{"id":"使用您的位置信息","action":"以后再说"},{"id":"tv_tips","action":"iv_close_icon"},{"id":"不感兴趣&为何会看到此广告","action":"不感兴趣"},{"id":"tv_tips","action":"iv_close_icon"},{"id":"不感兴趣&屏蔽此博主","action":"不感兴趣"},{"id":"left_img_ad_tag","action":"close"},{"id":"关注你感兴趣的超话","action":"iv_close"},{"id":"定位服务未开启","action":"以后再说"},{"id":"点击签到","action":"GLOBAL_ACTION_BACK"},{"id":"给我们评分","action":"不了,谢谢"},{"id":"card_view","action":"right_top_tag"},{"id":"不感兴趣&内容质量差","action":"不感兴趣"},{"id":"错过了&爆词&查看详情","action":"mIvRight"}]}"
},
{
"560468770": "{"popup_rules":[{"id":"openAlertText","action":"btn_close_update_setting"}]}"
},
{
"1984799751": "{"popup_rules":[{"id":"da_container","action":"closeAd"},{"id":"itah_layout","action":"closeAd"},{"id":"iltas_ad_layout","action":"closeAd"}]}"
},
{
"1596265335": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"fl_newcomer_gift","action":"iv_close"},{"id":"banner_icon_iv","action":"colse_iv"},{"id":"tv_usercenter_notify_title","action":"iv_usercenter_notify_close"},{"id":"VIP限时超低价","action":"icon_close_popup"},{"id":"ad_name_tv","action":"ad_close_iv"},{"id":"free_mode_dialog_image","action":"dialog_close_btn"}]}"
},
{
"1073158053": "{"popup_rules":[{"id":"新版本","action":"取消"},{"id":"dialog_full_image","action":"dialog_full_image_close"}]}"
},
{
"1683280386": "{"popup_rules":[{"id":"发现&新版本&立即升级","action":"GLOBAL_ACTION_BACK"},{"id":"青少年模式","action":"我知道了"}]}"
},
{
"-1960346768": "{"popup_rules":[{"id":"ad_content","action":"btnClose"}]}"
},
{
"1272214412": "{"popup_rules":[{"id":"想给您发送通知","action":"暂不"}]}"
},
{
"725735704": "{"popup_rules":[{"id":"青少年守护模式","action":"tv_confirm"}]}"
},
{
"-733096426": "{"popup_rules":[{"id":"更新Telegram","action":"请稍后提醒我"}]}"
},
{
"-1414602254": "{"popup_rules":[{"id":"恭喜!你收到新人现金红包","action":"dtj"},{"id":"朋友推荐","action":"close"},{"id":"朋友推荐","action":"不感兴趣"},{"id":"朋友推荐","action":"关闭"},{"id":"青少年模式","action":"关闭"},{"id":"资料完善度&继续完善","action":"关闭"}]}"
},
{
"651433099": "{"popup_rules":[{"id":"发现新版本","action":"暂不更新"},{"id":"开启消息通知","action":"notice_dialog_cancel_iv"},{"id":"打开消息通知","action":"close"},{"id":"订阅微信通知","action":"cancel_iv"},{"id":"写好评,鼓励一下","action":"不了,谢谢"}]}"
},
{
"28505069": "{"popup_rules":[{"id":"dialog_once_price_iv_buy","action":"dialog_once_price_iv_cancel"}]}"
},
{
"-1854575849": "{"popup_rules":[{"id":"查看&分享的文件","action":"立即查看"}]}"
},
{
"-1730999113": "{"popup_rules":[{"id":"开启&终端管理","action":"暂不开启"}]}"
},
{
"876496474": "{"popup_rules":[{"id":"立即领现金","action":"unused_res_a"},{"id":"unused_res_a","action":"=关闭"}]}"
},
{
"-30728625": "{"popup_rules":[{"id":"立即更新","action":"GLOBAL_ACTION_BACK"},{"id":"打开通知权限","action":"取消"},{"id":"精选内容","action":"Close"}]}"
},
{
"1877659010": "{"popup_rules":[]}"
},
{
"2078928257": "{"popup_rules":[{"id":"activity_guide_animation","action":"跳过"},{"id":"打开通知权限","action":"取消"}]}"
},
{
"1276497535": "{"popup_rules":[{"id":"有新版本&升级","action":"暂不升级"},{"id":"bar_close","action":"bar_close"}]}"
},
{
"293886959": "{"popup_rules":[{"id":"抢先体验","action":"取消"}]}"
},
{
"1799462192": "{"popup_rules":[{"id":"ad_title","action":"ad_close_btn"}]}"
},
{
"1366626055": "{"popup_rules":[{"id":"tv_teen_dialog_title","action":"young_dialog_close_img"},{"id":"txt_push_open_title","action":"btn_open_cancel"},{"id":"七猫新人红包","action":"iv_close_bonus"},{"id":"red_packet_img","action":"close_red_packet"},{"id":"imageView","action":"imageView_close"},{"id":"read_view","action":"close"},{"id":"ad_privacy_view","action":"iv_ad_direct_close"},{"id":"ll_ad_bottom_remind_group","action":"ad_direct_close"}]}"
},
{
"-1544055932": "{"popup_rules":[{"id":"青少年守护模式","action":"我知道了"},{"id":"head_img","action":"close"},{"id":"tv_name","action":"iv_del"}]}"
},
{
"1907791813": "{"popup_rules":[{"id":"button_open_continue_pay","action":"close"},{"id":"新功能","action":"btn_close"}]}"
},
{
"-524269385": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"widget_close_icon","action":"widget_close_icon"},{"id":"关注Ta","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"2092879561": "{"popup_rules":[{"id":"青少年守护","action":"已满14岁"},{"id":"cancelButton","action":"cancelButton"},{"id":"去&应用市场&评价","action":"取消"}]}"
},
{
"229330387": "{"popup_rules":[{"id":"=开启推送通知","action":"以后再说"},{"id":"+开启推送通知","action":"bn0"},{"id":"青少年模式","action":"=我知道了"}]}"
},
{
"201325446": "{"popup_rules":[{"id":"打开消息推送通知","action":"ivCloseAlert"},{"id":"llJbpFirstPopContent","action":"ivJbpFirstPopClose"},{"id":"把聚宝盆添加到桌面快捷方式","action":"之后再说"},{"id":"apperience_enter","action":"apperience_close"},{"id":"rlRedPop","action":"ivClose"},{"id":"iv_pop_content","action":"iv_pop_close"},{"id":"ivPromotion","action":"btnClose"}]}"
},
{
"-527086868": "{"popup_rules":[{"id":"gift_img","action":"gift_close"},{"id":"打开系统通知","action":"iv_close"}]}"
},
{
"-524659007": "{"popup_rules":[{"id":"不感兴趣","action":"不感兴趣","times":5}]}"
},
{
"-328022007": "{"popup_rules":[{"id":"广告","action":"跳过"},{"id":"main_ad_alert","action":"main_ad_alert_close"},{"id":"slideshowView","action":"ivClose"}]}"
},
{
"1174097286": "{"popup_rules":[{"id":"icon_cart_egg_close","action":"icon_cart_egg_close"},{"id":"弹窗","action":"关闭按钮"},{"id":"发现新版本","action":"取消"}]}"
},
{
"2029054607": "{"popup_rules":[{"id":"tt_splash_ad_logo","action":"tt_splash_skip_btn"}]}"
},
{
"1519628819": "{"popup_rules":[{"id":"tt_splash_ad_logo","action":"tt_splash_skip_btn"}]}"
},
{
"313184810": "{"popup_rules":[{"id":"检测到更新","action":"以后再说"},{"id":"青少年模式","action":"关闭"},{"id":"朋友推荐","action":"close"},{"id":"隐藏","action":"h7e"},{"id":"开启朋友通知","action":"暂不"},{"id":"朋友推荐 标题","action":"qpb"},{"id":"及时获得消息提醒","action":"暂不开启"},{"id":"想访问你的通讯录","action":"拒绝"}]}"
},
{
"-1667428321": "{"popup_rules":[{"id":"发现新版本","action":"忽略"},{"id":"byr","action":"byr","times":5},{"id":"page-title","action":"avq"},],"click_way_popup":1}"
},
{
"195210534": "{"popup_rules":[{"id":"升级版本","action":"关闭"},{"id":"收到一个现金红包","action":"关闭"}]}"
},
{
"-1220851267": "{"popup_rules":[{"id":"layout_young_tips","action":"ok_btn"},{"id":"授权地理位置权限","action":"btn_cancel"}]}"
},
{
"125486076": "{"popup_rules":[{"id":"有新版本啦","action":"imageView_close"}]}"
},
{
"-1991835185": "{"popup_rules":[{"id":"开启通知","action":"不允许"},{"id":"ad_image","action":"ad_close"}]}"
},
{
"-973170826": "{"popup_rules":[{"id":"广告","action":"feedbackIcon"},{"id":"dislike&feedbackBtn","action":"不感兴趣"},{"id":"isdismatch&isduplicate&isbadad","action":"与我无关"}]}"
},
{
"167193980": "{"popup_rules":[{"id":"javascript:;","action":"javascript:;"},{"id":"定位服务授权","action":"取消"},{"id":"64c8cbcb30036","action":"close"}]}"
},
{
"-1239952740": "{"popup_rules":[{"id":"为什么不希望看到这条推广","action":"不感兴趣"}]}"
},
{
"2138257400": "{"popup_rules":[{"id":"打开消息通知","action":"close_icon"}]}"
},
{
"1511151769": "{"popup_rules":[{"id":"获取消息通知","action":"暂不开启"}]}"
},
{
"-1491765371": "{"popup_rules":[{"id":"开启青少年模式","action":"知道了"}]}"
},
{
"1970409442": "{"popup_rules":[{"id":"监护人同意","action":"已满14岁"}]}"
},
{
"-358087111": "{"popup_rules":[{"id":"push_on_notify_bar","action":"push_on_notify_delete"}]}"
},
{
"-173873869": "{"popup_rules":[{"id":"iv_tg_ad","action":"iv_tg_ad"},{"id":"btn_open_notification","action":"iv_close_notification_guide"},{"id":"forum_ad_imageview","action":"iv_close_community_ad"},{"id":"iv_recommend_ad_image","action":"iv_close_ad"}]}"
},
{
"-1665025453": "{"popup_rules":[{"id":"为了安全着想,请开启安全守护","action":"放弃"},{"id":"准备中","action":"准备中","times":0},{"id":"检测中","action":"检测中","times":0},{"id":"继续更新","action":"继续更新","times":3},{"id":"继续安装","action":"继续安装","times":3},{"id":"继续","action":"继续","times":3},{"id":"安装中","action":"安装中","times":0},{"id":"完成","action":"完成"}],"unite_popup_rules":true,"ltt_service":true}"
},
{
"-2096096381": "{"popup_rules":[{"id":"pop_advertisement_content","action":"iv_close"}]}"
},
{
"-1478231696": "{"popup_rules":[{"id":"iv_peer_exchange_fhr","action":"iv_peer_exchange_close_fhr"},{"id":"打开系统通知","action":"bt_tip_close"}]}"
},
{
"588474247": "{"popup_rules":[{"id":"更新","action":"取消"}]}"
},
{
"-1206397310": "{"popup_rules":[{"id":"青少年模式","action":"=我知道了"},{"id":"ivFloatAd","action":"ivAdClose"},{"id":"layout_ad_layout","action":"native_ad_close"},{"id":"ad_flag_source_layout","action":"iv_close"},{"id":"native_ad_image","action":"native_ad_close"},{"id":"native_ad_title","action":"native_ad_close"}]}"
},
{
"199342455": "{"popup_rules":[{"id":"开启推送通知","action":"iv_close"},{"id":"tv_nps_title","action":"img_nps_close"}]}"
},
{
"-766051647": "{"popup_rules":[{"id":"发现新版本","action":"放弃更新"}]}"
},
{
"-1527971724": "{"popup_rules":[{"id":"iv_notification_tip_icon","action":"cv_cancel_notification_tip"},{"id":"cl_top","action":"bt_close"}]}"
},
{
"1600359417": "{"popup_rules":[{"id":"新版本","action":"稍后更新"}]}"
},
{
"992705457": "{"popup_rules":[{"id":"青少年模式","action":"知道了"},{"id":"开启消息通知","action":"暂不开启"},{"id":"不要错过重要消息,试试个性化管理吧","action":"bce"}]}"
},
{
"1979515232": "{"popup_rules":[{"id":"updateVersionTitle","action":"md_dialog_cm_close_btn"},{"id":"访问您的位置","action":"取消"}]}"
},
{
"-1869705199": "{"popup_rules":[{"id":"删除所有广告","action":"跳过"},{"id":"青少年模式","action":"我知道了"}],"click_way_popup":1}"
},
{
"-1902185409": "{"popup_rules":[{"id":"首次成功发布沸点","action":"iv_close"}]}"
},
{
"-1567553486": "{"popup_rules":[{"id":"ux_program_title","action":"confirm_cancel"},{"id":"GuideModalConfirmBtn","action":"GLOBAL_ACTION_BACK"},{"id":"开启通知","action":"close"}]}"
},
{
"818881643": "{"popup_rules":[{"id":"=广告","action":"跳过"}]}"
},
{
"863298512": "{"popup_rules":[{"id":"threeImageBaPing","action":"close_ba_ping"},{"id":"imageBaPingFullScreen","action":"closeBaPingFull"},{"id":"baPing_small_icon","action":"baPing_small_close"}]}"
},
{
"-1877153607": "{"popup_rules":[{"id":"给您发送通知","action":"不接收"}]}"
},
{
"616434203": "{"popup_rules":[{"id":"“快影”想给您发送通知","action":"sy"}]}"
},
{
"-357699061": "{"popup_rules":[{"id":"青少年模式","action":"知道了"}]}"
},
{
"-243402277": "{"popup_rules":[{"id":"iv_activities_banner","action":"iv_close"}]}"
},
{
"1032792361": "{"popup_rules":[{"id":"新人专属月卡","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"1047154881": "{"popup_rules":[{"id":"确认加购","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"270344886": "{"popup_rules":[{"id":"iv_poster","action":"iv_close"}]}"
},
{
"991394745": "{"popup_rules":[{"id":"home_ad_dialog_pager","action":"iv_home_ad_close"},{"id":"homeLocationPermissionTipsTitle","action":"homeLocationPermissionClose"},{"id":"开启消息通知","action":"close"}]}"
},
{
"-2003752385": "{"popup_rules":[{"id":"青少年模式","action":"ok_tv"},{"id":"bg_iv","action":"close_iv"},{"id":"notification_open_lay","action":"close_lay_btn"}]}"
},
{
"1091754941": "{"popup_rules":[{"id":"新人专属福利","action":"iv_close"},{"id":"hbv","action":"iv_close"},{"id":"开启推送通知","action":"iv_cancel"}]}"
},
{
"-1652150487": "{"popup_rules":[{"id":"检测到更新","action":"以后再说"},{"id":"青少年模式","action":"关闭"},{"id":"收到现金红包","action":"bci"},{"id":"授权提示","action":"我再想想"},{"id":"授权通讯录","action":"拒绝"},{"id":"资料完善度&继续完善","action":"关闭"},{"id":"朋友推荐","action":"关闭"},{"id":"简介支持@功能,快来试试吧","action":"关闭"}]}"
},
{
"-7542465": "{"popup_rules":[{"id":"advert_creative_head_title_v3","action":"advert_creative_head_img_text_layout_close_btn_v3"}]}"
},
{
"-1065232334": "{"popup_rules":[{"id":"iv_opera","action":"iiv_close"},{"id":"mantine-r4-body","action":"upload"}]}"
},
{
"662377423": "{"popup_rules":[{"id":"ll_book_recommend","action":"gift_close"},{"id":"gift_container","action":"gift_close"},{"id":"daily_container","action":"daily_close"}]}"
},
{
"1062801388": "{"popup_rules":[{"id":"iv_bg","action":"iv_close"},{"id":"iv_ad","action":"tv_close_ad"}]}"
},
{
"2009078134": "{"popup_rules":[{"id":"新用户限时特惠","action":"知道了"}]}"
},
{
"652719697": "{"popup_rules":[{"id":"layoutOpenVip","action":"ivVipBannerClose"}]}"
},
{
"1590102142": "{"popup_rules":[{"id":"极速版小助理&求关注","action":"拒绝"},{"id":"item_timeline_ad_sign","action":"关闭广告"},{"id":"屏蔽信息流广告","action":"不感兴趣"}]}"
},
{
"-1520738335": "{"popup_rules":[{"id":"暂不更新","action":"update_title_tv"}]}"
},
{
"378881071": "{"popup_rules":[{"id":"懂车帝有更新啦","action":"以后再说"}]}"
},
{
"1429484426": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"正在试听,完整播放需要开通VIP","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"270694045": "{"popup_rules":[{"id":"开启消息通知","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"648308836": "{"popup_rules":[{"id":"升级体验","action":"取消"},{"id":"home_float_close","action":"home_float_close"},{"id":"不再提醒","action":"tv_never"}]}"
},
{
"-1930444755": "{"popup_rules":[{"id":"riv_poplayer_image","action":"iv_close_poplayer_image"}]}"
},
{
"1488133239": "{"popup_rules":[{"id":"开始发图","action":"GLOBAL_ACTION_BACK"},{"id":"签到成功","action":"close"}]}"
},
{
"1788138577": "{"popup_rules":[{"id":"关注服务号","action":"close_btn"}]}"
},
{
"232580377": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"scratch_show_view","action":"scratch_close_float"},{"id":"push_content","action":"push_remind_close"},{"id":"tvVersion","action":"not_update"},{"id":"swiper_list","action":"GLOBAL_ACTION_BACK"},{"id":"tv_sign_in","action":"iv_sign_in_close"},{"id":"image_avatar","action":"image_close"},{"id":"iv_tag_ad","action":"tedium"},{"id":"feedback_general_text","action":"不喜欢广告主"}]}"
},
{
"752555548": "{"popup_rules":[{"id":"的广告","action":"×"},{"id":"zhConstraintLayout","action":"dismiss"}]}"
},
{
"238075641": "{"popup_rules":[{"id":"iv_image","action":"close"},{"id":"iv_listitem_image","action":"iv_list_item_dislike"},{"id":"不感兴趣&无法关闭&举报广告","action":"不感兴趣"},{"id":"look_reward","action":"reject"}]}"
},
{
"953551389": "{"popup_rules":[{"id":"使用您的位置","action":"暂不"}]}"
},
{
"1388849156": "{"popup_rules":[{"id":"V&立即升级","action":"arg"},{"id":"授权微信通知","action":"arg"},{"id":"会员随机现金奖励","action":"狠心放弃"},{"id":"添加智行桌面小组件","action":"arg"},{"id":"手机定位服务或定位权限未开启","action":"arg"}]}"
},
{
"-662871885": "{"popup_rules":[{"id":"更新提示","action":"取消"}]}"
},
{
"-822811590": "{"popup_rules":[{"id":"item_channel_item_title","action":"item_channel_item_close","times":5},{"id":"item_channel_item_image_layout","action":"item_channel_item_close","times":5}]}"
},
{
"-1979924692": "{"popup_rules":[{"id":"tv_join","action":"iv_cancle"}]}"
},
{
"644871869": "{"popup_rules":[{"id":"update_title","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"947418797": "{"popup_rules":[{"id":"banner","action":"close_btn"}]}"
},
{
"-76821059": "{"popup_rules":[{"id":"开启通知服务","action":"GLOBAL_ACTION_BACK"},{"id":"明日来领&金币","action":"我知道了"}]}"
},
{
"101952197": "{"popup_rules":[{"id":"btn_open_notify","action":"not_open_notify"}]}"
},
{
"-54547863": "{"popup_rules":[{"id":"显示通知","action":"取消授权"},{"id":"ivAdv","action":"ivClose"}]}"
},
{
"1855462465": "{"popup_rules":[{"id":"浮层内部图片","action":"浮层关闭按钮"},{"id":"热区","action":"关闭按钮"},{"id":"限时福利砸中你","action":"关闭按钮"}]}"
},
{
"2016444138": "{"popup_rules":[{"id":"看视频领取&会员权益","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"1380298910": "{"popup_rules":[{"id":"立即升级","action":"稍后再说"},{"id":"bud","action":"bud"}]}"
},
{
"-1717626045": "{"popup_rules":[{"id":"pay_vip_bt","action":"close_bt"},{"id":"new_user_promotion_card","action":"icon_close_button"},{"id":"完善资料领&VIP","action":"iv_close"},{"id":"vip_retain_window_iv","action":"close_button"}]}"
},
{
"-1556709909": "{"popup_rules":[{"id":"supportBt","action":"closeBt"}]}"
},
{
"-1447059102": "{"popup_rules":[{"id":"img_ads","action":"iv_close"},{"id":"float_ad_img","action":"close_float_ad_img"},{"id":"video_view","action":"iv_close"}]}"
},
{
"-1109425407": "{"popup_rules":[{"id":"发现新版本","action":"取消"}]}"
},
{
"345365066": "{"popup_rules":[{"id":"新人签到礼","action":"close_btn"},{"id":"打开通知权限","action":"再考虑下"},{"id":"百度文库&评分","action":"score_close"},{"id":"开启消息通知","action":"close_btn"},{"id":"limit-red-packet-img-title","action":"GLOBAL_ACTION_BACK"},{"id":"read_gif_iv","action":"GLOBAL_ACTION_BACK"},{"id":"act_style_content_bg_iv","action":"act_style_iv_close"}]}"
},
{
"-1255577144": "{"popup_rules":[{"id":"青少年保护","action":"okButton"},{"id":"关注&公众号","action":"残忍拒绝"}]}"
},
{
"-156204975": "{"popup_rules":[{"id":"live_update_title","action":"live_update_close_img"},{"id":"青少年守护","action":"iknow_alert_dialog_button2"},{"id":"live_ad_dialog_image","action":"live_ad_dialog_close"}]}"
},
{
"-1502821745": "{"popup_rules":[{"id":"单车&天骑&单&立即领取","action":"actionDialogClose"},{"id":"hbDialogLayout","action":"actionDialogClose"},{"id":"gENrrooPRRSKS2nmR644j","action":"gENrrooPRRSKS2nmR644j"},{"id":"resize,w_933","action":"OcAed8BaQIDrlsAAAAASUVORK5CYII="}]}"
},
{
"132785423": "{"popup_rules":[{"id":"发现新版本","action":"iv_cancel"},{"id":"开启&通知","action":"暂不开启"},{"id":"签到成功","action":"iv_close"}]}"
},
{
"195266379": "{"popup_rules":[{"id":"你收到一个现金红包","action":"blb"},{"id":"开启推送通知,及时获取互动消息","action":"关闭"},{"id":"授权抖音朋友","action":"拒绝"}]}"
},
{
"-2086095549": "{"popup_rules":[{"id":"版本更新","action":"取消"}]}"
},
{
"-1079643320": "{"popup_rules":[{"id":"抽奖机会","action":"放弃福利"},{"id":"1分钟小调研","action":"iv_cancel"},{"id":"应用内更新权限","action":"buttonDefaultNegative"}]}"
},
{
"473713875": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"你可能感兴趣的人","action":"关闭"}]}"
},
{
"497239884": "{"popup_rules":[{"id":"开启系统通知","action":"暂不开启"}]}"
},
{
"-945730221": "{"popup_rules":[{"id":"open_notification_button","action":"close_image_view"},{"id":"location_tip_tv","action":"location_tip_close"}]}"
},
{
"-1657078324": "{"popup_rules":[{"id":"新版本","action":"tv_update_after"}]}"
},
{
"1791072826": "{"popup_rules":[{"id":"百度网盘更新啦","action":"下次再说"},{"id":"开启消息通知","action":"dialog_cancel"},{"id":"banner_item_close","action":"banner_item_close"},{"id":"close","action":"close"},{"id":"close_clean_guide","action":"close_clean_guide"},{"id":"close_notification_tip","action":"close_notification_tip"},{"id":"iv_yike_close","action":"iv_yike_close"},{"id":"yike_guide_exit","action":"yike_guide_exit"},{"id":"cl_content","action":"iv_close"}]}"
},
{
"-528715135": "{"popup_rules":[{"id":"teenagers_desc","action":"teenagers_i_know_layout"}]}"
},
{
"-2069018544": "{"popup_rules":[{"id":"尚未设置安全问题验证","action":"iv_close"},{"id":"大学生兼职安全试炼题","action":"还是算了"}]}"
},
{
"255610818": "{"popup_rules":[{"id":"第一桶金","action":"img_close"},{"id":"line_push","action":"img_push_close"},{"id":"恭喜获得现金","action":"img_close"}]}"
},
{
"2123438483": "{"popup_rules":[{"id":"iv_coupon","action":"iv_close"}]}"
},
{
"-146860486": "{"popup_rules":[{"id":"点击成为VIP,立享高级功能","action":"close_btn"},{"id":"获取地理位置","action":"dialog_close"}]}"
},
{
"-1606001344": "{"popup_rules":[{"id":"playing_tv_redeem_title","action":"playing_ic_close"}]}"
},
{
"325847140": "{"popup_rules":[{"id":"打开推送通知","action":"不允许"}]}"
},
{
"-69877540": "{"popup_rules":[{"id":"新版本&升级","action":"GLOBAL_ACTION_BACK"},{"id":"青少年模式","action":"我知道了"},{"id":"感兴趣商品再试一件","action":"关闭弹窗"},{"id":"专属现金红包","action":"GLOBAL_ACTION_BACK"},{"id":"每日签到得现金","action":"GLOBAL_ACTION_BACK"},{"id":"满&元可用&优惠券","action":"GLOBAL_ACTION_BACK"},{"id":"你的专属&福利","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"-84768776": "{"popup_rules":[{"id":"立即提现","action":"GLOBAL_ACTION_BACK"},{"id":"马上领取","action":"残忍退出"}]}"
},
{
"-612834190": "{"popup_rules":[{"id":"关闭弹框按钮","action":"关闭弹框按钮"},]}"
},
{
"-894368837": "{"popup_rules":[{"id":"开启超级保险箱","action":"close"},{"id":"touch_bottom_bar_bubble_main_title_tv","action":"touch_bottom_bar_bubble_close_iv"},{"id":"touch_dlg_main_title_tv","action":"touch_dlg_close_iv"},{"id":"touch_dlg_main_title_tv","action":"close_btn"},{"id":"移动积分别浪费,迅雷会员抢先兑","action":"放弃支付"},{"id":"老用户专属,劲爆惊喜价","action":"放弃优惠"},{"id":"xl_download_guide_tip_close","action":"xl_download_guide_tip_close"},{"id":"close-circle","action":"close-circle"},{"id":"签到成功","action":"知道了"},{"id":"tv_notification_title","action":"iv_notification_tips_close"},{"id":"立即签到","action":"iv_close"},{"id":"hermes_ad_banner_recycler","action":"hermes_ad_banner_negative"},{"id":"feedback_not_interested_text","action":"不感兴趣"}]}"
},
{
"-1781124388": "{"popup_rules":[{"id":"tv_notify_title","action":"iv_close"},{"id":"签到&天&获得&车币","action":"GLOBAL_ACTION_BACK"},{"id":"开启消息推送","action":"iv_close"}]}"
},
{
"1197124177": "{"popup_rules":[{"id":"tm_ad_page_tips_text","action":"tm_ad_page_tips_close"}]}"
},
{
"1620159901": "{"popup_rules":[{"id":"tv_chat_top_bar_notice_text","action":"iv_top_bar_close_icon"},{"id":"iv_action_icon","action":"iv_close"},{"id":"tv_submersible_recall_title","action":"关闭"}]}"
},
{
"884834226": "{"popup_rules":[{"id":"own_render_ad_icon","action":"close_render_ad"}]}"
},
{
"1589164968": "{"popup_rules":[{"id":"ivClose","action":"ivClose"}]}"
},
{
"495814814": "{"popup_rules":[{"id":"设置未成年人模式","action":"我知道了"},{"id":"imgCloseHomePageDialog","action":"imgCloseHomePageDialog"},{"id":"让我们提醒你运动","action":"暂不需要"}]}"
},
{
"1773314214": "{"popup_rules":[{"id":"权限申请","action":"取消"}]}"
},
{
"-807718193": "{"popup_rules":[{"id":"rl_banner_close","action":"rl_banner_close"},{"id":"iv_ignore","action":"iv_ignore"},{"id":"ivHomeIndexItemNearbyClose","action":"ivHomeIndexItemNearbyClose"}]}"
},
{
"-1531462240": "{"popup_rules":[{"id":"ad_icon","action":"closeAd"}]}"
},
{
"5992780": "{"popup_rules":[{"id":"支持 RAR 开发","action":"放弃"}]}"
},
{
"1868020298": "{"popup_rules":[{"id":"upgrade_title","action":"bn_cancel"},{"id":"开启&通知","action":"不要福利"},{"id":"view_pager","action":"iv_close"},{"id":"iv_logo","action":"iv_close"},{"id":"viewpager","action":"iv_home_delete"},{"id":"马上领取","action":"暂不需要"},{"id":"view_flipper","action":"close_iv"}]}"
},
{
"-2116363580": "{"popup_rules":[{"id":"立即更新","action":"negativeButton"},{"id":"内容推荐服务","action":"以后再说"}]}"
},
{
"300761806": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"giftPackImg","action":"closeImg"},{"id":"sign_bg","action":"signClose"}]}"
},
{
"1644138715": "{"popup_rules":[{"id":"为你推荐","action":"jkr"},{"id":"不再显示推荐电台","action":"关闭推荐"}]}"
},
{
"188162078": "{"popup_rules":[{"id":"青少年模式","action":"common_dialog_ok_btn"}]}"
},
{
"1314748790": "{"popup_rules":[{"id":"update_dlg_title","action":"tvCancel"},{"id":"开启消息通知权限","action":"暂不开启"},{"id":"index_drag_ad_iv","action":"index_drag_ad_iv_close"},{"id":"banner","action":"close_banner"}]}"
},
{
"1511326008": "{"popup_rules":[{"id":"打开通知功能","action":"取消"},{"id":"pic","action":"close"}]}"
},
{
"-1943382780": "{"popup_rules":[{"id":"新人礼包","action":"ezz"},{"id":"d6f","action":"ba3"},{"id":"测一测可赚收益","action":"ba9"},{"id":"开启推送通知","action":"dqp"},{"id":"限时补贴券","action":"ba5"},{"id":"请开启转转消息通知","action":"知道了"}]}"
},
{
"-920735187": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"开启推送","action":"closeBtn"},{"id":"新人专属大礼包","action":"ivClose"},{"id":"参加新人活动&免费领点币","action":"ivClose"},{"id":"ivAd","action":"ivAdClose"},{"id":"imgBKT","action":"imgClose"},{"id":"开启推送","action":"ivClose"},{"id":"签到成功&获得&章节卡碎片","action":"fClose"},{"id":"签到&天","action":"fClose"},{"id":"newAudioDialogTvTitle","action":"newAudioDialogNoPicCloseBtn"}]}"
},
{
"-360330826": "{"popup_rules":[{"id":"青少年守护计划","action":"已满14周岁"}]}"
},
{
"949069732": "{"popup_rules":[{"id":"番茄发来的红包","action":"f"},{"id":"buo","action":"buo"},{"id":"c55","action":"c56"}]}"
},
{
"810513273": "{"popup_rules":[{"id":"青少年模式","action":"确定"}]}"
},
{
"1575109845": "{"popup_rules":[{"id":"开启系统通知","action":"iv_close"}]}"
},
{
"1539906291": "{"popup_rules":[{"id":"tt_splash_ad_logo","action":"tt_splash_skip_btn"}]}"
},
{
"-862766679": "{"popup_rules":[{"id":"青少年守护计划","action":"已满14周岁"},{"id":"banner_image","action":"iv_close"},{"id":"iv_float_icon","action":"iv_float_close"},{"id":"appraise_positive_btn","action":"appraise_cancel_btn"},{"id":"popWindowPic","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"-2119218027": "{"popup_rules":[{"id":"设置最右消息通知类型","action":"暂不开启"},{"id":"lottie_view","action":"iv_delete"},{"id":"+开启通知","action":"tips_close"},{"id":"账号绑定手机号可以提升安全性","action":"btn_close"}]}"
},
{
"630814885": "{"popup_rules":[{"id":"rl_center","action":"iv_close"},{"id":"iv_news","action":"iv_close"},{"id":"开启消息通知","action":"iv_tip_close"}]}"
},
{
"-759128068": "{"popup_rules":[{"id":"发现新版本","action":"ivClose"},{"id":"青少年模式","action":"我知道了"},{"id":"tvBottomFloatViewDesc","action":"ivBottomFloatViewClose"},{"id":"奖品免费包邮到家","action":"放弃领取"},{"id":"你可能感兴趣的人","action":"ivRemove","times":5},{"id":"anim_view","action":"closeIcon"},{"id":"新人超值好物","action":"ivClose"},{"id":"新人限时福利","action":"ivClose"}]}"
},
{
"-1692253156": "{"popup_rules":[{"id":"novelad_banner_ad_text","action":"novel_banner_ad_close"},{"id":"lottieAnimationView","action":"关闭弹层"}]}"
},
{
"1890818956": "{"popup_rules":[{"id":"开启新消息通知","action":"取消"}]}"
},
{
"-1637701853": "{"popup_rules":[{"id":"发现新版本","action":"以后再说"},{"id":"儿童模式","action":"知道了"},{"id":"开启重要消息通知","action":"以后再说"}]}"
},
{
"-660055062": "{"popup_rules":[{"id":"tv_authorize_dlg_title","action":"btn_close_auth_dlg"},{"id":"tv_location_title","action":"iv_location_close"}]}"
},
{
"-103524201": "{"popup_rules":[{"id":"vp_guide_add","action":"iv_close"},{"id":"开启要闻通知","action":"忽略"}]}"
},
{
"-1979578047": "{"popup_rules":[{"id":"ad_title","action":"ad_close"}]}"
},
{
"891862624": "{"popup_rules":[{"id":"青少年模式","action":"不开启"},{"id":"iv_vip_order_tip","action":"iv_vip_order_close"},{"id":"gdt_media_view","action":"gdt_btn_close"}]}"
},
{
"1661249612": "{"popup_rules":[{"id":"升级到最新版本","action":"img_close"},{"id":"查看青少年模式","action":"知道了"},{"id":"设置引力签","action":"关闭弹窗"}]}"
},
{
"157540905": "{"popup_rules":[{"id":"tt_ad_logo","action":"tt_video_ad_close_layout"},{"id":"tt_bu_title","action":"tt_bu_close"},{"id":"不感兴趣&举报广告","action":"不感兴趣"}]}"
},
{
"-1623425929": "{"popup_rules":[{"id":"更新消息","action":"vision_btn_cancel"}]}"
},
{
"1337821420": "{"popup_rules":[{"id":"请开启消息通知","action":"暂不开启"}]}"
},
{
"321803898": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"-1930986565": "{"popup_rules":[{"id":"新版本","action":"dialog_pic_close"}]}"
},
{
"1185278458": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"sdv_right_bottom_pic","action":"iv_right_bottom_close"},{"id":"sdv_big_pic","action":"iv_big_close"}]}"
},
{
"-1500338227": "{"popup_rules":[{"id":"tt_splash_ad_logo","action":"tt_splash_skip_btn"}]}"
},
{
"-1969724936": "{"popup_rules":[{"id":"发现新版本","action":"取消"}]}"
},
{
"1662102643": "{"popup_rules":[{"id":"更新提示","action":"取消"},{"id":"应用升级提醒","action":"取消"}]}"
},
{
"1546297161": "{"popup_rules":[{"id":"iv_right_bottom_ad","action":"iv_close"}]}"
},
{
"1000776385": "{"popup_rules":[{"id":"update_cancel","action":"update_cancel"},{"id":"iv_body","action":"iv_close"},{"id":"img_ad","action":"img_ad_close"}]}"
},
{
"1667762191": "{"popup_rules":[{"id":"日&必得&金币","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"650999717": "{"popup_rules":[{"id":"使用此文件夹","action":"使用此文件夹"},{"id":"要允许","action":"允许"}],"unite_popup_rules":true,"ltt_service":true}"
},
{
"-921040269": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"-1635328017": "{"popup_rules":[{"id":"马上升级","action":"不再提醒"},{"id":"抢先体验&不再提醒","action":"不再提醒"},{"id":"关闭,按钮","action":"关闭,按钮"},{"id":"关闭新特性弹窗","action":"关闭新特性弹窗"},{"id":"关闭按钮","action":"关闭按钮"}]}"
},
{
"-379148275": "{"popup_rules":[{"id":"=跳过","action":"=跳过"}],"click_way_popup":1}"
},
{
"-1703768290": "{"popup_rules":[{"id":"tv_teenager_content","action":"btn_teenager_i_know"},{"id":"新用户专属奖励","action":"iv_new_player_dialog_close"},{"id":"立即签到","action":"iv_close"},{"id":"开启系统通知","action":"close"}]}"
},
{
"-744842507": "{"popup_rules":[{"id":"ad_container","action":"btn_close"},{"id":"fl_container","action":"iv_delete"}]}"
},
{
"-1731486278": "{"popup_rules":[{"id":"iv_ad","action":"close"},{"id":"邀您体验新版本","action":"残忍拒绝"},{"id":"允许获取位置信息","action":"取消"},{"id":"iv_notification_reminder_dialog","action":"iv_notification_reminder_dialog_close"},{"id":"iv_switch","action":"iv_skip"},{"id":"开启定位服务","action":"暂时不了"}]}"
},
{
"-103532384": "{"popup_rules":[{"id":"允许&发送通知","action":"以后再说"}]}"
},
{
"-1357050264": "{"popup_rules":[{"id":"定位服务&开启","action":"关闭"},{"id":"活动图片","action":"关闭"}]}"
},
{
"-918490570": "{"popup_rules":[{"id":"tv_upgrade_title","action":"iv_upgrade_btn_ignore"},{"id":"广告弹窗","action":"关闭弹窗"},{"id":"共享&广告标识","action":"不允许"},{"id":"开启通知提醒","action":"im_feed_tip_close"}]}"
},
{
"1889695195": "{"popup_rules":[{"id":"授权&位置信息","action":"关闭"}]}"
},
{
"-191341086": "{"popup_rules":[{"id":"有新版本","action":"暂不升级"},{"id":"以后再说","action":"以后再说"}]}"
},
{
"-1185078240": "{"popup_rules":[{"id":"收到&现金红包","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"1836227312": "{"popup_rules":[{"id":"iv_ads","action":"iv_close"}]}"
},
{
"1013943789": "{"popup_rules":[{"id":"新人&见面礼","action":"GLOBAL_ACTION_BACK"}]}"
},
{
"1516206044": "{"popup_rules":[{"id":"iv_head","action":"返回首页"},{"id":"允许地理位置权限","action":"不允许"}]}"
},
{
"-30315083": "{"popup_rules":[{"id":"有新版本","action":"取消"}]}"
},
{
"744792033": "{"popup_rules":[{"id":"cancel_update","action":"cancel_update"},{"id":"yellow_banner_close","action":"yellow_banner_close"},{"id":"close_btn","action":"close_btn"},{"id":"operational_activities_content_close","action":"operational_activities_content_close"}]}"
},
{
"354525348": "{"popup_rules":[{"id":"立即支付 解锁全部功能","action":"下次再说"}]}"
},
{
"-530247198": "{"popup_rules":[{"id":"=跳过","action":"=跳过"},{"id":"gdt_ad_custom_count_down","action":"close_button"}]}"
},
{
"515982662": "{"popup_rules":[{"id":"开启定位权限","action":"locate_iv_close"},{"id":"marquee","action":"关闭"},{"id":"fortune_adv","action":"关闭"}]}"
},
{
"-245593387": "{"popup_rules":[{"id":"skip_other_info_tv","action":"skip_time_change_tv"}],"search_times_popup":5,"click_way_popup":1}"
},
{
"1966418623": "{"popup_rules":[{"id":"发现新版本","action":"暂不升级"}]}"
},
{
"2037736697": "{"popup_rules":[{"id":"ad_container","action":"splash_ad_skip"}]}"
},
{
"1983218619": "{"popup_rules":[{"id":"授权提示","action":"拒绝"},{"id":"=数字人","action":"=关闭"},{"id":"my_imageview","action":"close"}]}"
},
{
"-1898417322": "{"popup_rules":[{"id":"single_banner","action":"close"},{"id":"=广告","action":"closeGray"}]}"
},
{
"1391684449": "{"popup_rules":[{"id":"tvTip","action":"iv_guanbi"}]}"
},
{
"-103524794": "{"popup_rules":[{"id":"立即升级","action":"GLOBAL_ACTION_BACK"},{"id":"需要通知权限","action":"取消"},{"id":"关闭按钮","action":"=关闭按钮"}],"times":5}"
},
{
"-2002547408": "{"popup_rules":[{"id":"新版本升级","action":"下次提醒"},{"id":"青少年模式","action":"我知道了"},{"id":"ads_image","action":"feedback_close"},{"id":"选择理由,优化你的广告","action":"诱导点击"},{"id":"ads_label","action":"feedback_close"}]}"
},
{
"2056863498": "{"popup_rules":[{"id":"iv_content_ad","action":"iv_close_tableScreenAd"},{"id":"iv_ad","action":"iv_close"},{"id":"安装完整版日历","action":"iv_close"},{"id":"iv_pic","action":"iv_delte"}]}"
},
{
"-1161240227": "{"popup_rules":[{"id":"upgrade_title","action":"upgrade_cancel"},{"id":"lciv_img","action":"lciv_close"},{"id":"开启手机定位","action":"下次再说"}]}"
},
{
"914144235": "{"popup_rules":[{"id":"青少年模式","action":"知道了"},{"id":"bv7","action":"h1_"},{"id":"开启消息通知","action":"暂不开启"},{"id":"不&错过重要消息","action":"fmk"}]}"
},
{
"-179660078": "{"popup_rules":[{"id":"开启位置权限","action":"GLOBAL_ACTION_BACK"},{"id":"notice_title_txt","action":"notice_close_txt"}]}"
},
{
"-1865688240": "{"popup_rules":[{"id":"view_ad_title","action":"view_ad_close"}]}"
},
{
"-198019159": "{"popup_rules":[{"id":"audio_vip_skip","action":"audio_vip_close"},{"id":"item_ad_title","action":"item_ad_close"},{"id":"mAdTitle","action":"mAdClose"}]}"
},
{
"-1215205363": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"}]}"
},
{
"1254578009": "{"popup_rules":[{"id":"立即升级","action":"iv_close"},{"id":"版本升级","action":"取消"},{"id":"msgbox_popup_clear","action":"msgbox_popup_clear"}]}"
},
{
"-1895428968": "{"popup_rules":[{"id":"=跳过","action":"=跳过"}]}"
},
{
"1085732649": "{"popup_rules":[{"id":"开启通知","action":"close_btn"},{"id":"查看活动详情","action":"关闭"},{"id":"txt_streamAd_title","action":"ad_feedback_dots"},{"id":"关闭广告","action":"不感兴趣"}]}"
},
{
"1744979357": "{"popup_rules":[{"id":"rl_content","action":"iv_vip_close"},{"id":"打开社区消息通知","action":"iv_message_close"}]}"
},
{
"1884443122": "{"popup_rules":[{"id":"想要读取剪切板","action":"始终拒绝"}]}"
},
{
"-405478795": "{"popup_rules":[{"id":"ads_imageview","action":"btn_cancel"},{"id":"rlEnvelope","action":"ivCancel"}]}"
},
{
"-54120092": "{"popup_rules":[{"id":"dlg_login_guide_thanks","action":"dlg_iv_login_guide_close"}]}"
},
{
"-532693094": "{"popup_rules":[{"id":"=更新","action":"=取消"}]}"
},
{
"1937929252": "{"popup_rules":[{"id":"adv_mask_container","action":"close_btn"},{"id":"operating_activity_entrance","action":"operating_activity_close"},{"id":"开启消息通知","action":"close"},{"id":"打开消息通知","action":"close_im"}]}"
},
{
"-1046965711": "{"popup_rules":[{"id":"体验 Google Play Pass,免费试用 1 个月","action":"以后再说"}]}"
},
{
"-874484145": "{"popup_rules":[{"id":"index_pop_img","action":"img_cancel"},{"id":"打开推送通知","action":"iv_close_notification_alert"},{"id":"tv_notif","action":"iv_close"}]}"
},
{
"-1161217159": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"id_back_img","action":"id_close_btn"},{"id":"打开通知","action":"iv_close"}]}"
},
{
"641733616": "{"popup_rules":[{"id":"版本更新","action":"GLOBAL_ACTION_BACK"},{"id":"青少年模式","action":"我知道了"},{"id":"开启通知","action":"不再提示"},{"id":"tv_text_match","action":"iv_heart_match_x"},{"id":"定位权限","action":"拒绝"},{"id":"iv_gift_info","action":"iv_close"}]}"
},
{
"-1830100133": "{"popup_rules":[{"id":"开启消息通知","action":"再想想"},{"id":"lottery_popup_view_img","action":"lottery_popup_view_close"}]}"
},
{
"-91332804": "{"popup_rules":[{"id":"开启推送通知","action":"下次再说"}]}"
},
{
"1144086404": "{"popup_rules":[{"id":"updateVersionTitle","action":"md_dialog_cm_close_btn"},{"id":"青少年模式","action":"我知道了"}]}"
},
{
"1557402977": "{"popup_rules":[{"id":"开启消息通知权限","action":"取消"}]}"
},
{
"1994036591": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},]}"
},
{
"1657185137": "{"popup_rules":[{"id":"新版本","action":"忽略"}]}"
},
{
"-1534473421": "{"popup_rules":[{"id":"clean_adv_image","action":"iv_close"},{"id":"iv","action":"iv_cancel"}]}"
},
{
"-2092209424": "{"popup_rules":[{"id":"青少年守护","action":"已满14岁"},{"id":"开启消息推送通知","action":"close_img"}]}"
},
{
"-1346391036": "{"popup_rules":[{"id":"mUpgradeTitle","action":"mUpgradeDialogCancel"},{"id":"青少年模式","action":"我知道了"},{"id":"开启消息推送","action":"closeIv"}]}"
},
{
"2049668591": "{"popup_rules":[{"id":"closeButtonIcon","action":"closeButtonIcon"},{"id":"推荐广告","action":"关闭"}]}"
},
{
"1651531703": "{"popup_rules":[{"id":"发现新版本","action":"img_cancle"},{"id":"dialog_teenager_tv_tip","action":"dialog_teenager_tv_iKnow"},{"id":"newVipUser_tv_tip","action":"main_newVipUser_close"},{"id":"开通消息通知","action":"iv_close"},{"id":"签到成功","action":"iv_close"},{"id":"image_ad","action":"iv_close"}]}"
},
{
"-2145732654": "{"popup_rules":[{"id":"home_ad_image","action":"home_ad_close"}]}"
},
{
"-1513662963": "{"popup_rules":[{"id":"next_points_tv","action":"close_iv"},{"id":"flow_qxb_we_chat_src_iv","action":"flow_qxb_we_chat_close_iv"}]}"
},
{
"886316827": "{"popup_rules":[{"id":"发现新版本","action":"cancel"},{"id":"开启推送通知","action":"取消"}]}"
},
{
"2138010815": "{"popup_rules":[{"id":"青少年守护模式","action":"我知道了"},{"id":"notification_tip_container","action":"close_notification_bar"},{"id":"打开推送","action":"close_btn"}]}"
},
{
"841170930": "{"popup_rules":[{"id":"iv_suspend","action":"iv_page_suspend_close"}]}"
},
{
"1659293491": "{"popup_rules":[{"id":"reminder_push_guide_tv","action":"reminder_push_guide_close"},{"id":"你可能感兴趣的人","action":"关闭"}]}"
},
{
"-1839413884": "{"popup_rules":[{"id":"interact_ad_root","action":"iv_close"}]}"
},
{
"-1892077856": "{"popup_rules":[{"id":"检测到新版本","action":"取消"},{"id":"banner_ad","action":"iv_ad_close"}]}"
},
{
"1827421494": "{"popup_rules":[{"id":"iv_ad_img","action":"iv_close"},{"id":"开启消息提醒","action":"取消"},{"id":"tv_tips_indexNoticeMsgFragment","action":"iv_tipsClose_indexNoticeMsgFragment"}]}"
},
{
"460049591": "{"popup_rules":[{"id":"开启青少年模式","action":"知道了"}]}"
},
{
"1335515207": "{"popup_rules":[{"id":"开启消息通知","action":"icft_close"}]}"
},
{
"1014178734": "{"popup_rules":[{"id":"msAdView","action":"ams_icon_single_close"}]}"
},
{
"1175536078": "{"popup_rules":[{"id":"签到领取奖励","action":"GLOBAL_ACTION_BACK"},{"id":"=下载","action":"enu"},{"id":"推送通知&开启","action":"apt"}]}"
},
{
"1620268914": "{"popup_rules":[{"id":"版本升级","action":"忽略"}]}"
},
{
"1238325805": "{"popup_rules":[{"id":"发现新版本","action":"btn_dismiss"},{"id":"青少年模式","action":"iv_close"},{"id":"iv_close_icon","action":"iv_close_icon"}]}"
},
{
"265439280": "{"popup_rules":[{"id":"青少年守护","action":"已满18周岁"},{"id":"打开通知","action":"取消"}]}"
},
{
"-1367717479": "{"popup_rules":[{"id":"开启通知","action":"close_tip_btn"}]}"
},
{
"-629891177": "{"popup_rules":[{"id":"开启位置权限","action":"取消"}]}"
},
{
"1056984291": "{"popup_rules":[{"id":"update_content","action":"image_cancel"},{"id":"iv_notice","action":"ib_close"}]}"
},
{
"978047406": "{"popup_rules":[{"id":"+开启定位","action":"qmapapi_guide_close"},{"id":"h_explore_rn|NewPopUp|DrawLotteryPopup|Touchable","action":"h_explore_rn|NewPopUp|DrawLotteryPopup|Touchable"}]}"
},
{
"-248012079": "{"popup_rules":[{"id":"tv_version","action":"下次再说"},{"id":"开启通知","action":"iv_close"},{"id":"打开消息推送","action":"ivClose"}]}"
},
{
"-396646979": "{"popup_rules":[{"id":"umeng_update_id_ok","action":"umeng_update_id_cancel"},{"id":"青少年模式","action":"我知道了"}]}"
},
{
"2128193854": "{"popup_rules":[{"id":"青少年模式","action":"知道了"}]}"
},
{
"1659335438": "{"popup_rules":[{"id":"iv_drop_cnl_close","action":"iv_drop_cnl_close"},{"id":"共享文件夹","action":"稍后再说"}]}"
},
{
"-1163495604": "{"popup_rules":[{"id":"打开通知","action":"new_user_download_right_view"}]}"
},
{
"1751022005": "{"popup_rules":[{"id":"系统公告","action":"确定"}]}"
},
{
"1268902986": "{"popup_rules":[{"id":"系统位置服务未开启","action":"iv_image_close"}]}"
},
{
"-506597855": "{"popup_rules":[{"id":"版本更新","action":"取消"}]}"
},
{
"-133843480": "{"popup_rules":[{"id":"clean_adv_image","action":"iv_close"},{"id":"main_image_600x400","action":"close"},{"id":"确定放弃VIP会员","action":"close"}]}"
},
{
"559984781": "{"popup_rules":[{"id":"iv_delete","action":"iv_delete"}]}"
},
{
"1305029671": "{"popup_rules":[{"id":"版本更新","action":"关闭"},{"id":"签到成功","action":"关闭"}]}"
},
{
"-1846921724": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"iv_dialog_main_activity_bg","action":"iv_dialog_main_activity_close"},{"id":"radiance","action":"iv_dialog_live_room_gift_bag_close"}]}"
},
{
"-2061428528": "{"popup_rules":[{"id":"rl_ad_container","action":"iv_clear"}]}"
},
{
"93910113": "{"popup_rules":[{"id":"layout_gift","action":"iv_close"},{"id":"iv_notify","action":"iv_close"}]}"
},
{
"-1670877294": "{"popup_rules":[{"id":"新版试用","action":"取消"},{"id":"ad_download","action":"ad_not_interest"},{"id":"不感兴趣&投诉","action":"不感兴趣"},{"id":"push_tip_title","action":"close_tip"},{"id":"ad_header_new","action":"menu_item"}]}"
},
{
"1076661718": "{"popup_rules":[{"id":"版本更新","action":"暂不更新"}]}"
},
{
"555434215": "{"popup_rules":[{"id":"权限申请说明","action":"不同意"},{"id":"权限申请说明","action":"我知道了"},{"id":"img_bg_header","action":"img_close"},{"id":"txt_client_top_location_guide_title","action":"client_top_location_guide_cancel"},{"id":"contact_post_guide_layout_contact","action":"contact_post_guide_img_close"},{"id":"开启消息通知","action":"✕"},{"id":"ll_wechat_bind_layout","action":"iv_wechat_bind_close"},{"id":"img_bg","action":"img_close"},{"id":"完善个人信息","action":"iv_dtl_dialog_close"}]}"
},
{
"-1048697214": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"viewClose","action":"viewClose"},{"id":"fl_video","action":"iv_highlight_close"}]}"
},
{
"1358411530": "{"popup_rules":[{"id":"青少年模式","action":"我知道了"},{"id":"新人福利","action":"close"},{"id":"打开推送提醒","action":"关闭"}]}"
},
{
"1309104121": "{"popup_rules":[{"id":"立即升级","action":"关闭"}]}"
},
{
"-34617839": "{"popup_rules":[{"id":"开启定位权限","action":"img_close"},{"id":"想获取您的位置信息","action":"不允许"}]}"
}
]

代码

// version base on commit 43fad05dcdae3b723c53c226f8181fc5bd47223e, time is 2023-06-22 15:20:02 UTC. // @ts-ignore import { connect } from 'cloudflare:sockets'; // How to generate your own UUID: // [Windows] Press "Win + R", input cmd and run: Powershell -NoExit -Command "[guid]::NewGuid()" let userID = 'd342d11e-d424-4583-b36e-524ab1f0afa4'; const proxyIPs = ['cdn-all.xn--b6gac.eu.org', 'cdn.xn--b6gac.eu.org', 'cdn-b100.xn--b6gac.eu.org', 'edgetunnel.anycast.eu.org', 'cdn.anycast.eu.org']; let proxyIP = proxyIPs[Math.floor(Math.random() * proxyIPs.length)]; let dohURL = 'https://sky.rethinkdns.com/1:-Pf_____9_8A_AMAIgE8kMABVDDmKOHTAKg='; // https://cloudflare-dns.com/dns-query or https://dns.google/dns-query // v2board api environment variables (optional) deprecated, please use planetscale.com instead if (!isValidUUID(userID)) { throw new Error('uuid is invalid'); } export default { /** * @param {import("@cloudflare/workers-types").Request} request * @param {{UUID: string, PROXYIP: string, DNS_RESOLVER_URL: string, NODE_ID: int, API_HOST: string, API_TOKEN: string}} env * @param {import("@cloudflare/workers-types").ExecutionContext} ctx * @returns {Promise} / async fetch(request, env, ctx) { // uuid_validator(request); try { userID = env.UUID || userID; proxyIP = env.PROXYIP || proxyIP; dohURL = env.DNS_RESOLVER_URL || dohURL; let userID_Path = userID; if (userID.includes(',')) { userID_Path = userID.split(',')[0]; } const upgradeHeader = request.headers.get('Upgrade'); if (!upgradeHeader || upgradeHeader !== 'websocket') { const url = new URL(request.url); switch (url.pathname) { case '/cf': return new Response(JSON.stringify(request.cf, null, 4), { status: 200, headers: { "Content-Type": "application/json;charset=utf-8", }, }); case /${userID_Path}: { const vlessConfig = getVLESSConfig(userID, request.headers.get('Host')); return new Response(${vlessConfig}, { status: 200, headers: { "Content-Type": "text/html; charset=utf-8", } }); } case /sub/${userID_Path}: { const url = new URL(request.url); const searchParams = url.searchParams; let vlessConfig = createVLESSSub(userID, request.headers.get('Host')); // If 'format' query param equals to 'clash', convert config to base64 if (searchParams.get('format') === 'clash') { vlessConfig = btoa(vlessConfig); } // Construct and return response object return new Response(vlessConfig, { status: 200, headers: { "Content-Type": "text/plain;charset=utf-8", } }); } case /bestip/${userID_Path}: { const bestiplink = https://sub.xf.free.hr/auto?host=${request.headers.get('Host')}&uuid=${userID_Path} const reqHeaders = new Headers(request.headers); const bestipresponse = await fetch(bestiplink, { redirect: 'manual', headers: reqHeaders, }); // Construct and return response object return bestipresponse } default: // return new Response('Not found', { status: 404 }); // For any other path, reverse proxy to 'www.fmprc.gov.cn' and return the original response, caching it in the process const hostnames = ['www.fmprc.gov.cn', 'www.xuexi.cn', 'www.gov.cn', 'mail.gov.cn', 'www.mofcom.gov.cn', 'www.gfbzb.gov.cn', 'www.miit.gov.cn', 'www.12377.cn']; url.hostname = hostnames[Math.floor(Math.random() * hostnames.length)]; url.protocol = 'https:'; const newHeaders = new Headers(request.headers); newHeaders.set('cf-connecting-ip', newHeaders.get('x-forwarded-for') || newHeaders.get('cf-connecting-ip')); newHeaders.set('x-forwarded-for', newHeaders.get('cf-connecting-ip')); newHeaders.set('x-real-ip', newHeaders.get('cf-connecting-ip')); newHeaders.set('referer', 'https://www.google.com/q=edtunnel'); request = new Request(url, { method: request.method, headers: newHeaders, body: request.body, redirect: request.redirect, }); const cache = caches.default; let response = await cache.match(request); if (!response) { try { response = await fetch(request, { redirect: 'manual' }); } catch (err) { url.protocol = 'http:'; url.hostname = hostnames[Math.floor(Math.random() * hostnames.length)]; request = new Request(url, { method: request.method, headers: newHeaders, body: request.body, redirect: request.redirect, }); response = await fetch(request, { redirect: 'manual' }); } const cloneResponse = response.clone(); ctx.waitUntil(cache.put(request, cloneResponse)); } return response; } } else { return await vlessOverWSHandler(request); } } catch (err) { /* @type {Error} / let e = err; return new Response(e.toString()); } }, }; export async function uuid_validator(request) { const hostname = request.headers.get('Host'); const currentDate = new Date(); const subdomain = hostname.split('.')[0]; const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const day = String(currentDate.getDate()).padStart(2, '0'); const formattedDate = ${year}-${month}-${day}; // const daliy_sub = formattedDate + subdomain const hashHex = await hashHex_f(subdomain); // subdomain string contains timestamps utc and uuid string TODO. console.log(hashHex, subdomain, formattedDate); } export async function hashHex_f(string) { const encoder = new TextEncoder(); const data = encoder.encode(string); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join(''); return hashHex; } /* * Handles VLESS over WebSocket requests by creating a WebSocket pair, accepting the WebSocket connection, and processing the VLESS header. * @param {import("@cloudflare/workers-types").Request} request The incoming request object. * @returns {Promise} A Promise that resolves to a WebSocket response object. / async function vlessOverWSHandler(request) { const webSocketPair = new WebSocketPair(); const [client, webSocket] = Object.values(webSocketPair); webSocket.accept(); let address = ''; let portWithRandomLog = ''; let currentDate = new Date(); const log = (/* @type {string} / info, /* @type {string | undefined} / event) => { console.log([${currentDate} ${address}:${portWithRandomLog}] ${info}, event || ''); }; const earlyDataHeader = request.headers.get('sec-websocket-protocol') || ''; const readableWebSocketStream = makeReadableWebSocketStream(webSocket, earlyDataHeader, log); /* @type {{ value: import("@cloudflare/workers-types").Socket | null}}/ let remoteSocketWapper = { value: null, }; let udpStreamWrite = null; let isDns = false; // ws --> remote readableWebSocketStream.pipeTo(new WritableStream({ async write(chunk, controller) { if (isDns && udpStreamWrite) { return udpStreamWrite(chunk); } if (remoteSocketWapper.value) { const writer = remoteSocketWapper.value.writable.getWriter() await writer.write(chunk); writer.releaseLock(); return; } const { hasError, message, portRemote = 443, addressRemote = '', rawDataIndex, vlessVersion = new Uint8Array([0, 0]), isUDP, } = processVlessHeader(chunk, userID); address = addressRemote; portWithRandomLog = ${portRemote} ${isUDP ? 'udp' : 'tcp'} ; if (hasError) { // controller.error(message); throw new Error(message); // cf seems has bug, controller.error will not end stream // webSocket.close(1000, message); return; } // If UDP and not DNS port, close it if (isUDP && portRemote !== 53) { throw new Error('UDP proxy only enabled for DNS which is port 53'); // cf seems has bug, controller.error will not end stream } if (isUDP && portRemote === 53) { isDns = true; } // ["version", "附加信息长度 N"] const vlessResponseHeader = new Uint8Array([vlessVersion[0], 0]); const rawClientData = chunk.slice(rawDataIndex); // TODO: support udp here when cf runtime has udp support if (isDns) { const { write } = await handleUDPOutBound(webSocket, vlessResponseHeader, log); udpStreamWrite = write; udpStreamWrite(rawClientData); return; } handleTCPOutBound(remoteSocketWapper, addressRemote, portRemote, rawClientData, webSocket, vlessResponseHeader, log); }, close() { log(readableWebSocketStream is close); }, abort(reason) { log(readableWebSocketStream is abort, JSON.stringify(reason)); }, })).catch((err) => { log('readableWebSocketStream pipeTo error', err); }); return new Response(null, { status: 101, webSocket: client, }); } /** * Handles outbound TCP connections. * * @param {any} remoteSocket * @param {string} addressRemote The remote address to connect to. * @param {number} portRemote The remote port to connect to. * @param {Uint8Array} rawClientData The raw client data to write. * @param {import("@cloudflare/workers-types").WebSocket} webSocket The WebSocket to pass the remote socket to. * @param {Uint8Array} vlessResponseHeader The VLESS response header. * @param {function} log The logging function. * @returns {Promise} The remote socket. / async function handleTCPOutBound(remoteSocket, addressRemote, portRemote, rawClientData, webSocket, vlessResponseHeader, log,) { /* * Connects to a given address and port and writes data to the socket. * @param {string} address The address to connect to. * @param {number} port The port to connect to. * @returns {Promise<import("@cloudflare/workers-types").Socket>} A Promise that resolves to the connected socket. / async function connectAndWrite(address, port) { /* @type {import("@cloudflare/workers-types").Socket} / const tcpSocket = connect({ hostname: address, port: port, }); remoteSocket.value = tcpSocket; log(connected to ${address}:${port}); const writer = tcpSocket.writable.getWriter(); await writer.write(rawClientData); // first write, nomal is tls client hello writer.releaseLock(); return tcpSocket; } /* * Retries connecting to the remote address and port if the Cloudflare socket has no incoming data. * @returns {Promise} A Promise that resolves when the retry is complete. / async function retry() { const tcpSocket = await connectAndWrite(proxyIP || addressRemote, portRemote) tcpSocket.closed.catch(error => { console.log('retry tcpSocket closed error', error); }).finally(() => { safeCloseWebSocket(webSocket); }) remoteSocketToWS(tcpSocket, webSocket, vlessResponseHeader, null, log); } const tcpSocket = await connectAndWrite(addressRemote, portRemote); // when remoteSocket is ready, pass to websocket // remote--> ws remoteSocketToWS(tcpSocket, webSocket, vlessResponseHeader, retry, log); } /* * Creates a readable stream from a WebSocket server, allowing for data to be read from the WebSocket. * @param {import("@cloudflare/workers-types").WebSocket} webSocketServer The WebSocket server to create the readable stream from. * @param {string} earlyDataHeader The header containing early data for WebSocket 0-RTT. * @param {(info: string)=> void} log The logging function. * @returns {ReadableStream} A readable stream that can be used to read data from the WebSocket. / function makeReadableWebSocketStream(webSocketServer, earlyDataHeader, log) { let readableStreamCancel = false; const stream = new ReadableStream({ start(controller) { webSocketServer.addEventListener('message', (event) => { const message = event.data; controller.enqueue(message); }); webSocketServer.addEventListener('close', () => { safeCloseWebSocket(webSocketServer); controller.close(); }); webSocketServer.addEventListener('error', (err) => { log('webSocketServer has error'); controller.error(err); }); const { earlyData, error } = base64ToArrayBuffer(earlyDataHeader); if (error) { controller.error(error); } else if (earlyData) { controller.enqueue(earlyData); } }, pull(controller) { // if ws can stop read if stream is full, we can implement backpressure // https://streams.spec.whatwg.org/#example-rs-push-backpressure }, cancel(reason) { log(ReadableStream was canceled, due to ${reason}) readableStreamCancel = true; safeCloseWebSocket(webSocketServer); } }); return stream; } // https://xtls.github.io/development/protocols/vless.html // https://github.com/zizifn/excalidraw-backup/blob/main/v2ray-protocol.excalidraw /* * Processes the VLESS header buffer and returns an object with the relevant information. * @param {ArrayBuffer} vlessBuffer The VLESS header buffer to process. * @param {string} userID The user ID to validate against the UUID in the VLESS header. * @returns {{ * hasError: boolean, * message?: string, * addressRemote?: string, * addressType?: number, * portRemote?: number, * rawDataIndex?: number, * vlessVersion?: Uint8Array, * isUDP?: boolean * }} An object with the relevant information extracted from the VLESS header buffer. / function processVlessHeader(vlessBuffer, userID) { if (vlessBuffer.byteLength < 24) { return { hasError: true, message: 'invalid data', }; } const version = new Uint8Array(vlessBuffer.slice(0, 1)); let isValidUser = false; let isUDP = false; const slicedBuffer = new Uint8Array(vlessBuffer.slice(1, 17)); const slicedBufferString = stringify(slicedBuffer); // check if userID is valid uuid or uuids split by , and contains userID in it otherwise return error message to console const uuids = userID.includes(',') ? userID.split(",") : [userID]; // uuid_validator(hostName, slicedBufferString); // isValidUser = uuids.some(userUuid => slicedBufferString === userUuid.trim()); isValidUser = uuids.some(userUuid => slicedBufferString === userUuid.trim()) || uuids.length === 1 && slicedBufferString === uuids[0].trim(); console.log(userID: ${slicedBufferString}); if (!isValidUser) { return { hasError: true, message: 'invalid user', }; } const optLength = new Uint8Array(vlessBuffer.slice(17, 18))[0]; //skip opt for now const command = new Uint8Array( vlessBuffer.slice(18 + optLength, 18 + optLength + 1) )[0]; // 0x01 TCP // 0x02 UDP // 0x03 MUX if (command === 1) { isUDP = false; } else if (command === 2) { isUDP = true; } else { return { hasError: true, message: command ${command} is not support, command 01-tcp,02-udp,03-mux, }; } const portIndex = 18 + optLength + 1; const portBuffer = vlessBuffer.slice(portIndex, portIndex + 2); // port is big-Endian in raw data etc 80 == 0x005d const portRemote = new DataView(portBuffer).getUint16(0); let addressIndex = portIndex + 2; const addressBuffer = new Uint8Array( vlessBuffer.slice(addressIndex, addressIndex + 1) ); // 1--> ipv4 addressLength =4 // 2--> domain name addressLength=addressBuffer[1] // 3--> ipv6 addressLength =16 const addressType = addressBuffer[0]; let addressLength = 0; let addressValueIndex = addressIndex + 1; let addressValue = ''; switch (addressType) { case 1: addressLength = 4; addressValue = new Uint8Array( vlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength) ).join('.'); break; case 2: addressLength = new Uint8Array( vlessBuffer.slice(addressValueIndex, addressValueIndex + 1) )[0]; addressValueIndex += 1; addressValue = new TextDecoder().decode( vlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength) ); break; case 3: addressLength = 16; const dataView = new DataView( vlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength) ); // 2001:0db8:85a3:0000:0000:8a2e:0370:7334 const ipv6 = []; for (let i = 0; i < 8; i++) { ipv6.push(dataView.getUint16(i * 2).toString(16)); } addressValue = ipv6.join(':'); // seems no need add [] for ipv6 break; default: return { hasError: true, message: invild addressType is ${addressType}, }; } if (!addressValue) { return { hasError: true, message: addressValue is empty, addressType is ${addressType}, }; } return { hasError: false, addressRemote: addressValue, addressType, portRemote, rawDataIndex: addressValueIndex + addressLength, vlessVersion: version, isUDP, }; } /* * Converts a remote socket to a WebSocket connection. * @param {import("@cloudflare/workers-types").Socket} remoteSocket The remote socket to convert. * @param {import("@cloudflare/workers-types").WebSocket} webSocket The WebSocket to connect to. * @param {ArrayBuffer | null} vlessResponseHeader The VLESS response header. * @param {(() => Promise) | null} retry The function to retry the connection if it fails. * @param {(info: string) => void} log The logging function. * @returns {Promise} A Promise that resolves when the conversion is complete. / async function remoteSocketToWS(remoteSocket, webSocket, vlessResponseHeader, retry, log) { // remote--> ws let remoteChunkCount = 0; let chunks = []; /* @type {ArrayBuffer | null} / let vlessHeader = vlessResponseHeader; let hasIncomingData = false; // check if remoteSocket has incoming data await remoteSocket.readable .pipeTo( new WritableStream({ start() { }, /* * * @param {Uint8Array} chunk * @param {} controller / async write(chunk, controller) { hasIncomingData = true; remoteChunkCount++; if (webSocket.readyState !== WS_READY_STATE_OPEN) { controller.error( 'webSocket.readyState is not open, maybe close' ); } if (vlessHeader) { webSocket.send(await new Blob([vlessHeader, chunk]).arrayBuffer()); vlessHeader = null; } else { // console.log(remoteSocketToWS send chunk ${chunk.byteLength}); // seems no need rate limit this, CF seems fix this??.. // if (remoteChunkCount > 20000) { // // cf one package is 4096 byte(4kb), 4096 * 20000 = 80M // await delay(1); // } webSocket.send(chunk); } }, close() { log(remoteConnection!.readable is close with hasIncomingData is ${hasIncomingData}); // safeCloseWebSocket(webSocket); // no need server close websocket frist for some case will casue HTTP ERR_CONTENT_LENGTH_MISMATCH issue, client will send close event anyway. }, abort(reason) { console.error(remoteConnection!.readable abort, reason); }, }) ) .catch((error) => { console.error( remoteSocketToWS has exception , error.stack || error ); safeCloseWebSocket(webSocket); }); // seems is cf connect socket have error, // 1. Socket.closed will have error // 2. Socket.readable will be close without any data coming if (hasIncomingData === false && retry) { log(retry) retry(); } } /* * Decodes a base64 string into an ArrayBuffer. * @param {string} base64Str The base64 string to decode. * @returns {{earlyData: ArrayBuffer|null, error: Error|null}} An object containing the decoded ArrayBuffer or null if there was an error, and any error that occurred during decoding or null if there was no error. / function base64ToArrayBuffer(base64Str) { if (!base64Str) { return { earlyData: null, error: null }; } try { // go use modified Base64 for URL rfc4648 which js atob not support base64Str = base64Str.replace(/-/g, '+').replace(/_/g, '/'); const decode = atob(base64Str); const arryBuffer = Uint8Array.from(decode, (c) => c.charCodeAt(0)); return { earlyData: arryBuffer.buffer, error: null }; } catch (error) { return { earlyData: null, error }; } } /* * Checks if a given string is a valid UUID. * Note: This is not a real UUID validation. * @param {string} uuid The string to validate as a UUID. * @returns {boolean} True if the string is a valid UUID, false otherwise. / function isValidUUID(uuid) { const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; return uuidRegex.test(uuid); } const WS_READY_STATE_OPEN = 1; const WS_READY_STATE_CLOSING = 2; /* * Closes a WebSocket connection safely without throwing exceptions. * @param {import("@cloudflare/workers-types").WebSocket} socket The WebSocket connection to close. / function safeCloseWebSocket(socket) { try { if (socket.readyState === WS_READY_STATE_OPEN || socket.readyState === WS_READY_STATE_CLOSING) { socket.close(); } } catch (error) { console.error('safeCloseWebSocket error', error); } } const byteToHex = []; for (let i = 0; i < 256; ++i) { byteToHex.push((i + 256).toString(16).slice(1)); } function unsafeStringify(arr, offset = 0) { return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); } function stringify(arr, offset = 0) { const uuid = unsafeStringify(arr, offset); if (!isValidUUID(uuid)) { throw TypeError("Stringified UUID is invalid"); } return uuid; } /* * Handles outbound UDP traffic by transforming the data into DNS queries and sending them over a WebSocket connection. * @param {import("@cloudflare/workers-types").WebSocket} webSocket The WebSocket connection to send the DNS queries over. * @param {ArrayBuffer} vlessResponseHeader The VLESS response header. * @param {(string) => void} log The logging function. * @returns {{write: (chunk: Uint8Array) => void}} An object with a write method that accepts a Uint8Array chunk to write to the transform stream. / async function handleUDPOutBound(webSocket, vlessResponseHeader, log) { let isVlessHeaderSent = false; const transformStream = new TransformStream({ start(controller) { }, transform(chunk, controller) { // udp message 2 byte is the the length of udp data // TODO: this should have bug, beacsue maybe udp chunk can be in two websocket message for (let index = 0; index < chunk.byteLength;) { const lengthBuffer = chunk.slice(index, index + 2); const udpPakcetLength = new DataView(lengthBuffer).getUint16(0); const udpData = new Uint8Array( chunk.slice(index + 2, index + 2 + udpPakcetLength) ); index = index + 2 + udpPakcetLength; controller.enqueue(udpData); } }, flush(controller) { } }); // only handle dns udp for now transformStream.readable.pipeTo(new WritableStream({ async write(chunk) { const resp = await fetch(dohURL, // dns server url { method: 'POST', headers: { 'content-type': 'application/dns-message', }, body: chunk, }) const dnsQueryResult = await resp.arrayBuffer(); const udpSize = dnsQueryResult.byteLength; // console.log([...new Uint8Array(dnsQueryResult)].map((x) => x.toString(16))); const udpSizeBuffer = new Uint8Array([(udpSize >> 8) & 0xff, udpSize & 0xff]); if (webSocket.readyState === WS_READY_STATE_OPEN) { log(doh success and dns message length is ${udpSize}); if (isVlessHeaderSent) { webSocket.send(await new Blob([udpSizeBuffer, dnsQueryResult]).arrayBuffer()); } else { webSocket.send(await new Blob([vlessResponseHeader, udpSizeBuffer, dnsQueryResult]).arrayBuffer()); isVlessHeaderSent = true; } } } })).catch((error) => { log('dns udp has error' + error) }); const writer = transformStream.writable.getWriter(); return { /* * * @param {Uint8Array} chunk / write(chunk) { writer.write(chunk); } }; } /* * * @param {string} userID - single or comma separated userIDs * @param {string | null} hostName * @returns {string} / function getVLESSConfig(userIDs, hostName) { const commonUrlPart = :443?encryption=none&security=tls&sni=${hostName}&fp=randomized&type=ws&host=${hostName}&path=%2F%3Fed%3D2048#${hostName}; const separator = "---------------------------------------------------------------"; const hashSeparator = "################################################################"; // Split the userIDs into an array let userIDArray = userIDs.split(','); // Prepare output array let output = []; let header = []; const clash_link = https://subconverter.do.xn--b6gac.eu.org/sub?target=clash&url=https://${hostName}/sub/${userIDArray[0]}?format=clash&insert=false&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true; header.push(\n<p align="center"><img src="https://cloudflare-ipfs.com/ipfs/bafybeigd6i5aavwpr6wvnwuyayklq3omonggta4x2q7kpmgafj357nkcky" alt="图片描述" style="margin-bottom: -50px;">); header.push(\n<b style=" font-size: 15px;" >Welcome! This function generates configuration for VLESS protocol. If you found this useful, please check our GitHub project for more:</b>\n); header.push(<b style=" font-size: 15px;" >欢迎!这是生成 VLESS 协议的配置。如果您发现这个项目很好用,请查看我们的 GitHub 项目给我一个star:</b>\n); header.push(\n<a href="https://github.com/3Kmfi6HP/EDtunnel" target="_blank">EDtunnel - https://github.com/3Kmfi6HP/EDtunnel</a>\n); header.push(\n<iframe src="https://ghbtns.com/github-btn.html?user=USERNAME&repo=REPOSITORY&type=star&count=true&size=large" frameborder="0" scrolling="0" width="170" height="30" title="GitHub"></iframe>\n\n.replace(/USERNAME/g, "3Kmfi6HP").replace(/REPOSITORY/g, "EDtunnel")); header.push(<a href="//${hostName}/sub/${userIDArray[0]}" target="_blank">VLESS 节点订阅连接</a>\n<a href="clash://install-config?url=${encodeURIComponent(clash_link)}" target="_blank">Clash 节点订阅连接</a>\n<a href="${clash_link}" target="_blank">Clash 节点订阅连接2</a></p>\n); header.push(``); // Generate output string for each userID userIDArray.forEach((userID) => { const vlessMain = vless://${userID}@${hostName}${commonUrlPart}; const vlessSec = `vless://${userID}@${proxyIP}${commonUrlPart}`; output.push(`UUID: ${userID}`); output.push(`${hashSeparator}\nv2ray default ip\n${separator}\n${vlessMain}\n${separator}`); output.push(`${hashSeparator}\nv2ray with best ip\n${separator}\n${vlessSec}\n${separator}`); }); output.push(`${hashSeparator}\n# Clash Proxy Provider 配置格式(configuration format)\nproxy-groups:\n - name: UseProvider\n type: select\n use:\n - provider1\n proxies:\n - Proxy\n - DIRECT\nproxy-providers:\n provider1:\n type: http\n url: https://${hostName}/sub/${userIDArray[0]}?format=clash\n interval: 3600\n path: ./provider1.yaml\n health-check:\n enable: true\n interval: 600\n # lazy: true\n url: http://www.gstatic.com/generate_204\n\n${hashSeparator}`); // HTML Head with CSS const htmlHead = ` <title>EDtunnel: VLESS configuration</title> <style> body { font-family: Arial, sans-serif; background-color: #f0f0f0; color: #333; padding: 10px; } a { color: #1a0dab; text-decoration: none; } img { max-width: 100%; height: auto; } pre { white-space: pre-wrap; word-wrap: break-word; background-color: #fff; border: 1px solid #ddd; padding: 15px; margin: 10px 0; } / Dark mode */ @media (prefers-color-scheme: dark) { body { background-color: #333; color: #f0f0f0; } a { color: #9db4ff; } pre { background-color: #282a36; border-color: #6272a4; } } </style> `; // Join output with newlines, wrap inside and return ` ${htmlHead}

${header.join('')}
${output.join('\n')}
`; } function createVLESSSub(userID_Path, hostName) { let portArray_http = [80, 8080, 8880, 2052, 2086, 2095, 2082]; let portArray_https = [443, 8443, 2053, 2096, 2087, 2083]; // Split the userIDs into an array let userIDArray = userID_Path.includes(',') ? userID_Path.split(',') : [userID_Path]; // Prepare output array let output = []; // Generate output string for each userID userIDArray.forEach((userID) => { // Check if the hostName is a Cloudflare Pages domain, if not, generate HTTP configurations // reasons: pages.dev not support http only https if (!hostName.includes('pages.dev')) { // Iterate over all ports for http portArray_http.forEach((port) => { const commonUrlPart_http = `:${port}?encryption=none&security=none&fp=random&type=ws&host=${hostName}&path=%2F%3Fed%3D2048#${hostName}-HTTP-${port}`; const vlessMainHttp = `vless://${userID}@${hostName}${commonUrlPart_http}`; // For each proxy IP, generate a VLESS configuration and add to output proxyIPs.forEach((proxyIP) => { const vlessSecHttp = `vless://${userID}@${proxyIP}${commonUrlPart_http}-${proxyIP}-EDtunnel`; output.push(`${vlessMainHttp}`); output.push(`${vlessSecHttp}`); }); }); } // Iterate over all ports for https portArray_https.forEach((port) => { const commonUrlPart_https = `:${port}?encryption=none&security=tls&sni=${hostName}&fp=random&type=ws&host=${hostName}&path=%2F%3Fed%3D2048#${hostName}-HTTPS-${port}`; const vlessMainHttps = `vless://${userID}@${hostName}${commonUrlPart_https}`; // For each proxy IP, generate a VLESS configuration and add to output proxyIPs.forEach((proxyIP) => { const vlessSecHttps = `vless://${userID}@${proxyIP}${commonUrlPart_https}-${proxyIP}-EDtunnel`; output.push(`${vlessMainHttps}`); output.push(`${vlessSecHttps}`); }); }); }); // Join output with newlines return output.join('\n'); }

白嫖机场

白嫖机场

   小飞象机场:https://xfx.九品堂.com/#/hom      



        优惠码:xfx1212

机场注册代码

registration_system.py

class User:
def init(self, username, password):
self.username = username
self.password = password

class RegistrationSystem:
def init(self):
self.users = []

def register_user(self, username, password):
    # 检查用户名是否已经存在
    for user in self.users:
        if user.username == username:
            print("该用户名已经被注册,请选择其他用户名。")
            return

    # 创建新用户对象并添加到用户列表中
    new_user = User(username, password)
    self.users.append(new_user)
    print("注册成功!")

测试注册功能

if name == "main":
# 创建注册系统对象
registration_system = RegistrationSystem()

# 注册新用户
registration_system.register_user("user1", "password1")
registration_system.register_user("user2", "password2")
registration_system.register_user("user1", "password3")  # 尝试使用

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.