// ==UserScript== // @name Chasm Copy (캐즘 카피) v1.2.2 // @namespace https://github.com/chasm-js // @version 1.2.2 // @description 크랙의 캐릭터 퍼블리시/복사/붙여넣기 기능 구현 // @author chasm-js // @match https://crack.wrtn.ai/* // @downloadURL https://raw.githubusercontent.com/chasm-js/snack/refs/heads/main/copy.user.js // @updateURL https://raw.githubusercontent.com/chasm-js/snack/refs/heads/main/copy.user.js // @grant none // ==/UserScript== (function(){function m(c){return(c=document.cookie.match(new RegExp("(?:^|; )"+c.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(c[1]):void 0}async function q(){try{return await navigator.clipboard.readText()}catch(c){return null}}async function f(c,d,a){try{const b={Authorization:`Bearer ${m("access_token")}`,"Content-Type":"application/json"};c={method:c,headers:b};a&&(c.body=JSON.stringify(a));const e=await fetch(d,c);if(!e.ok)throw Error(`HTTP error! Status: ${e.status}`); return await e.json()}catch(b){return null}}function r(c){try{const d=c.parentElement?.parentElement;if(!d)return null;const a=Object.keys(d).find(g=>g.startsWith("__reactProps"));if(!a)return null;const b=d[a];if(!b?.children)return null;const e=Array.isArray(b.children)?b.children:[b.children];for(const g of e)if(g?.props?.character?._id)return g.props.character._id;return null}catch(d){return null}}function h(c,d,a){const b=a.cloneNode(!0),e=document.createElement("button");e.innerHTML=b.innerHTML; e.className=a.className;if(a=e.querySelector("p"))a.textContent=c;e.removeAttribute("onClick");e.addEventListener("click",g=>{g.preventDefault();g.stopPropagation();d()});return e}async function n(){/^\/my(\/.*)?$/.test(location.pathname)&&m("access_token")&&p(document.body,()=>{document.querySelectorAll(".css-k24aeo").forEach(d=>{d.onclick=()=>{const a=r(d);a&&(window.currentClickedId=a)}});const c=document.querySelector(".css-r8xl2s");if(c&&c.childNodes.length<6){const d=c.childNodes[0].cloneNode(!0); c.appendChild(h("\u2726 \uacf5\uac1c",async()=>{if(window.currentClickedId&&confirm("Chasm Copy - \uacf5\uac1c \uc758 \uc0c8 \uce90\ub9ad\ud130\ub85c \ubcf5\uc0ac\ud574 \uac8c\uc2dc\ud560\uae4c\uc694?")){var a=await k.getMycharacter(window.currentClickedId);a?(await a.publish("public"))?.result==="SUCCESS"?confirm("Chasm Copy - \uacf5\uac1c \ub85c \uac8c\uc2dc \uc131\uacf5\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?")&&location.reload():alert("\uac8c\uc2dc \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694."): alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}},d));c.appendChild(h("\u2726 \ube44\uacf5\uac1c",async()=>{if(window.currentClickedId&&confirm("Chasm Copy - \ube44\uacf5\uac1c \uc758 \uc0c8 \uce90\ub9ad\ud130\ub85c \ubcf5\uc0ac\ud574 \uac8c\uc2dc\ud560\uae4c\uc694?")){var a=await k.getMycharacter(window.currentClickedId);a?(await a.publish("private"))?.result==="SUCCESS"?confirm("Chasm Copy - \ube44\uacf5\uac1c \ub85c \uac8c\uc2dc \uc131\uacf5\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?")&& location.reload():alert("\uac8c\uc2dc \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694."):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}},d));c.appendChild(h("\u2726 \ub9c1\ud06c \uacf5\uac1c",async()=>{if(window.currentClickedId&&confirm("Chasm Copy - \ub9c1\ud06c \uacf5\uac1c \uc758 \uc0c8 \uce90\ub9ad\ud130\ub85c \ubcf5\uc0ac\ud574 \uac8c\uc2dc\ud560\uae4c\uc694?")){var a=await k.getMycharacter(window.currentClickedId); a?(await a.publish("linkonly"))?.result==="SUCCESS"?confirm("Chasm Copy - \ub9c1\ud06c \uacf5\uac1c \ub85c \uac8c\uc2dc \uc131\uacf5\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?")&&location.reload():alert("\uac8c\uc2dc \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694."):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}},d));c.appendChild(h("\u2199 JSON \ubcf5\uc0ac", async()=>{if(window.currentClickedId){var a=await k.getMycharacter(window.currentClickedId);a?(a=await a.get())?(a=JSON.stringify(a,null,2),navigator.clipboard.writeText(a),alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\uac00 \ud074\ub9bd\ubcf4\ub4dc\uc5d0 \ubcf5\uc0ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4!")):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}}, d));c.appendChild(h("\u2197 JSON \ubd99\uc5ec\ub123\uae30",async()=>{if(window.currentClickedId&&confirm("Chasm Copy - \ud074\ub9bd\ubcf4\ub4dc\uc758 JSON \ub370\uc774\ud130\ub85c \uce90\ub9ad\ud130\ub97c \ub36e\uc5b4\uc50c\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uc774 \uc791\uc5c5\uc740 \ub418\ub3cc\ub9b4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")&&confirm("Chasm Copy - \uc815\ub9d0\ub85c \uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \ub36e\uc5b4\uc50c\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uae30\uc874 \ub370\uc774\ud130\ub294 \ubaa8\ub450 \uc0ad\uc81c\ub429\ub2c8\ub2e4.")){var a= await q();if(a){try{var b=JSON.parse(a)}catch(e){alert("\ud074\ub9bd\ubcf4\ub4dc \ub370\uc774\ud130\uac00 \uc720\ud6a8\ud55c JSON \ud615\uc2dd\uc774 \uc544\ub2d9\ub2c8\ub2e4.");return}(a=await k.getMycharacter(window.currentClickedId))?await a.set(b)?(alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\uac00 \uc131\uacf5\uc801\uc73c\ub85c \ub36e\uc5b4\uc50c\uc6cc\uc84c\uc2b5\ub2c8\ub2e4!"),confirm("Chasm Copy - \uce90\ub9ad\ud130 \ub370\uc774\ud130 \ub36e\uc5b4\uc50c\uc6b0\uae30 \uc131\uacf5\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub85c\uace0\uce68 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?")&& location.reload()):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130 \ub36e\uc5b4\uc50c\uc6b0\uae30\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694."):alert("\uce90\ub9ad\ud130 \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}else alert("\ud074\ub9bd\ubcf4\ub4dc\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.")}},d))}})}function l(){n();let c=location.href;p(document,()=>{location.href!== c&&(c=location.href,n())})}class t{async getMycharacters(c,d){return await f("GET",c?`${"https://contents-api.wrtn.ai"}/character/characters/me?limit=${d}&cursor=${c}`:`${"https://contents-api.wrtn.ai"}/character/characters/me?limit=${d}`)}async getMycharacter(c){if(!c)return null;const d=await f("GET",`${"https://contents-api.wrtn.ai"}/character/characters/me/${c}`);return d&&d.data?{data:d.data,reload:async()=>await f("GET",`${"https://contents-api.wrtn.ai"}/character/characters/me/${c}`),get:async()=> (await f("GET",`${"https://contents-api.wrtn.ai"}/character/characters/me/${c}`))?.data||null,set:async a=>{for(var b of a.startingSets||[])delete b._id;b={name:a.name,description:a.description,profileImageUrl:a.profileImage?.origin||a.profileImageUrl,model:a.model,initialMessages:a.initialMessages,characterDetails:a.characterDetails,replySuggestions:a.replySuggestions,chatExamples:a.chatExamples,situationImages:a.situationImages,categoryIds:a.categories?.length?[a.categories[0]._id]:a.categoryIds, tags:a.tags,promptTemplate:a.promptTemplate?.template||a.promptTemplate,isCommentBlocked:a.isCommentBlocked,defaultStartingSetName:a.defaultStartingSetName,keywordBook:a.keywordBook,customPrompt:a.customPrompt,defaultStartingSetSituationPrompt:a.defaultStartingSetSituationPrompt||"",defaultSuperChatModel:typeof a.defaultSuperChatModel==="object"&&a.defaultSuperChatModel?.model?a.defaultSuperChatModel.model:a.defaultSuperChatModel||"SONNET3.7"};a.startingSets&&a.startingSets.length>0&&(b.startingSets= a.startingSets.map(e=>{e={...e};delete e._id;return e}));return await f("PATCH",`${"https://contents-api.wrtn.ai"}/character/characters/${c}`,b)},remove:async()=>(await f("DELETE",`${"https://contents-api.wrtn.ai"}/character/characters/me/${c}`))?.result==="SUCCESS",publish:async a=>{const b=(await f("GET",`${"https://contents-api.wrtn.ai"}/character/characters/me/${c}`))?.data;if(b){for(const e of b.startingSets||[])delete e._id;a={name:b.name,description:b.description,profileImageUrl:b.profileImage.origin, model:b.model,initialMessages:b.initialMessages,characterDetails:b.characterDetails,replySuggestions:b.replySuggestions,chatExamples:b.chatExamples,situationImages:b.situationImages,categoryIds:[b.categories[0]._id],tags:b.tags,visibility:a,promptTemplate:b.promptTemplate?.template||b.promptTemplate,isCommentBlocked:b.isCommentBlocked,defaultStartingSetName:b.defaultStartingSetName,keywordBook:b.keywordBook,customPrompt:b.customPrompt,defaultStartingSetSituationPrompt:b.defaultStartingSetSituationPrompt|| " ",isAdult:b.isAdult,defaultSuperChatModel:typeof b.defaultSuperChatModel==="object"&&b.defaultSuperChatModel?.model?b.defaultSuperChatModel.model:b.defaultSuperChatModel||"SONNET3.7"};b.startingSets&&b.startingSets.length>0&&(a.startingSets=b.startingSets.map(e=>{e={...e};delete e._id;return e}));return await f("POST","https://contents-api.wrtn.ai/character/characters",a)}}}:null}}const k=new t,p=function(){const c=window.MutationObserver||window.WebKitMutationObserver;return function(d,a){if(d&& c)return a=new c(a),a.observe(d,{childList:!0,subtree:!0,attributes:!0}),a}}();document.readyState==="loading"?document.addEventListener("DOMContentLoaded",l):l();window.addEventListener("load",l)})();