Pārlūkot izejas kodu

[add][任务完成弹出标签页]

zhangwei 2 gadi atpakaļ
vecāks
revīzija
dc7339cbe3

+ 7 - 2
src/entry/background.js

@@ -21,11 +21,16 @@ setMessageCount();
 
 // 消息通讯
 chrome.runtime.onConnect.addListener(function (port) {
-    port.onDisconnect.addListener(function() {
+    port.onDisconnect.addListener(function () {
         onDisconnectHandler(port);
     });
 });
 
+// 当有可用更新时触发
+chrome.runtime.onUpdateAvailable.addListener(() => {
+    chrome.runtime.reload()
+})
+
 chrome.runtime.onInstalled.addListener(onInstalledMethod);
 
 chrome.runtime.onMessage.addListener(onMessageMethod);
@@ -58,7 +63,7 @@ function onMessageMethod(req, sender, sendResponse) {
             case 'CONTENT_SEND_CODE':
                 twitterPinLoginCode(sender, req.code);
             case 'CONTENT_TWITTER_LOGIN':
-                if(req.data){
+                if (req.data) {
                     twitterPinLoginToken()
                 }
                 break

+ 6 - 0
src/entry/content.js

@@ -35,6 +35,9 @@ window.onmessage = (res) => {
             case "IFRAME_SHOW_TWITTER_PUBLISH_DIALOG":
                 showTwitterPublishDialogHandler(res.data.publishRes);
                 break;
+            // case "IFRAME_DO_TASK":
+            //     findTweetByIdDoTask(res.data.task_data, res.data.task_type)
+            //     break
         }
     }
 };
@@ -53,6 +56,9 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
             console.log('BACK_TWITTER_SHORT_URL')
             changeQueueNum(1)
             break
+        case 'TIME':
+            alert('time')
+            break
     }
 })
 

+ 13 - 0
src/http/redPacket.js

@@ -82,3 +82,16 @@ export function terminatedLuckdrop(params){
     data: params
   }) 
 }
+
+
+// 上报红包任务完成事件
+// 1 Twitter follow Twitter ScreenName
+// 2 Tweet like
+// 3 Retweet
+export function addFinishEvent(params){
+  return service({
+    url: `/post/luckdrop/addFinishEvent`,
+    method: 'post',
+    data: params
+  })
+}

+ 2 - 1
src/logic/background/fetch/twitter.js

@@ -31,7 +31,7 @@ export async function fetchTtwitterRequestToken() {
     })
 }
 
-export async function fetchTwitterLogin(oauthToken, oauthVerifier, receivedIds = []) {
+export async function fetchTwitterLogin(oauthToken,consumerKey, oauthVerifier, receivedIds = []) {
     let storage_mid = await getChromeStorage('mid') || ''
     const { mid } = storage_mid || {}
     return new Promise(function (resolve, reject) {
@@ -49,6 +49,7 @@ export async function fetchTwitterLogin(oauthToken, oauthVerifier, receivedIds =
                 "params": {
                     "oauthToken": oauthToken,
                     "oauthVerifier": oauthVerifier,
+                    "consumerKey":consumerKey,
                     "receivedIds": receivedIds
                 }
             }),

+ 31 - 29
src/logic/background/twitter.js

@@ -1,9 +1,10 @@
 import { fetchTtwitterRequestToken, fetchTwitterLogin, fetchTwitterShortUrl, fetchAllMessageInfo, fetchReadTaskAllMsg, getDiscordUserInfo } from '@/logic/background/fetch/twitter.js'
-import { LANDING_PAGE, LANDING_PAGE_MID, setChromeStorage, setChromeCookie, getChromeCookie ,getChromeStorage, removeChromeCookie} from '@/uilts/chromeExtension.js'
+import { LANDING_PAGE, LANDING_PAGE_MID, setChromeStorage, setChromeCookie, getChromeCookie, getChromeStorage, removeChromeCookie } from '@/uilts/chromeExtension.js'
 import { guid } from '@/uilts/help.js'
 import { pageUrl, discordAuthRedirectUri } from '@/http/configAPI'
 
 let authToken = ''
+let consumerKey = ''
 export function twitterPinLoginToken() {
     // 1.判断是否登陆了
     getChromeStorage('userInfo', (res) => {
@@ -11,6 +12,7 @@ export function twitterPinLoginToken() {
         if (!res) {
             fetchTtwitterRequestToken().then((res) => {
                 authToken = res.data.authToken
+                consumerKey = res.data.consumerKey
                 chrome.tabs.create({
                     url: `https://api.twitter.com/oauth/authorize?oauth_token=${res.data.authToken}`
                 })
@@ -52,7 +54,7 @@ export function twitterPinLoginCode(sender, code) {
         }
         // 发送请求
         // token,code
-        fetchTwitterLogin(authToken, code, receivedIds).then(res => {
+        fetchTwitterLogin(authToken, consumerKey, code, receivedIds).then(res => {
             if (res.code == 0) {
                 setChromeStorage({ userInfo: JSON.stringify(res.data) })
                 // 获取全局消息数据
@@ -64,14 +66,14 @@ export function twitterPinLoginCode(sender, code) {
 }
 
 let discordAuthWindowId = '';
-export function saveDiscordAuthWindowId (params) {
-    let {windowId = ''} = params.data || {};
+export function saveDiscordAuthWindowId(params) {
+    let { windowId = '' } = params.data || {};
     discordAuthWindowId = windowId;
 }
 
-export function discordLoginCode({code}, sender) {
+export function discordLoginCode({ code }, sender) {
     console.log('sender', sender)
-    let {windowId, id} = sender.tab || {};
+    let { windowId, id } = sender.tab || {};
     chrome.tabs.remove(id);
 
     // 发送请求
@@ -82,7 +84,7 @@ export function discordLoginCode({code}, sender) {
         if (res.code == 0) {
             setTimeout(() => {
                 sendActivetabMessage({
-                    actionType: 'BACK_DISCORD_LOGIN_SUCCESS'    
+                    actionType: 'BACK_DISCORD_LOGIN_SUCCESS'
                 });
             })
         }
@@ -92,7 +94,7 @@ export function discordLoginCode({code}, sender) {
     //     chrome.windows.remove(
     //         windowId,
     //         function () {
-                
+
     //         }
     //     )
     // }
@@ -245,19 +247,19 @@ export function popupRePublish(req) {
 }
 
 export function setBadgeInfo(params) {
-    let {text = '', color = '#DF3535'} = params.data || {};
-    chrome.action.setBadgeText({text: text});
-    chrome.action.setBadgeBackgroundColor({color: color });
+    let { text = '', color = '#DF3535' } = params.data || {};
+    chrome.action.setBadgeText({ text: text });
+    chrome.action.setBadgeBackgroundColor({ color: color });
 }
 
 export function hideBadge() {
-    chrome.action.setBadgeText({text: ''});
-    chrome.action.setBadgeBackgroundColor({color: [0, 0, 0, 0]});
+    chrome.action.setBadgeText({ text: '' });
+    chrome.action.setBadgeBackgroundColor({ color: [0, 0, 0, 0] });
 }
 
-export async function setMessageCount () {
+export async function setMessageCount() {
     const { accessToken: token = '', uid = '' } = await getChromeStorage('userInfo') || {}
-    if(token) {
+    if (token) {
         getMessageInfo();
         createAlarm();
     }
@@ -266,32 +268,32 @@ export async function setMessageCount () {
 function createAlarm() {
     let alarmInfo = {
         //1分鐘之後開始(該值不能小於1) 
-        delayInMinutes: 1, 
+        delayInMinutes: 1,
         //與上方等同的寫法是 
         // when : Date.now() + n,
         //開始後每一分鐘執行一次(該值不能小于1) 
-        periodInMinutes : 1 
+        periodInMinutes: 1
     };
 
     //每次加載就清空定時器
     chrome.alarms.clearAll();
-    
-    chrome.alarms.onAlarm.addListener(function(alarm) {
+
+    chrome.alarms.onAlarm.addListener(function (alarm) {
         console.log("onAlarm-", alarm);
         getMessageInfo();
     });
 
     //創造定時器
-    chrome.alarms.create('denetChromeAlarm',alarmInfo);
+    chrome.alarms.create('denetChromeAlarm', alarmInfo);
 }
 
-export  function getMessageInfo () {
+export function getMessageInfo() {
     fetchAllMessageInfo().then(res => {
-        if(res.code == 0) {
-            let {unReadCountTotal = 0 } = res.data;
-            if(unReadCountTotal > 0) {
-                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal+'';
-                setBadgeInfo({data: {text}});
+        if (res.code == 0) {
+            let { unReadCountTotal = 0 } = res.data;
+            if (unReadCountTotal > 0) {
+                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal + '';
+                setBadgeInfo({ data: { text } });
             } else {
                 hideBadge();
             }
@@ -299,11 +301,11 @@ export  function getMessageInfo () {
     })
 }
 
-export function readTaskAllMsg({msgType}, cb) {
+export function readTaskAllMsg({ msgType }, cb) {
     fetchReadTaskAllMsg({
         msgType // 1:任务红包 2:钱包明细
     }).then(res => {
-        if(res.code == 0) {
+        if (res.code == 0) {
             cb && cb();
         }
     });
@@ -312,7 +314,7 @@ export function readTaskAllMsg({msgType}, cb) {
 export const onDisconnectHandler = (port) => {
     if (port.name === "popup" || port.name === "popup_transactions") {
         let msgType = port.name === "popup" ? 1 : 2;
-        readTaskAllMsg({msgType},() => {
+        readTaskAllMsg({ msgType }, () => {
             getMessageInfo();
         })
     }

+ 104 - 4
src/logic/content/twitter.js

@@ -1,5 +1,5 @@
 import { getChromeStorage, setChromeStorage } from '@/uilts/chromeExtension.js'
-import { throttle } from '@/uilts/help'
+import { throttle, getQueryString } from '@/uilts/help'
 import { discordAuthRedirectUri } from '@/http/configAPI'
 import { reportSrcPublishEvent } from '@/http/publishApi'
 import Report from "@/log-center/log"
@@ -574,6 +574,16 @@ export function initExecuteScript(changes) {
         }
     }
 }
+
+const createIframe = ({ url, tweet_Id }, callback) => {
+    let iframe = document.createElement('iframe')
+    iframe.id = `tweetId${tweet_Id}`
+    iframe.src = url
+    iframe.onload = () => {
+        callback()
+    }
+}
+
 // 初始化
 export function init() {
     getDiscordAuthCode();
@@ -595,7 +605,6 @@ export function init() {
                     onChangePageMain(targetNode)
                     changeQueueNum(1)
                 }
-                console.log('queue_num', queue_num)
                 if (queue_num <= 0) {
                     return
                 }
@@ -606,8 +615,7 @@ export function init() {
         }
     }, 1000);
     renderDom();
-
-
+    checkTwitterTaskState()
     getChromeStorage("popupShowPublishDialog", (res) => {
         console.log("popupShowPublishDialog", res);
         if (res && res.show) {
@@ -629,4 +637,96 @@ export function init() {
             }, 800);
         }
     });
+}
+
+// 根据推特id找到dom,完成任务
+export function findTweetByIdDoTask({ tweet_Id = '', follow_names = [] }, task_type = 'like') {
+    // 1.根据推特ID寻找推文,获取卡片
+    // 获取所有卡片参数
+    let card_json_data = parseCard.parseAllDeNetCardParmas()
+    let result = card_json_data.filter((item) => { return item.tweet_Id == tweet_Id }) || []
+    if (result.length < 1) {
+        return
+    }
+    result = result[0]
+
+    switch (task_type) {
+        case 'like':
+            // https://twitter.com/intent/retweet?tweet_id=1525900221628223491
+            if (result.dom_card) {
+                result.dom_card.querySelector('div[data-testid=like]').click()
+                result.dom_card.querySelector('iframe').contentWindow.postMessage({ actionType: 'CONTENT_DONE_TASK', task_type, }, '*');
+            }
+            break;
+        case 'retweet':
+            if (result.dom_card) {
+                result.dom_card.querySelector('div[data-testid=retweet]').click()
+                result.dom_card.querySelector('div[data-testid=retweetConfirm]').click()
+            }
+            break
+        case 'follow':
+            follow_names.forEach((item) => {
+                window.open(`https://twitter.com/intent/follow?screen_name=${item}&tweet_Id=${tweet_Id}`)
+            })
+            break
+    }
+}
+
+
+
+// 校验关注推特状态 
+export function checkTwitterTaskState() {
+    let task_type = ''
+    let url = window.location.href
+    let tweet_Id
+    let task_data = {
+        follow_name: ''
+    }
+    // 校验当前链接
+    if (url.includes('https://twitter.com/intent/retweet')) {
+        task_type = 'retweet'
+    } else if (url.includes('https://twitter.com/intent/follow')) {
+        task_type = 'follow'
+        task_data.follow_name = getQueryString('screen_name')
+    } else if (url.includes('https://twitter.com/intent/like')) {
+        task_type = 'like'
+    } else {
+        return
+    }
+    tweet_Id = getQueryString('tweet_id')
+
+    // 获取关注名字 获取推特Id    
+    let confirm_btn = document.querySelector('div[data-testid=confirmationSheetConfirm]')
+    let confirm_btn_status
+    // let page_follow_btn = document.querySelector('div[aria-describedby]')
+    // let page_follow_btn_status
+
+    let observer = new MutationObserver(() => {
+        if (confirm_btn && !confirm_btn_status) {
+            confirm_btn_status = true
+            confirm_btn.onclick = (e) => {
+                chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id, task_type, task_data }, () => { })
+            }
+        } else {
+            confirm_btn = document.querySelector('div[data-testid=confirmationSheetConfirm]')
+        }
+        // if (page_follow_btn && page_follow_btn.dataset && page_follow_btn.dataset.testid && !page_follow_btn_status) {
+        //     page_follow_btn_status = true
+        //     if (page_follow_btn.dataset.testid.includes('unfollow')) {
+        //         // 发送
+        //         chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id }, () => { })
+        //     }
+        // } else {
+        //     page_follow_btn = document.querySelector('div[aria-describedby]')
+        // }
+
+        if (confirm_btn_status) {
+            observer.disconnect()
+        }
+    });
+    observer.observe(document.body, { attributes: false, childList: true, subtree: true });
+
+    // 打开iframe 
+    // 点击操作
+    // 删除iframe
 }

+ 5 - 6
src/rules/rules_1.json

@@ -1,20 +1,19 @@
 [
     {
         "id": 1,
+        "priority":1,
         "condition": {
+            "urlFilter": "twitter.com"
         },
         "action": {
             "type": "modifyHeaders",
             "responseHeaders": [
                 {
                     "header": "X-Frame-Options",
-                    "operation": "remove"
-                },
-                {
-                    "header": "Content-Security-Policy",
-                    "operation": "remove"
+                    "operation": "set",
+                    "value":"ALLOW-FROM  https://twitter.com"
                 }
             ]
         }
     }
-]
+]

+ 167 - 69
src/view/iframe/red-packet/red-packet.vue

@@ -297,7 +297,7 @@ export default {
 </script>
 <script setup>
 import { onMounted, reactive, ref } from "vue";
-import { getPostDetail, getRedPacket, finishRedPacket, oneKeyLike, oneKeyReTweet, oneKeyFollow, getTaskDetail, getReceivedList } from '@/http/redPacket.js'
+import { getPostDetail, getRedPacket, finishRedPacket, oneKeyLike, oneKeyReTweet, oneKeyFollow, getTaskDetail, getReceivedList, addFinishEvent } from '@/http/redPacket.js'
 import { getQueryString, guid } from '@/uilts/help.js'
 import { message } from 'ant-design-vue';
 import FontAmount from '@/view/components/font-amount.vue'
@@ -305,7 +305,7 @@ import GetMore from '@/view/iframe/publish/components/get-more.vue'
 import { getChromeStorage } from '@/uilts/chromeExtension.js'
 import Report from "@/log-center/log"
 import { srcPublishSuccess } from '@/http/publishApi'
-import { discordAuthUrl, checkGuildJoined } from '@/http/discordApi'
+import { discordAuthUrl, checkGuildJoined, saveInviteGuildInfo } from '@/http/discordApi'
 import { discordAuthRedirectUri } from '@/http/configAPI'
 
 var moment = require('moment');
@@ -336,29 +336,41 @@ let state = reactive({
 function clickRetry() {
   init()
 }
+
+let follow_open_tabs = []
+
 async function clickLikeBtn() {
   let _userInfo = await checkIsLogin()
   if (!_userInfo) {
     return
   }
-  state.loading_show = true
-  oneKeyLike({
-    params: {
-      tweetId: state.srcContentId
-    }
-  }).then((res) => {
-    state.loading_show = false
-    if (res.code == 0) {
-      if (res.data.result) {
-        state.done.like = true
-      } else {
-        state.done.like = false
-      }
-    } else {
-      state.done.like = false
-      console.log(res)
-    }
-  })
+  // state.loading_show = true
+
+
+  // window.parent.postMessage({
+  //   actionType: "IFRAME_DO_TASK", task_data: {
+  //     tweet_Id: state.tweetId
+  //   }, task_type: 'like'
+  // }, "*");
+
+  // oneKeyLike({
+  //   params: {
+  //     tweetId: state.srcContentId
+  //   }
+  // }).then((res) => {
+  //   state.loading_show = false
+  //   if (res.code == 0) {
+  //     if (res.data.result) {
+  //       state.done.like = true
+  //     } else {
+  //       state.done.like = false
+  window.open(`https://twitter.com/intent/like?tweet_id=${state.tweetId}`)
+  //     }
+  //   } else {
+  //     window.open(`https://twitter.com/intent/like?tweet_id=${state.tweetId}`)
+  //     state.done.like = false
+  //   }
+  // })
   // 埋点
   Report.reportLog({
     objectType: Report.objectType.like,
@@ -418,25 +430,27 @@ async function clickRetweetBtn() {
   if (!_userInfo) {
     return
   }
+  // state.loading_show = true
 
-  state.loading_show = true
-  oneKeyReTweet({
-    params: {
-      tweetId: state.srcContentId
-    }
-  }).then((res) => {
-    state.loading_show = false
-    if (res.code == 0) {
-      if (res.data.result) {
-        state.done.retweet = true
-      } else {
-        state.done.retweet = false
-      }
-    } else {
-      state.done.retweet = false
-      console.log(res)
-    }
-  })
+  // oneKeyReTweet({
+  //   params: {
+  //     tweetId: state.srcContentId
+  //   }
+  // }).then((res) => {
+  //   state.loading_show = false
+  //   if (res.code == 0) {
+  //     if (res.data.result) {
+  //       state.done.retweet = true
+  //     } else {
+  window.open(`https://twitter.com/intent/retweet?tweet_id=${state.tweetId}`)
+  // state.done.retweet = false
+  //     }
+  //   } else {
+  //     window.open(`https://twitter.com/retweet/like?tweet_id=${state.tweetId}`)
+  //     state.done.retweet = false
+  //     console.log(res)
+  //   }
+  // })
   // 埋点
   Report.reportLog({
     objectType: Report.objectType.retweet,
@@ -482,48 +496,61 @@ async function clickFollowAll(item, is_all) {
   if (!_userInfo) {
     return
   }
-  state.loading_show = true
+  // state.loading_show = true
   let arr_name = []
   for (let i in item) {
-    arr_name.push(item[i].name)
-  }
-  oneKeyFollow({
-    params: {
-      names: arr_name
+    if (!item[i].finished) {
+      arr_name.push(item[i].name)
     }
-  }).then((res) => {
-    state.loading_show = false
-    if (res.code == 0) {
-      res.data.forEach((item1) => {
-        state.detail.taskCondition[0].relatedUsers.forEach(item2 => {
-          if (item1.name == item2.name) {
-            item2.finished = true
-          }
-        });
-      })
-      let _len = state.detail.taskCondition[0].relatedUsers.filter((item) => { return item.finished == false }).length
-      if (_len > 0) {
-        state.done.follow = false
-      } else {
-        state.done.follow = true
+  }
+
+  // oneKeyFollow({
+  //   params: {
+  //     names: arr_name
+  //   }
+  // }).then((res) => {
+  //   state.loading_show = false
+  //   if (res.code == 0) {
+  //     res.data.forEach((item1) => {
+  //       state.detail.taskCondition[0].relatedUsers.forEach(item2 => {
+  //         if (item1.name == item2.name) {
+  //           item2.finished = true
+  //         }
+  //       });
+  //     })
+  //     let _len = state.detail.taskCondition[0].relatedUsers.filter((item) => { return item.finished == false }).length
+  //     if (_len > 0) {
+  //       state.done.follow = false
+  //     } else {
+  //       state.done.follow = true
+  //     }
+  //   } else {
+  let url
+  // 打开标签页的方法
+  arr_name.forEach((item) => {
+    url = `https://twitter.com/intent/follow?screen_name=${item}&tweet_id=${state.tweetId}`
+    chrome.tabs.create({ url }, (tab) => {
+      if (follow_open_tabs.filter((item) => { return item.url == tab.url }).length == 0) {
+        follow_open_tabs.push(tab)
       }
-    } else {
-      state.detail.taskCondition[0].relatedUsers.forEach(item => {
-        item.finished = false
-      });
-    }
+    })
   })
+  // state.detail.taskCondition[0].relatedUsers.forEach(item => {
+  //   item.finished = false
+  // });
+  //   }
+  // })
+
+  // -------- 埋点 --------
   let _log_obj = {
     pageSource: Report.pageSource.task_page,
     businessType: Report.businessType.buttonClick,
     objectType: Report.objectType.follow
   }
   if (is_all) {
-    // 埋点
     _log_obj.objectType = Report.objectType.follow_button
   }
   Report.reportLog(_log_obj);
-
 }
 
 
@@ -769,9 +796,72 @@ function initTaskDetail() {
     }
   })
 }
+
+let tab_index = 0
+const doTaskReport = (type, { follow_name = '' }, sender) => {
+  // 1 Twitter follow Twitter ScreenName
+  // 2 Tweet like
+  // 3 Retweet
+  let event_type = 0
+  switch (type) {
+    case 'retweet':
+      event_type = 3
+      state.done.retweet = true
+      chrome.tabs.remove(sender.tab.id)
+      break;
+    case 'like':
+      event_type = 2
+      state.done.like = true
+      chrome.tabs.remove(sender.tab.id)
+
+      break
+    case 'follow':
+      event_type = 1
+      chrome.tabs.remove(sender.tab.id)
+      for (let i = 0; i < follow_open_tabs.length; i++) {
+        if (follow_open_tabs[i].id == sender.tab.id) {
+          follow_open_tabs.splice(i, 1)
+          break
+        }
+      }
+
+      chrome.tabs.getCurrent((tab) => {
+        if (follow_open_tabs.length > 0) {
+          tab_index = follow_open_tabs[follow_open_tabs.length - 1].index
+        } else {
+          tab_index = tab.index
+        }
+        chrome.tabs.highlight({ windowId: tab.windowId, tabs: tab_index })
+      })
+
+      let has_no_finished = false
+      state.detail.taskCondition[0].relatedUsers.forEach((item) => {
+        if (follow_name == item.name) {
+          item.finished = true
+        }
+      })
+      state.detail.taskCondition[0].relatedUsers.forEach((item) => {
+        if (!item.finished) {
+          has_no_finished = true
+        }
+      })
+      if (!has_no_finished) {
+        state.done.follow = true
+        state.done.follow_red = false
+      }
+      break
+  }
+  addFinishEvent({
+    params: {
+      eventData: follow_name,
+      eventType: event_type,
+      luckdropId: state.detail.taskLuckdropId
+    }
+  })
+}
+
 onMounted(() => {
   state.process_mode = process.env.NODE_ENV
-  console.log('state.process_mode',state.process_mode)
   state.postId = getQueryString('postId')
   state.tweetId = getQueryString('tweetId')
   init()
@@ -780,6 +870,7 @@ onMounted(() => {
   // state.close_status = '没有领到钱'
 })
 
+
 // 点击领取
 function clickOpenRedPacket() {
   chrome.runtime.sendMessage({
@@ -1114,6 +1205,12 @@ function onRuntimeMsg() {
       case 'BACK_DISCORD_LOGIN_SUCCESS':
         discordLoginSuccess();
         break;
+      case 'DO_TASK':
+        if (!req.task_type || state.tweetId != req.tweet_Id) {
+          return
+        }
+        state.loading_show = false
+        doTaskReport(req.task_type, req.task_data, sender)
     }
   })
 }
@@ -1182,7 +1279,7 @@ async function joinDiscord() {
           state.done.join_discord = true;
         } else {
           state.done.join_discord = false;
-          if(discordAuthorizeRequired) {
+          if (discordAuthorizeRequired) {
             discordAuth('authAndJoinIng');
           } else {
             openInviteUrl();
@@ -1259,7 +1356,7 @@ function discordLoginSuccess() {
   if (joinDiscordActionState == 'authAndJoinIng') {
     openInviteUrl();
   }
-  if(discordAuthorizeRequired) {
+  if (discordAuthorizeRequired) {
     discordAuthorizeRequired = false;
   }
 }
@@ -1436,6 +1533,7 @@ body {
         }
 
         p {
+          width: 100%;
           margin: 0;
           padding: 0;
           color: #fff;

+ 5 - 1
vue.config.js

@@ -99,7 +99,11 @@ module.exports = {
           {
             from: path.resolve(`src/manifest.json`),
             to: `${path.resolve('dist')}/manifest.json`
-          }
+          },
+          // {
+          //   from: path.resolve(`src/rules`),
+          //   to: `${path.resolve('dist')}/rules`
+          // }
         ]
       })
     ],