presence.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '617113314572369973', // CLIENT ID FOR YOUR PRESENCE
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. presence.on('UpdateData', async () => {
  7. const presenceData: PresenceData = {
  8. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/S/Slack/assets/logo.png',
  9. }
  10. presenceData.startTimestamp = browsingTimestamp
  11. if (document.location.hostname === 'app.slack.com') {
  12. const group = document.querySelector(
  13. '#team-menu-trigger > div.p-classic_nav__team_header__team > div.p-classic_nav__team_header__team__name',
  14. )
  15. const user = document.querySelector(
  16. 'body > div.p-client_container > div > div > div.p-workspace__top_nav > div > div.p-classic_nav__channel_header.p-classic_nav__model_header > div.p-classic_nav__model__title > div.p-classic_nav__model__title__name.p-classic_nav__no_drag > button > span:nth-child(1)',
  17. )
  18. const chat = document.querySelector(
  19. 'body > div.p-client_container > div > div > div.p-workspace__top_nav > div > div.p-classic_nav__channel_header.p-classic_nav__model_header > div.p-classic_nav__model__title > div.p-classic_nav__model__title__name.p-classic_nav__no_drag > button',
  20. )
  21. const typing = document.querySelector('#undefined')
  22. if (user) {
  23. if (!typing?.className.includes('ql-blank')) {
  24. presenceData.details = 'Typing in DMs to:'
  25. presenceData.state = `${user.textContent} (Workspace: ${group?.textContent})`
  26. delete presenceData.smallImageKey
  27. presence.setActivity(presenceData)
  28. }
  29. else {
  30. presenceData.details = 'Reading DMs from:'
  31. presenceData.state = `${user.textContent} (Workspace: ${group?.textContent})`
  32. presenceData.smallImageKey = Assets.Reading
  33. presence.setActivity(presenceData)
  34. }
  35. }
  36. else if (chat) {
  37. if (!typing?.className.includes('ql-blank')) {
  38. presenceData.details = 'Typing in channel:'
  39. presenceData.state = `#${chat.textContent} (Workspace: ${group?.textContent})`
  40. delete presenceData.smallImageKey
  41. presence.setActivity(presenceData)
  42. }
  43. else {
  44. presenceData.details = 'Reading channel messages:'
  45. presenceData.state = `#${chat.textContent} (Workspace: ${group?.textContent})`
  46. presenceData.smallImageKey = Assets.Reading
  47. presence.setActivity(presenceData)
  48. }
  49. }
  50. else {
  51. presence.setActivity()
  52. }
  53. }
  54. else if (
  55. document.location.hostname === 'slackhq.com'
  56. && document.location.pathname.includes('/search/')
  57. ) {
  58. const path = document.location.pathname.split('/', 7)
  59. presenceData.details = 'Slack Blog'
  60. presenceData.state = `Searching for: ${path[2]}`
  61. presenceData.smallImageKey = Assets.Search
  62. presence.setActivity(presenceData)
  63. }
  64. else if (
  65. document.location.hostname === 'slackhq.com'
  66. && document.location.pathname.includes('/role/')
  67. ) {
  68. const path = document.location.pathname.split('/', 7)
  69. presenceData.details = 'Slack Blog'
  70. presenceData.state = `Searching with role: ${path[2]}`
  71. presenceData.smallImageKey = Assets.Search
  72. presence.setActivity(presenceData)
  73. }
  74. else if (
  75. document.location.hostname === 'slackhq.com'
  76. && document.location.pathname.includes('/tags/')
  77. ) {
  78. const path = document.location.pathname.split('/', 7)
  79. presenceData.details = 'Slack Blog'
  80. presenceData.state = `Searching with tag: ${path[2]}`
  81. presenceData.smallImageKey = Assets.Search
  82. presence.setActivity(presenceData)
  83. }
  84. else if (
  85. document.location.hostname === 'slackhq.com'
  86. && document.location.pathname.includes('/categories/')
  87. ) {
  88. const path = document.location.pathname.split('/', 7)
  89. presenceData.details = 'Slack Blog'
  90. presenceData.state = `Searching with category: ${path[2]}`
  91. presenceData.smallImageKey = Assets.Search
  92. presence.setActivity(presenceData)
  93. }
  94. else if (document.location.hostname === 'slackhq.com') {
  95. const group = document.querySelector(
  96. '#main > article > header > div > div > div > h1',
  97. )
  98. if (group) {
  99. presenceData.details = 'Slack Blog'
  100. presenceData.state = `Reading article: ${group.textContent}`
  101. presenceData.smallImageKey = Assets.Reading
  102. presence.setActivity(presenceData)
  103. }
  104. else {
  105. presenceData.details = 'Slack Blog'
  106. presenceData.state = 'Home page'
  107. delete presenceData.smallImageKey
  108. presence.setActivity(presenceData)
  109. }
  110. }
  111. else if (
  112. document.location.hostname === 'get.slack.help'
  113. && document.location.pathname.includes('/categories/')
  114. ) {
  115. const search = document.querySelector(
  116. 'body > main > section > div.banner_container > h1',
  117. )
  118. presenceData.details = 'Slack Help Center'
  119. presenceData.state = `Browsing through category: ${search?.textContent}`
  120. delete presenceData.smallImageKey
  121. presence.setActivity(presenceData)
  122. }
  123. else if (
  124. document.location.hostname === 'get.slack.help'
  125. && document.location.pathname.includes('/articles/')
  126. ) {
  127. const search = document.querySelector(
  128. 'body > main > div.article_page.has_sidenav > div.article_container > div.content_col > h1',
  129. )
  130. presenceData.details = 'Slack Help Center'
  131. presenceData.state = `Reading article: ${search?.textContent}`
  132. delete presenceData.smallImageKey
  133. presence.setActivity(presenceData)
  134. }
  135. else if (
  136. document.location.hostname === 'get.slack.help'
  137. && document.location.pathname.includes('/search')
  138. ) {
  139. const search = document.querySelector(
  140. 'body > main > section.banner.banner_search_results > div > h1 > span.hidden.query_val',
  141. )
  142. presenceData.details = 'Slack Help Center'
  143. presenceData.state = `Searching for: ${search?.textContent}`
  144. presenceData.smallImageKey = Assets.Search
  145. presence.setActivity(presenceData)
  146. }
  147. else if (document.location.hostname === 'get.slack.help') {
  148. presenceData.details = 'Slack Help Center'
  149. presenceData.state = 'Home page'
  150. delete presenceData.smallImageKey
  151. presence.setActivity(presenceData)
  152. }
  153. else if (
  154. document.location.hostname === 'api.slack.com'
  155. && document.location.pathname.includes('/apps')
  156. ) {
  157. presenceData.details = 'Slack api'
  158. presenceData.state = 'Browsing through their apps'
  159. delete presenceData.smallImageKey
  160. presence.setActivity(presenceData)
  161. }
  162. else if (document.location.hostname === 'api.slack.com') {
  163. const group = document.querySelector('#api_main_content > h1')
  164. if (group) {
  165. presenceData.details = 'Slack api'
  166. presenceData.state = `Reading article: ${group.textContent}`
  167. presenceData.smallImageKey = Assets.Reading
  168. presence.setActivity(presenceData)
  169. }
  170. else {
  171. presenceData.details = 'Slack api'
  172. presenceData.state = 'Home page'
  173. delete presenceData.smallImageKey
  174. presence.setActivity(presenceData)
  175. }
  176. }
  177. else if (document.location.hostname === 'slackdemo.com') {
  178. presenceData.details = 'Slack Demo'
  179. presenceData.state = 'Trying out Slack'
  180. delete presenceData.smallImageKey
  181. presence.setActivity(presenceData)
  182. }
  183. else if (
  184. document.location.hostname === 'slack.com'
  185. && document.location.pathname.includes('/pricing')
  186. ) {
  187. presenceData.details = 'Slack'
  188. presenceData.state = 'Checking the pricing'
  189. delete presenceData.smallImageKey
  190. presence.setActivity(presenceData)
  191. }
  192. else if (
  193. document.location.hostname === 'slack.com'
  194. && document.location.pathname.includes('/enterprise')
  195. ) {
  196. presenceData.details = 'Slack'
  197. presenceData.state = 'Checking the enterprise plan'
  198. delete presenceData.smallImageKey
  199. presence.setActivity(presenceData)
  200. }
  201. else if (
  202. document.location.hostname === 'slack.com'
  203. && document.location.pathname.includes('/resources')
  204. ) {
  205. const path = document.location.pathname.split('/', 9)
  206. if (path[4]) {
  207. const group = document.querySelector('#main > div:nth-child(1) > h1')
  208. presenceData.details = 'Slack'
  209. presenceData.state = `Reading article: ${group?.textContent}`
  210. presenceData.smallImageKey = Assets.Reading
  211. presence.setActivity(presenceData)
  212. }
  213. else {
  214. presence.setActivity()
  215. }
  216. }
  217. else if (
  218. document.location.hostname === 'slack.com'
  219. && document.location.pathname.includes('/slack-tips')
  220. ) {
  221. const path = document.location.pathname.split('/', 9)
  222. if (path[4]) {
  223. const group = document.querySelector('#main > section > div > header > h1')
  224. presenceData.details = 'Slack'
  225. presenceData.state = `Reading article: ${group?.textContent}`
  226. presenceData.smallImageKey = Assets.Reading
  227. presence.setActivity(presenceData)
  228. }
  229. else {
  230. presence.setActivity()
  231. }
  232. }
  233. else if (
  234. document.location.hostname === 'slack.com'
  235. && document.location.pathname.includes('/solutions')
  236. ) {
  237. const path = document.location.pathname.split('/', 9)
  238. if (path[4]) {
  239. const group = document.querySelector(
  240. '#main > section.c-billboard > div > header > h1',
  241. )
  242. presenceData.details = 'Slack'
  243. presenceData.state = `Reading article: ${group?.textContent}`
  244. presenceData.smallImageKey = Assets.Reading
  245. presence.setActivity(presenceData)
  246. }
  247. else {
  248. presence.setActivity()
  249. }
  250. }
  251. else if (
  252. document.location.hostname === 'slack.com'
  253. && document.location.pathname.includes('/features')
  254. ) {
  255. presenceData.details = 'Slack'
  256. presenceData.state = 'Checking the features'
  257. delete presenceData.smallImageKey
  258. presence.setActivity(presenceData)
  259. }
  260. else if (
  261. document.location.hostname === 'slack.com'
  262. && document.location.pathname.includes('/security')
  263. ) {
  264. presenceData.details = 'Slack'
  265. presenceData.state = 'Checking the security'
  266. delete presenceData.smallImageKey
  267. presence.setActivity(presenceData)
  268. }
  269. else if (
  270. document.location.hostname === 'slack.com'
  271. && document.location.pathname.includes('/customer-stories')
  272. ) {
  273. presenceData.details = 'Slack'
  274. presenceData.state = 'Checking the customer stories'
  275. delete presenceData.smallImageKey
  276. presence.setActivity(presenceData)
  277. }
  278. else if (
  279. document.location.hostname === 'slack.com'
  280. && document.location.pathname.includes('/about')
  281. ) {
  282. presenceData.details = 'Slack'
  283. presenceData.state = 'Checking the about page'
  284. delete presenceData.smallImageKey
  285. presence.setActivity(presenceData)
  286. }
  287. else if (
  288. document.location.hostname === 'slack.com'
  289. && document.location.pathname.includes('/partners')
  290. ) {
  291. presenceData.details = 'Slack'
  292. presenceData.state = 'Checking the partners'
  293. delete presenceData.smallImageKey
  294. presence.setActivity(presenceData)
  295. }
  296. else if (
  297. document.location.hostname === 'slack.com'
  298. && document.location.pathname.includes('/newsroom')
  299. ) {
  300. presenceData.details = 'Slack'
  301. presenceData.state = 'Checking the latest news'
  302. delete presenceData.smallImageKey
  303. presence.setActivity(presenceData)
  304. }
  305. else if (
  306. document.location.hostname === 'slack.com'
  307. && document.location.pathname.includes('/media-kit')
  308. ) {
  309. presenceData.details = 'Slack'
  310. presenceData.state = 'Checking the media kit'
  311. delete presenceData.smallImageKey
  312. presence.setActivity(presenceData)
  313. }
  314. else if (
  315. document.location.hostname === 'slack.com'
  316. && document.location.pathname.includes('/careers')
  317. ) {
  318. presenceData.details = 'Slack'
  319. presenceData.state = 'Checking the careers'
  320. delete presenceData.smallImageKey
  321. presence.setActivity(presenceData)
  322. }
  323. else if (
  324. document.location.hostname === 'slack.com'
  325. && document.location.pathname.includes('/intl')
  326. ) {
  327. presenceData.details = 'Slack'
  328. presenceData.state = 'Home page'
  329. delete presenceData.smallImageKey
  330. presence.setActivity(presenceData)
  331. }
  332. else if (document.querySelector('#header_team_name > a')) {
  333. const group = document.querySelector('#header_team_name > a')
  334. presenceData.details = 'Viewing admin pages for:'
  335. presenceData.state = group?.textContent
  336. delete presenceData.smallImageKey
  337. presence.setActivity(presenceData)
  338. }
  339. else if (
  340. document.querySelector(
  341. '#apps-page-app-element > header > nav > div.menu_actions > ul > li.left_margin.float_right > div > div > div > div > div.c-menu_select__label',
  342. )
  343. ) {
  344. const group = document.querySelector(
  345. '#apps-page-app-element > header > nav > div.menu_actions > ul > li.left_margin.float_right > div > div > div > div > div.c-menu_select__label',
  346. )
  347. presenceData.details = 'Viewing admin pages for:'
  348. presenceData.state = group?.textContent
  349. delete presenceData.smallImageKey
  350. presence.setActivity(presenceData)
  351. }
  352. else if (
  353. document.querySelector(
  354. '#apps-page-app-element > header > nav > div.menu_actions > ul > li.left_margin.float_right > span',
  355. )
  356. ) {
  357. const group = document.querySelector(
  358. '#apps-page-app-element > header > nav > div.menu_actions > ul > li.left_margin.float_right > span',
  359. )
  360. presenceData.details = 'Viewing admin pages for:'
  361. presenceData.state = group?.textContent
  362. delete presenceData.smallImageKey
  363. presence.setActivity(presenceData)
  364. }
  365. else {
  366. presence.setActivity()
  367. }
  368. })