Giter Site home page Giter Site logo

yudukiak / dispeak Goto Github PK

View Code? Open in Web Editor NEW
44.0 44.0 11.0 37.8 MB

ブヨミはディスコードの告知を語る。Bouyomi speaks the notice of Discord.

Home Page: https://twitter.com/micelle9/status/1004166580182216704

License: MIT License

JavaScript 65.79% CSS 15.12% HTML 19.08%
bouyomi discord nodejs

dispeak's Introduction

👘 おはゆづき! 🌘

akasaka yuduki
紅坂 柚月

紅坂 柚月

🔗 Links 🔗

Twitter URL
Youtube Subscriber URL Youtube Views URL
GitHub Followers URL GitHub Stars URL

website fanbox

Steam URL

📊 GitHub Readme Stats 📊

Anurag's GitHub stats Top Langs

🏆 GitHub Profile Trophy 🏆

trophy

📈 GitHub Profile Summary Cards 📈

Profile details card Top languages used in repository card Top languages in commits card GitHub stats card Productive time card

dispeak's People

Contributors

dependabot[bot] avatar yudukiak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dispeak's Issues

NGワード設定

Dispeak使わせていただいてます。 質問ですが、任意に設定した文字列が本文に含まれる場合は読み上げないという機能があると嬉しいのですが実装は難しいですか?

正規表現込みで設定できるような機能

バックグラウンドで起動する機能

バックグラウンド起動してほしい。一度設定してしまえばdispeak自体は滅多に開かないので。

スタートアップにDiSpeakのショートカットを手動で追加したらいいのでは?🤔
スタートアップのディレクトリは下の二つ。基本的に1つめ。

  • C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

そもそもElectronのショートカットをスタートアップに追加できる方法あるかな。
process.env.HOMEPATHで無理矢理取得して、とかでしょうか。

起動時に「最新版か」の確認を入れる

メニューにバージョンの確認を行える場所を作成 #1

これをもとに対応できるかと思う。
以下、リリース情報の取得方法(トークンの対応も予定)

// https://developer.github.com/v3/#user-agent-required
// https://maku77.github.io/nodejs/net/request-module.html
// need `npm i request`

const request = require("request");
const options = {
  url: "https://api.github.com/repos/micelle/dc_DiSpeak/releases/latest",
  headers: {
    "User-Agent": "Awesome-Octocat-App"
  }
};
function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    console.log("--------------------");
    console.log(info);
    console.log("--------------------");
    console.log(`URL: ${info.html_url}`);
    console.log(`Ver: ${info.tag_name}`);
    console.log(`Txt: ${info.name}`);
  }
}
request.get(options, callback);

棒読みちゃんの再生デバイス変更について

開発ありがとうございます!チャンネル毎に読み上げ設定できるのがすごくありがたいです。
要望なのですが、読み上げする再生デバイスを指定する事はできないでしょうか?
普段は環境上、ヘッドホン(メイン再生デバイス)を使用しているのですが、特定の読み上げだけスピーカー(ディスプレイ内蔵のを使っています)を使用したいのです。Discord自体もヘッドホンで使用しているので、DiSpeak単体で指定できるとありがたいです。

読み上げは全て棒読みちゃんで行なっているので、以下の方法でスピーカーやモニターから流すことは可能です。(個別に設定は不可能です…)

  1. 棒読みちゃんのスパナアイコンをクリック
  2. 棒読みちゃん 基本設定音声出力デバイスをクリック
  3. 出力先を選択した状態(青くした状態)でOKをクリック
  4. あとはテストしてみてください

もし流れないときは

  • いつものスピーカーだと棒読みちゃんが流れますか?
  • Windowsのオーディオ出力先を変更した際は流れますか?
  • オーディオのテストは流れますか?
  • 棒読みちゃんのプラグインを全てOFFにしても聞えませんか?

なお、本件はサポート対象外です。

ログの保存機能

ログのテキストファイル化をボタンで簡単に出来るようにしてほしい

自分でコード書いた方が早そうに思えますが…

絵文字の処理を変更

内容

ユーザーが書いた絵文字は普通に絵文字として出力されるのですが
Botが書いた絵文字はなぜ (スタンプ) になってしまうのでしょうか

:hugging:を何らかの方法で🤗へ変換させる

現在のコード

// 追加スタンプを読ませない "<:987654321:12345>, :foo12345:"
var content = content.replace(/<?:[A-Za-z0-9]+:([0-9]+)?>?/g, "(スタンプ)");

Toastsの調整

停止などしたときに左のテロップを消すか 移動させるかしないと次の作業ができないのでそれも改善してほしいと思いました。

Toastsが表示されていると他の操作を受付けてくれないので対応する

棒読みちゃんの送信フォーマットを設定できる機能を追加

    buffer.writeUInt16LE(0xFFFF, 2);
    buffer.writeUInt16LE(0xFFFF, 4);
    buffer.writeUInt16LE(0xFFFF, 6);

この部分を設定できるようにすれば解決しそう。
またこの設定はサーバー毎に行えるようにする。

棒読みちゃんのドキュメント

・Talk(読み上げ)
 送信データフォーマット
  [0-1]   16bit コマンド(0x0001)
  [2-3]   16bit 速度(-1:デフォルト, 50~300)
  [4-5]   16bit 音程(-1:デフォルト, 50~200)
  [6-7]   16bit 音量(-1:デフォルト,  0~100)
  [8-9]   16bit 声質( 0:デフォルト,  1~8:AquesTalk, 10001~:SAPI5)
  [10]     8bit 文字列の文字コード(0:UTF-8, 1:Unicode, 2:Shift-JIS)
  [11-14] 32bit 文字列の長さ
  [15-??] ??bit 文字列データ

Error: Syntax error, unrecognized expression: #files-list input[name=files_read_*/*]

Error: Syntax error, unrecognized expression: #files-list input[name=files_read_*/*]
    at Function.Sizzle.error (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:1541:8)
    at Sizzle.tokenize (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:2193:11)
    at Sizzle.select (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:2620:20)
    at Function.Sizzle [as find] (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:845:9)
    at jQuery.fn.init.find (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:2873:11)
    at new jQuery.fn.init (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:2983:32)
    at jQuery (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\jquery\dist\jquery.js:139:10)
    at readFile (file:///C:/Users/***/AppData/Local/DiSpeak/app-2.3.1/resources/app/js/script.js:996:9)
    at Client.<anonymous> (file:///C:/Users/***/AppData/Local/DiSpeak/app-2.3.1/resources/app/js/script.js:715:7)
    at Client.emit (events.js:187:15)

v2.4.0-Alpha* から 2.* に戻すと起きます。
v2.4.0からは起きなくなりますので…。

自分が参加している「ボイスチャンネル」の出入りのみ読み上げる機能

入っている通話のみのボイスチャットログ読み上げ機能

自分が参加している「ボイスチャンネル」の出入りのみ、読み上げる機能
ってことであれば以下で対応は可能っぽそう。たぶん。

client.on('voiceStateUpdate', function(oldMember, newMember) {
  const IsMeMuted = (function(){
    const voiceChannelMembers = (function(){
      if (oldMember.voiceChannel != null) return oldMember.voiceChannel.members; // 退出時
      if (newMember.voiceChannel != null) return newMember.voiceChannel.members; // 参加時
    })();
    let muted = false;
    voiceChannelMembers.forEach(function(val, key) {
      if (client.user.id === key) muted = val.mute;
    });
    return muted;
  })();
  
  if (IsMeMuted) {/*処理*/}
});

Embedのみのメッセージの読み上げ

今まで読まれていなかったEmbedのみのメッセージが読み上げされるようになっているようです。
(サーバーと送信者の名前のみ読まれ、Embed本体は読み上げされない)
Embedのみのメッセージは読まれない方が良いと思います👍

Ver. 2.4.0-Alpha1

JSONが消えてしまう対応

クリーナー系のソフトを使うと削除されてしまう事があったのでLocalStorageにも設定を保存する。

複アカ対応

複数垢を同時に扱えるようにしてほしい

Render側で全て処理させれば可能かも。
問題は設定ファイルぐらい。(もうJSONやめてLocalStorageに統一するのも手では)

アバターの取得方法を変更

const avatarURL = (function() {
  if (user.avatarURL != null) return user.avatarURL.replace(/\?size=\d+/, '');
  return user.defaultAvatarURL;
})();

から

const avatarURL = user.displayAvatarURL.replace(/\?size=\d+/, '');

に変更する

棒読みちゃん Ver0.1.11.0 Beta20 の対応

棒読みのver0.1.11.0 beta20が最近配信されていたので、DLしてdispeakでも使おうと思ったのですが、
beta16と同じ設定でexeだけbeta20にして見ましたが動きません。

アップデートされてるの初めて知りました…
あとでDLして確認します。

spawn cmd.exe ENOENT

Error: spawn cmd.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:232:19)
    at onErrorNT (internal/child_process.js:407:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)

PATHが通ってないのかな?(再現できず…)

最小化でタスクトレイに格納機能

要望なのですが、起動した後に自動で読み上げ開始、最小化でタスクトレイに格納の機能があると更に使いやすく便利になるのではないかと思います。

たしか「Tray | Electron」で実装できた気がする…

ウィンドウの位置を保持させる

参考サイト:Electronでデスクトップウィジェットを作るまで

function openWindow () {
    // ウィンドウのオブジェクトを取得
    var win = require("remote").getCurrentWindow();
    // ウィンドウ位置を復元
    if (localStorage.getItem("windowPosition")) {
        var pos = JSON.parse(localStorage.getItem("windowPosition"));
        win.setPosition(pos[0], pos[1]);
    }
    // クローズ時にウィンドウ位置を保存
    win.on("close", function() {
        localStorage.setItem("windowPosition", JSON.stringify(win.getPosition()));
    });
    // ウィンドウを表示
    win.show();
}

棒読みちゃんの設定が保存されない

DiSpeakを先に終了すると教育の追加がリセットされてしまう。
ほかの変更もファイルに記録されてないと思う。
原因は棒読みちゃんが強制終了されてるからだと予想。

DiSpeakの閉じるが働いていない

DISPEAK を タスクバーにピン留めする
「設定」の「ウィンドウの閉じるの設定」を off にし、ウィンドウを閉じる
タスクバーにピン留めしたアイコンから再度ウィンドウを開く
アイコンを押すたびにアプリが多重起動し、読み上げが重複する

何らかの理由でmainWindow.close();が動いていない?
プロセスが生き続けている。
単純に多重起動するだけ。
app.requestSingleInstanceLock()で多重起動を防げるので利用する。

自分がミュートの時のみ、自分のチャットを読み上げる

discordで自分がミュートしている最中に自分の送信したチャットを読み上げさせることは可能でしょうか?

例えば…

client.on('message', function(data) {
  const IsMuted = data.member.mute;
  if (IsMuted) {/*処理*/}
});

で取得することは可能だが、VCに入っていない状態だとキャッシュにる(=本当にミュートかどうか判断できない)

let IsMuted = false;
client.on('voiceStateUpdate', function(oldMember, newMember) {
  if (client.user.id === newMember.id) IsMuted = newMember.mute;
});
client.on('message', function(data) {
  if (IsMuted) {/*処理*/}
});

という方法もアリ?(結局VCに入るまではfalseのまま、というオチ)

スクロールバー増殖 & ウィンドウが崩れるバグについて

DiSpeak 2.4.0にて右側のスクロールバーが2つに増えたりウィンドウが崩れるバグを発見したので報告しておきます。
バグ再現動画には各サーバーの情報が含まれているためTwitterのDMに送っておきます。
今後とも開発頑張ってください!

プリセットの保存・切り替え

サーバー等の読み上げのON/OFFを設定したプリセットを保存できるようにし、楽に呼び出せるようにしてほしい
VR中は重要な読み上げ以外受け取らない等の使い方をしたいため

DMの読み上げをOFFにしても、自分のチャットが読まれてしまう

DM読み上げを外していても自分の発言読み上げがONになっていると送信したログだけ読み上げるようです

if (channelType == 'directmessage' && userId != authorId) {
  // settingにDMIDがない or 特定のDMを読み上げない
  if (setting.directmessage[authorId] == null || !setting.directmessage[authorId]) return;
}

あたりの調整をすれば解決しそう

メンションの読み上げ

現状、メンション部分の読み上げをしていない(削除している)ので、読み上げるようにする

設定とか、どう読み上げるかとか、他人のメンションをどうするとか…
(役職宛のメンションとかどうすりゃいいんだろうね!なやむ!)

Cannot read property 'id' of null

"TypeError: Cannot read property 'id' of null
    at ClientDataManager.newUser (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\discord.js\src\client\ClientDataManager.js:43:36)
    at ReadyHandler.handle (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\discord.js\src\client\websocket\packets\handlers\Ready.js:34:26)
    at WebSocketPacketManager.handle (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
    at WebSocketConnection.onPacket (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)"

discord.jsにnullを渡してるのが原因っぽい。

アクティブ時のみ読み上げる機能

Discordがアクティブではない時には読み上げず、
アクティブにした時に、非アクティブ時に受信した全てのチャットを読み上げることはできますでしょうか?

そもそも、Discordのアクティブ・非アクティブの状態って取得できるんですかね…??
と思って調べたらactive-windowってモジュールを使えばできそう…

Error: Can not find Squirrel

Error: Can not find Squirrel
    at AutoUpdater.emitError (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\electron.asar\browser\api\auto-updater\auto-updater-win.js:70:24)
    at AutoUpdater.checkForUpdates (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\electron.asar\browser\api\auto-updater\auto-updater-win.js:41:19)
    at autoUpdateCheck (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\index.js:38:21)
    at EventEmitter.ipcMain.on (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\app\index.js:338:3)
    at EventEmitter.emit (events.js:182:13)
    at WebContents.<anonymous> (C:\Users\***\AppData\Local\DiSpeak\app-2.3.1\resources\electron.asar\browser\api\web-contents.js:334:13)
    at WebContents.emit (events.js:182:13)

自動更新周りのエラー?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.