12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Discord】Enter=改行, Ctrl+Enter=送信 にする Chrome 拡張

Last updated at Posted at 2022-10-11

なぜ作ったのか

Slack や Teams では Ctrl + Enter で送信できるようにしているので Discord でもそうなるようにしたかったためです。
※Discord は Enter=送信、Shift + Enter=改行 というキーバインドになっており変更することができません。

ソースコード

manifest.json
{
  "manifest_version": 3,
  "version": "1.0",
  "name": "Send with Ctrl+Enter in Discord",
  "content_scripts": [
    {
      "matches": [
        "https://discord.com/*"
      ],
      "js": [
        "script.js"
      ]
    }
  ],
  "permissions": [
    "activeTab"
  ]
}
script.js
(() => {
  'use strict';

  const app = document.querySelector('#app-mount');
  const useCapture = true;
  app.addEventListener('keydown', (event) => {
    const isMsgTextbox = event.target.role === 'textbox' && event.target.ariaMultiline;
    if (isMsgTextbox === false) {
      return;
    }

    const pressedShiftEnter = event.shiftKey && event.key === 'Enter';
    if (pressedShiftEnter) {
      return;
    }

    const pressedEnter = event.altKey === false && event.ctrlKey === false && event.key === 'Enter';
    if (pressedEnter) {
      event.stopPropagation();
    }
  }, useCapture);

})();

解説

デフォルトの Enter 周りのキーバインドは以下のようになっています。
この表における No1 のみをキャンセルしています。

No キー 送信 改行
1 Enter
2 Shift + Enter
3 Ctrl + Enter
4 Alt + Enter

メッセージ送信のイベントリスナは #app-mount に定義されているようでした。(ここ少し自信無いです...)
そのため、メッセージのテキストボックス以外ではデフォルトの挙動になるように event.target.roleevent.target.ariaMultiline を見ています。
また、Shift + Enter もデフォルト通りに挙動になるように event.shiftKeyevent.key を見ています。

その後、単体の Enter が押されたときイベント伝播をキャンセルすることで送信処理をキャンセルしています。

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?