Discord UwU Typer

Turns your typed keys into uwu style text on Discord!

2026/08/18のページです。最新版はこちら

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         Discord UwU Typer
// @namespace    http://tampermonkey.net
// @version      0.3
// @description  Turns your typed keys into uwu style text on Discord!
// @author       You
// @license      MIT
// @match        https://*://*
// @match        https://discord.com*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // Function to convert regular text to uwu style
    function uwuify(text) {
        return text
            .replace(/[lr]/g, 'w')
            .replace(/[LR]/g, 'W')
            .replace(/n([aeiou])/g, 'ny$1')
            .replace(/N([aeiou])/g, 'Ny$1')
            .replace(/N([AEIOU])/g, 'NY$1')
            .replace(/ove/g, 'uv');
    }

    // Monitor keyboard input
    document.addEventListener('input', function(event) {
        const target = event.target;
        
        // Target standard text inputs, textareas, and Discord's rich text editor
        if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.getAttribute('contenteditable') === 'true') {
            
            // Handle standard input fields
            if (target.value !== undefined) {
                const start = target.selectionStart;
                const end = target.selectionEnd;
                target.value = uwuify(target.value);
                target.setSelectionRange(start, end);
            } 
            // Handle Discord's special slate/contenteditable chat boxes
            else if (target.innerHTML !== undefined) {
                // Prevent infinite loops from script modifying its own changes
                if (target.dataset.isUwUing) return;
                target.dataset.isUwUing = 'true';

                // Save cursor position safely
                const selection = window.getSelection();
                if (selection.rangeCount > 0) {
                    const range = selection.getRangeAt(0);
                    const offset = range.startOffset;
                    const container = range.startContainer;

                    if (container.nodeType === Node.TEXT_NODE) {
                        container.textContent = uwuify(container.textContent);
                        
                        // Restore cursor position
                        try {
                            const newRange = document.createRange();
                            newRange.setStart(container, Math.min(offset, container.textContent.length));
                            newRange.collapse(true);
                            selection.removeAllRanges();
                            selection.addRange(newRange);
                        } catch (e) {
                            // Fallback if cursor position fails
                        }
                    }
                }
                delete target.dataset.isUwUing;
            }
        }
    }, true);
})();