| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Katty's Bot Helper</title> |
| <style> |
| body { |
| font-family: 'Arial', sans-serif; |
| background-color: #333; |
| background-image: url('https://files.catbox.moe/qoycoe.png'); |
| background-size: cover; |
| background-repeat: no-repeat; |
| color: #fff; |
| margin: 0; |
| padding: 0; |
| } |
| |
| .container { |
| max-width: 600px; |
| margin: 20px auto; |
| background-color: #222; |
| padding: 20px; |
| border-radius: 10px; |
| box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); |
| } |
| |
| label { |
| display: block; |
| margin-bottom: 8px; |
| } |
| |
| input { |
| width: 100%; |
| padding: 8px; |
| margin-bottom: 16px; |
| box-sizing: border-box; |
| } |
| |
| textarea { |
| width: 100%; |
| height: 100px; |
| padding: 8px; |
| margin-bottom: 16px; |
| resize: none; |
| box-sizing: border-box; |
| } |
| |
| select { |
| width: 100%; |
| padding: 8px; |
| margin-bottom: 16px; |
| box-sizing: border-box; |
| } |
| |
| button { |
| background-color: #4CAF50; |
| color: #fff; |
| padding: 10px 15px; |
| border: none; |
| border-radius: 5px; |
| cursor: pointer; |
| } |
| |
| button:hover { |
| background-color: #45a049; |
| } |
| |
| |
| body.dark-mode { |
| background-color: #111; |
| color: #ddd; |
| } |
| |
| .container.dark-mode { |
| background-color: #111; |
| box-shadow: 0 0 10px rgba(255, 255, 255, 0.5); |
| } |
| |
| #outputBox { |
| margin-top: 20px; |
| padding: 10px; |
| background-color: #444; |
| border-radius: 5px; |
| overflow: hidden; |
| max-width: 600px; |
| outline: 2px solid #7D12FF; |
| } |
| |
| #generatedTemplate { |
| word-wrap: break-word; |
| white-space: pre-wrap; |
| } |
| |
| #titleSection { |
| text-align: center; |
| margin-bottom: 20px; |
| } |
| |
| #titleSection h2 { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| margin-bottom: 10px; |
| } |
| |
| #titleSection img { |
| width: 40px; |
| height: 40px; |
| margin-right: 10px; |
| border-radius: 50%; |
| } |
| |
| #logo a { |
| color: #FF69B4 !important; |
| text-decoration: none; |
| } |
| |
| .macro-button { |
| background-color: transparent; |
| color: #4CAF50; |
| border: none; |
| cursor: pointer; |
| outline: none; |
| font-weight: bold; |
| } |
| |
| .macro-button:hover { |
| text-decoration: underline; |
| } |
| |
| .button-area { |
| text-align: center; |
| margin: 3px 0; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="titleSection"> |
| <h2> |
| <img src="https://files.catbox.moe/wj5mmj.png" alt="Katty's Bot Helper Logo"> |
| Katty's Bot Helper |
| </h2> |
| <a id="logo" href="https://venus.chub.ai/users/KattyyKitty" target="_blank">KattyyKitty's Chub Profile ❤️</a> |
| </div> |
|
|
| <div style="padding: 5px; text-align: center; position: fixed; right: 0; bottom: 0; background-color: #333;"> |
| Copy Macros: |
| <button class="macro-button" onclick="copyToClipboard('{{char}}')">{{char}}</button> |
| <button class="macro-button" onclick="copyToClipboard('{{user}}')">{{user}}</button> |
| </div> |
| |
| <form id="botForm" class="container"> |
| <label for="charName">Character Name</label> |
| <input type="text" id="charName" placeholder="Character Name" required> |
|
|
| <label for="nationalityRaceToggle">Nationality/Race Toggle</label> |
| <select id="nationalityRaceToggle" onchange="toggleField()"> |
| <option value="nationality">Nationality</option> |
| <option value="race">Race (Fantasy)</option> |
| </select> |
|
|
| <label for="nationalityRace">Nationality/Race</label> |
| <input type="text" id="nationalityRace" placeholder="Self Explanatory" required> |
|
|
| <label for="characterClass">Character Class</label> |
| <input type="text" id="characterClass" placeholder="Wizard, Warrior, etc." required> |
|
|
| <label for="height">Height</label> |
| <input type="text" id="height" placeholder="Height" required> |
|
|
| <label for="age">Age</label> |
| <input type="text" id="age" placeholder="Age" required> |
| |
| <label for="gender">Gender</label> |
| <input type="text" id="gender" placeholder="Gender" required> |
| |
| <label for="appearance">Appearance</label> |
| <input type="text" id="appearance" placeholder="Appearance formatted as: trait1 + trait2 etc" required> |
| |
| <div id="outfitSection"> |
| <label for="outfit">Outfit</label> |
| <textarea id="outfit" placeholder="Give a general description of your character's outfit (ex. {{char}} generally wears dark clothing and a leather jacket)" required></textarea> |
| </div> |
| |
| <div id="genitalsSection"> |
| <label for="genitals">Genitals Description</label> |
| <textarea id="genitals" placeholder="Give a detailed description of the character's genitals. Be as descriptive as you'd like." required></textarea> |
| </div> |
|
|
| <label for="kinks">Kinks/Fetishes</label> |
| <input type="text" id="kinks" placeholder="formatted as: kink1, kink2, etc" |
| |
| <label for="likes">Likes</label> |
| <input type="text" id="likes" placeholder="Likes formatted as: like1, like2, etc" required> |
|
|
| <label for="dislikes">Dislikes</label> |
| <input type="text" id="dislikes" placeholder="Dislikes formatted as: dislike1, dislike2, etc" required> |
|
|
| <label for="hobbies">Hobbies</label> |
| <input type="text" id="hobbies" placeholder="List the character's hobbies; i.e. Baseball." |
| |
| <label for="occupation">Occupation</label> |
| <input type="text" id="occupation" placeholder="Bot Occupation" required> |
| |
| <label for="personality1">Personality 1</label> |
| <textarea id="personality1" placeholder="Personality Traits formatted as: trait1, trait2, etc" required></textarea> |
|
|
| <label for="personality">Personality</label> |
| <textarea id="personality" placeholder="Here you place all the bot’s personality in detail, be sure to be precise." required></textarea> |
|
|
| <label for="skillsPowersToggle">Skills/Powers Toggle</label> |
| <select id="skillsPowersToggle" onchange="toggleField()"> |
| <option value="Skills/Abilities">Skills/Abilities</option> |
| <option value="Powers/Abilities">Powers/Abilities (Fantasy)</option> |
| </select> |
|
|
| <label for="skillsPowers">Powers/Abilities</label> |
| <textarea id="skillsPowers" placeholder="List any powers, skills or abilities your bot has." required></textarea> |
|
|
| <div id="dialogueStyleSection"> |
| <label for="dialogueStyle">Dialogue Style</label> |
| <textarea id="dialogueStyle" placeholder="Decribe how your character talks and acts. Example: Slightly raspy voice, sarcastic tone laden with innuendo; speaks her mind without fear of consequence." required></textarea> |
| </div> |
|
|
| <div id="backgroundSection"> |
| <label for="background">Background</label> |
| <textarea id="background" placeholder="Here you place all the important information about the bot, it has to be very descriptive and make sure to use {{char}} when referring to the bot, that way the bot will recognize its own information better." required></textarea> |
| </div> |
|
|
| <div id="rpSetupSection"> |
| <label for="rpSetup">RP Setup</label> |
| <textarea id="rpSetup" placeholder="Here you place the information that you think is necessary for the development during the roleplay."></textarea> |
| </div> |
|
|
| <div id="motivationSection"> |
| <label for="motivation">Motivation</label> |
| <textarea id="motivation" placeholder="Decribe your character's motivations." required></textarea> |
| </div> |
| |
| <div id="relationshipsSection"> |
| <label for="relationships">Relationships</label> |
| <textarea id="relationships" placeholder="Describe your character's relationship types or specific relationship to {{user}}." required></textarea> |
| </div> |
|
|
| <label for="miscShit">Misc Stuff</label> |
| <textarea id="miscShit" placeholder="You can put any misc stuff you want the AI to know in this box." required></textarea> |
|
|
| <button type="button" onclick="generateTemplate()">Generate Template</button> |
| </form> |
|
|
| <div id="outputBox" class="container"> |
| <h3>Generated Template:</h3> |
| <pre id="generatedTemplate"></pre> |
| <button class="macro-button" onclick="copyGeneratedTemplate()">Copy Template⎘</button> |
| </div> |
|
|
| <div id="creditSection"> |
| <p>Background Image: <a href="https://wall.alphacoders.com/big.php?i=1338084" target="_blank">https://wall.alphacoders.com/big.php?i=1338084</a></p> |
| </div> |
|
|
| <script> |
| function toggleNationalityRaceField() { |
| const toggleValue = document.getElementById('nationalityRaceToggle').value; |
| const label = toggleValue === 'nationality' ? 'Nationality' : 'Race'; |
| document.getElementById('nationalityRace').placeholder = `${label} - Self Explanatory`; |
| } |
| |
| function toggleSkillsPowersField() { |
| const toggleValue = document.getElementById('skillsPowersToggle').value; |
| const label = toggleValue === 'Skills/Abilities' ? 'Skills' : 'Powers'; |
| document.getElementById('skillsPowers').placeholder = `${label} - List any ${label.toLowerCase()}, ${label.toLowerCase()}, etc.`; |
| } |
| |
| function toggleCharacterClass() { |
| const characterClassToggle = document.getElementById('characterClassToggle'); |
| const characterClass = document.getElementById('characterClass'); |
| |
| characterClassToggle.checked ? characterClass.removeAttribute('readonly') : characterClass.setAttribute('readonly', 'true'); |
| } |
| |
| function copyToClipboard(text) { |
| const dummy = document.createElement("textarea"); |
| document.body.appendChild(dummy); |
| dummy.value = text; |
| dummy.select(); |
| document.execCommand("copy"); |
| document.body.removeChild(dummy); |
| } |
| |
| function copyGeneratedTemplate() { |
| var generatedTemplate = document.getElementById('generatedTemplate'); |
| var range = document.createRange(); |
| range.selectNode(generatedTemplate); |
| window.getSelection().removeAllRanges(); |
| window.getSelection().addRange(range); |
| |
| try { |
| document.execCommand('copy'); |
| window.getSelection().removeAllRanges(); |
| |
| } catch (err) { |
| console.error('Unable to copy template: ', err); |
| } |
| } |
| |
| |
| |
| function generateTemplate() { |
| var charName = document.getElementById('charName').value; |
| var toggleNationalityRaceValue = document.getElementById('nationalityRaceToggle').value; |
| var nationalityRace = document.getElementById('nationalityRace').value; |
| var characterClass = document.getElementById('characterClass').value; |
| var height = document.getElementById('height').value; |
| var age = document.getElementById('age').value; |
| var gender = document.getElementById('gender').value; |
| var likes = document.getElementById('likes').value; |
| var dislikes = document.getElementById('dislikes').value; |
| var appearance = document.getElementById('appearance').value; |
| var outfit = document.getElementById('outfit').value; |
| var personality1 = document.getElementById('personality1').value; |
| var personality = document.getElementById('personality').value; |
| var occupation = document.getElementById('occupation').value; |
| var genitals = document.getElementById('genitals').value; |
| var kinks = document.getElementById('kinks').value; |
| var background = document.getElementById('background').value; |
| var rpSetup = document.getElementById('rpSetup').value; |
| var miscShit = document.getElementById('miscShit').value; |
| var toggleSkillsPowersValue = document.getElementById('skillsPowersToggle').value; |
| var skillsPowers = document.getElementById('skillsPowers').value; |
| var dialogueStyle = document.getElementById('dialogueStyle').value; |
| var motivation = document.getElementById('motivation').value; |
| var relationships = document.getElementById('relationships').value |
| var hobbies = document.getElementById('hobbies').value |
| |
| var builder = []; |
| |
| if (charName) builder.push(`name: ${charName}`); |
| if (nationalityRace) builder.push(`${toggleNationalityRaceValue}: ${nationalityRace}`); |
| if (characterClass) builder.push(`character class: ${characterClass}`); |
| if (height) builder.push(`height: ${height}`); |
| if (age) builder.push(`age: ${age}`); |
| if (gender) builder.push(`gender: ${gender}`); |
| if (likes) builder.push(`likes: ${likes}`); |
| if (dislikes) builder.push(`dislikes: ${dislikes}`); |
| if (hobbies) builder.push(`hobbies: ${hobbies}`); |
| if (appearance) builder.push(`appearance: ${appearance}`); |
| if (outfit) builder.push(`outfit: ${outfit}`); |
| if (personality1) builder.push(`personality: ${personality1}`); |
| if (occupation) builder.push(`occupation: ${occupation}`); |
| if (genitals) builder.push(`genitals: ${genitals}`); |
| if (kinks) builder.push(`kinks/fetishes: ${kinks}`); |
| if (dialogueStyle) builder.push(`Dialogue Style: ${dialogueStyle}`); |
| if (background) builder.push(`Background: ${background}`); |
| if (personality) builder.push(`Personality: ${personality}`); |
| if (skillsPowers) builder.push(`${toggleSkillsPowersValue}: ${skillsPowers}`); |
| if (rpSetup) builder.push(`RP Setup: ${rpSetup}`); |
| if (motivation) builder.push(`Motivations: ${motivation}`); |
| if (relationships) builder.push(`Relationships: ${relationships}`); |
| if (miscShit) builder.push(`${miscShit}`); |
| |
| var template = builder.join("\n"); |
| |
| |
| document.getElementById('generatedTemplate').textContent = template; |
| } |
| </script> |
| |
| |
|
|
| </body> |
| </html> |