yudukiak / dispeak Goto Github PK
View Code? Open in Web Editor NEWブヨミはディスコードの告知を語る。Bouyomi speaks the notice of Discord.
Home Page: https://twitter.com/micelle9/status/1004166580182216704
License: MIT License
ブヨミはディスコードの告知を語る。Bouyomi speaks the notice of Discord.
Home Page: https://twitter.com/micelle9/status/1004166580182216704
License: MIT License
Dispeak使わせていただいてます。 質問ですが、任意に設定した文字列が本文に含まれる場合は読み上げないという機能があると嬉しいのですが実装は難しいですか?
正規表現込みで設定できるような機能
おそらくAlpha版を入れたとき?にToken以外がリセットされる気がする…
ただ原因がつかめていないので、調査します。
バックグラウンド起動してほしい。一度設定してしまえば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単体で指定できるとありがたいです。
読み上げは全て棒読みちゃんで行なっているので、以下の方法でスピーカーやモニターから流すことは可能です。(個別に設定は不可能です…)
なお、本件はサポート対象外です。
ディスピークを起動させたり停止させたりするときに左側にテロップが出ると思いますが、それをWindowsのほうに通知してほしいです。
https://electronjs.org/docs/tutorial/notifications
たぶんコレで対応可能かも?
昨日追加された新フォーマット(スポイラー)で書かれたメッセージでも普通に読み上げてしまうため、読み上げる/読み上げないの設定項目を追加してほしいです。
https://support.discordapp.com/hc/en-us/community/posts/360030058672-Spoiler-tags
ログのテキストファイル化をボタンで簡単に出来るようにしてほしい
自分でコード書いた方が早そうに思えますが…
ユーザーが書いた絵文字は普通に絵文字として出力されるのですが
Botが書いた絵文字はなぜ (スタンプ) になってしまうのでしょうか
:hugging:
を何らかの方法で🤗
へ変換させる
// 追加スタンプを読ませない "<:987654321:12345>, :foo12345:"
var content = content.replace(/<?:[A-Za-z0-9]+:([0-9]+)?>?/g, "(スタンプ)");
停止などしたときに左のテロップを消すか 移動させるかしないと次の作業ができないのでそれも改善してほしいと思いました。
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_*/*]
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のみのメッセージは読まれない方が良いと思います👍
Ver. 2.4.0-Alpha1
クリーナー系のソフトを使うと削除されてしまう事があったのでLocalStorageにも設定を保存する。
例えば
|TH|TH|TH|
|----|----|----|
|TD|TD|TD|
||TD||
|TD|TD|TD|
と送信した場合||TD||
がスポイラー扱いになる。
という、どーでもいい不具合をなんか見つけた暇人です。
複数垢を同時に扱えるようにしてほしい
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+/, '');
に変更する
起動時にチェックをすれば可能かと思う。
if(d_start == true){
bouyomiStart();
}
ユーザー名を頻繫に変える人がいて誰かわからなくなる。
#5681みたいなの
教育でユーザー名に変えれたら他の形でも良い
棒読みのver0.1.11.0 beta20が最近配信されていたので、DLしてdispeakでも使おうと思ったのですが、
beta16と同じ設定でexeだけbeta20にして見ましたが動きません。
アップデートされてるの初めて知りました…
あとでDLして確認します。
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が通ってないのかな?(再現できず…)
オートアップデート中にアップデートチェックを行なうと起きる。
ボタンを押せなくするなどの対応予定。
index.js
に対し
const package = require("./package.json");
console.log(package["version"]);
でいけそうな気がする。
Error: read ECONNRESET
at exports._errnoException (util.js:1024:11)
at TCP.onread (net.js:610:25)
この辺りが参考になりそう
https://github.com/Dragory/modmailbot/issues?utf8=%E2%9C%93&q=ECONNRESET
ならなかったゾ
現在は1つに纏められているので、個別に設定する機能を追加。
単純に読み上げるテキストの先頭に「棒読みちゃんのコマンド」を設定できる機能にします。
要望なのですが、起動した後に自動で読み上げ開始、最小化でタスクトレイに格納の機能があると更に使いやすく便利になるのではないかと思います。
たしか「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();
}
拡張子ごとに設定できるといいかも。
DiSpeak2.4.0Alpha1
要確認事項。
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読み上げを外していても自分の発言読み上げがONになっていると送信したログだけ読み上げるようです
if (channelType == 'directmessage' && userId != authorId) {
// settingにDMIDがない or 特定のDMを読み上げない
if (setting.directmessage[authorId] == null || !setting.directmessage[authorId]) return;
}
あたりの調整をすれば解決しそう
https://twitter.com/micelle9/status/1040809007475089410
discord.js側の問題っぽそう?
多発していないので現状は様子見…(というか再現すらわからない!)
現状、メンション部分の読み上げをしていない(削除している)ので、読み上げるようにする
設定とか、どう読み上げるかとか、他人のメンションをどうするとか…
(役職宛のメンションとかどうすりゃいいんだろうね!なやむ!)
"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
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)
自動更新周りのエラー?
Error: connect ETIMEDOUT 192.168.***.***:50001
at Object.exports._errnoException (util.js:1024:11)
at exports._exceptionWithHostPort (util.js:1047:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1150:14)
おそらく棒読みちゃんにアクセスできていない。
現在client.users.get(ID)
でユーザー情報を取得しているが、キャッシュがない場合nullになる。
もしnullだった場合はclient.fetchUser(ID)
で取得するようにする。
https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=fetchUser
v1.x.xにあった機能を再度復活させる。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.