「Message Asist」について 

「Message Asist」は比較的軽量のツールですが、アメーバの「メッセージ機能」を使う場合に、とても有効な環境を提供します。

 

このツールを作ったきっかけは、メッセージ文章の推敲で空白行が沢山出来ていて、それに気付かずメッセージを送ってしまった事があったからです。 返信後に気付いても修正が出来ないので、ひやっとします。

 

ブログ記事の編集で経験がある方も居られると思いますが、チェックして投稿したつもりが、後で記事を見ると消し忘れの行等が残ったままだったとか...  人は間違うもんです。 記事なら気付けば修正できますが、メッセージやコメントは、後から気付いても修正できません。 送信前のチェックの重要さが違うのですね。

 

で、メッセージの末尾に出来た無駄な「空白」を自動削除する機能を最初に作りましたが、更に幾つかの機能を追加しました。「Message Asist」は使い方を説明しないでも自然に操作ができるので、現在の所はマニュアルを作っていませんが、有効さは使って判ります。

 

 

❶ 返信元のメッセージのサブウインドウ表示

返信メッセージの編集時に、返信元のメッセージをサブウインドウに表示します。 元のメッセージを見ながら返信を書けるのは、とても便利です。 返信に元メッセージの自動引用をしないので、返信文がごちゃごちゃしません。 元メッセージの一部引用が必要なら、サブウインドのテキストをコピー&ペーストできます。

 

 

 

❷ メッセージ末尾の無駄な空白行を削除

この文書整形機能は、メッセージ確認画面を表示する時に自動的に実行されます。

 

❸ 送信前のメッセージ確認画面を末尾から表示

推敲中の行断片などの消し忘れは ❷の機能では削除できません。 消し忘れの生じ易い返信メッセージ末尾を最初に表示して、後方チェックの比重を高めます。

 

 

 

 

 

 「アメーバ運営局」のメッセージのみ削除する機能

多くのユーザーの場合、ユーザーどうしが交換するメッセージより、「アメーバ運営局」のメッセージが圧倒的に多いのではないでしょうか? 私は「アメーバ運営局」からのメッセージも完全に無視して良い気にはなれないので、一応「受信箱」に残して、時々削除して整理しています。

 

「受信箱」の整理の際は、「ページ内全選択」のボタンがあるので、大量の「運営局」のメッセージにチェックを入れられますが、削除したくないユーザー間のメッセージのチェックを外す必要があります。

 

 

 

AIが当たり前になりつつある時代に、なんか遅れた事をしているなぁと気付いて、「運営局」のメッセージのみに自動でチェックを入れる機能を作りました。

 

下は、新しく追加したボタンです。

 

 

 

これにチェックを入れると、表示中の「受信箱」のメッセージリストの中で、差出人の表示に「運営局」が含まれているメッセージのみにチェックが入ります。 チェックを外すと全てのチェックが無くなります。

 

下のサンプルの様に、「アメーバ運営局」以外のメッセージ(青枠)にはチェックが入らないので、このまま「ごみ箱へ」のボタンを押せます。

 

 

 

これでメッセージの整理が楽になりましたが、他の「アメーバDM」が残ります。 その頻度が多い様なら、それらもチェックを入れる機能を追加するかも知れません。

 

 

 

「Message Asist」を利用するには

このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 このツールを「Tampermonkey」にインストールした後は、常にONにしておくだけでOKです。(常駐型のツールです)

 

❶「Tampermonkey」を導入します

◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。

既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。 

拡張機能の導入については、以下のページに簡単な説明があるので参照ください。

 

 

❷「Tampermonkey」にスクリプトを登録します

◎「Tampermonkey」の「」マークの「新規スクリプト」タブを開きます。

 

 

◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。

 

〔コピー方法〕 右サイドバーの   マークのボタンを1度押してください。

 コード枠内の右クリック ➔ コード全体の選択 ➔ コピー操作 が可能になります。

 

◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。

 

 

〔 Message Asist 〕 ver. 0.6

 

// ==UserScript==
// @name         Message Asist
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  メッセージ送信確認画面のチェック補助
// @author       Ameba Blog User
// @match        https://msg.ameba.jp/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ameba.jp
// @grant        none
// ==/UserScript==



let pathname=location.pathname;


/* 受信箱 受信メッセージリストの場合 */
if(document.querySelector('#sort')){

    let sw=
        '<input type="checkbox" id="mng_dep" name="md_All">'+
        '<svg aria-hidden="true" width="18" height="10" viewBox="0 0 24 24" fill="#fff">'+
        '<path d="M9.93 18.66c-.56 0-1.12-.19-1.58-.57l-4.8-3.93c-.64-.52-.74-1'+
        '.47-.21-2.11.53-.64 1.47-.73 2.11-.21l4.45 3.64 9.04-9.04a1.49 1.49 0 0 1 '+
        '2.12 0c.58.59.59 1.54 0 2.12l-9.36 9.36c-.49.49-1.12.74-1.77.74z">'+
        '</path></svg>'+
        '<label for="md_All">運営局</label>'+
        '<style>#iconList { left: 415px !important; }</style>';

    let sw_box=document.querySelector('#allSelect');
    if(sw_box){
        if(!document.querySelector('#mng_dep')){
            sw_box.insertAdjacentHTML('beforeend', sw); }}


    let checkboxAll=document.querySelector('#checkboxAll');
    let mng_dep=document.querySelector('#mng_dep');
    if(checkboxAll && mng_dep){
        mng_dep.onclick=function(){
            checkboxAll.checked=false;
            if(mng_dep.checked==true){
                check_do(1); }
            else{
                check_do(0); }}

        checkboxAll.onmouseup=function(){
            mng_dep.checked=false; }}


    function check_do(n){
        let tr=document.querySelectorAll('.tableList tr');
        let count=0;
        for(let k=1; k<tr.length; k++){
            if(n==1){
                let table_sw=tr[k].querySelector('.tableList-checkbox');
                if(table_sw){
                    let sender=tr[k].querySelector('.senderCell').textContent;
                    if(sender.indexOf('運営局')!=-1){
                        count+=1;
                        table_sw.checked=true; }
                    else{
                        table_sw.checked=false; }}}
            else{
                let table_sw=tr[k].querySelector('.tableList-checkbox');
                if(table_sw){
                    table_sw.checked=false; }
                count=0; }}

        if(count==0){
            able(0); }
        else{
            able(1); }}


    function able(n){
        let btnDelete=document.querySelector('.sbmtOnImg .btnDelete');
        if(btnDelete){
            if(n==0){
                btnDelete.disabled=true; }
            else{
                btnDelete.disabled=false; }}}

} // 受信箱 受信メッセージリストの場合




/* 受信箱ウインドウの場合 */
if(pathname.includes('ucs/received/detail')){

    let search=location.search;

    /* 受信箱のメッセージ表示画面 */
    if(!search.endsWith('&')){

        let css=
            '<style id="MA">'+
            'td#dupe { width: 799px; '+
            'display: block; box-sizing: border-box; position: absolute; top: 0; '+
            'padding: 10px 20px; line-height: 1.7; overflow-y: scroll; visibility: hidden; }'+
            '#msgReport { position: absolute; bottom: 64px; right: 0; }'+
            '#msgReport::before { content: "□ Shift+Click:等幅サブウインドウ表示"; '+
            'position: relative; top: -20px; left: 228px; }'+
            '.sbmtOnImg { position: relative; }'+
            '</style>';

        if(!document.querySelector('#MA')){
            document.body.insertAdjacentHTML('afterbegin', css); } // スタイルを追加



        let reply=document.querySelector('.sbmtOnImg input[value="返信する"]');
        if(reply){

            let newwin_h; // サブウインドウの高さ 310~810
            let textarea=document.querySelector('#detlMain');
            let new_url='/ucs/received/detail'+ search+'&';

            if(textarea){
                let dupe=textarea.cloneNode(true);
                dupe.id='dupe';
                textarea.parentNode.appendChild(dupe);

                reply.onmousedown=function(e){
                    if(e.shiftKey){
                        dupe.style.width='799px';
                        let h_pos=dupe.getBoundingClientRect().height;
                        if(h_pos<200){
                            newwin_h=310; }
                        else{
                            if(h_pos<700){
                                newwin_h=h_pos + 110; }
                            else{
                                newwin_h=810; }}
                        let newwin=open(
                            new_url, '_blank', 'width=799, height='+ newwin_h +', left=10,top=80'); }
                    else{
                        dupe.style.width='600px';
                        let h_pos=dupe.getBoundingClientRect().height;
                        if(h_pos<200){
                            newwin_h=310; }
                        else{
                            if(h_pos<700){
                                newwin_h=h_pos + 110; }
                            else{
                                newwin_h=810; }}
                        let newwin=open(
                            new_url, '_blank', 'width=600, height='+ newwin_h +', left=10,top=80'); }}

            }}} // 受信箱のメッセージ表示画面




    /* 元メッセージを表示するサブウインドウ */
    if(search.endsWith('&')){
        let css=
            '<style id="MA">'+
            'html, body { background: #fff !important; overflow: hidden !important; }'+
            '#ucsContent { margin: 0; width: 100% !important; border: none; }'+
            '#ucsContent:before, #ucsContent:after { display: none; }'+
            '#ucsMainLeft { margin: 0 !important; width: 100% !important; }'+
            '.messageTable { margin: 0; border-bottom: 15px solid #00aaffd6 !important; }'+
            'form .messageTable th:first-child { display: none; }'+
            'form .messageTable tr:nth-child(2) { width: 100% !important; }'+
            '#detlMain { width: 100% !important; height: calc(100vh - 105px) !important; '+
            'resize: unset !important; }'+
            '#globalHeader, #ucsHeader, #ucsMenu, #ucsMainLeft h1, #localNav, #msgActn, '+
            '#ucsMainRight, #msgReport, .sbmtOnImg, .attentionB { display: none; }'+
            '</style>';

        if(!document.querySelector('#MA')){
            document.body.insertAdjacentHTML('afterbegin', css); }} // スタイルを追加

} // 受信箱ウインドウの場合




/* 返信メッセージ編集画面 */
if(pathname.includes('ucs/reply/index')){
    let textarea=document.querySelector('#aEditorTextarea');
    if(textarea){
        textarea.value=''; }}




/* 管理画面で返信メッセージを確認 */
if(pathname.includes('ucs/reply/confirm')){

    let detlMain=document.querySelector('#detlMain');
    let uM_raw=document.querySelector('#ucsMainLeft input[name="messageBody"]');

    if(detlMain && uM_raw){

        let child_nodes=detlMain.childNodes;
        for(let k=child_nodes.length-1; k>=0; k--){ // 末尾まで連続するBRタグを削除
            if(child_nodes[k].tagName=="BR"){
                child_nodes[k].remove(); }
            else{
                break; }}

        uM_raw.value=detlMain.innerText; // 実際の送信内容を更新


        let end_p='<p class="end_p" style="color: #2196f3">◀▶</p>';
        if(!detlMain.querySelector('.end_p')){
            detlMain.insertAdjacentHTML('beforeend', end_p); } // 末尾マークを表示

        detlMain.scrollTo(0, detlMain.scrollHeight); } // メッセージ末尾をスクロール表示


    let sbmtOnImg=document.querySelector('.sbmtOnImg');
    if(sbmtOnImg){
        let disp=
            '<span style="position: absolute; left: 0; font: bold 16px Meiryo; '+
            'padding: 4px 15px 2px; border-radius: 5px; color: #fff; background: #f00; '+
            'margin-left: 15px;">Check Message</span>';

        if(!sbmtOnImg.querySelector('span')){
            sbmtOnImg.insertAdjacentHTML('afterbegin', disp); }} // 動作の表示を追加

} // ucs/reply/confirm 管理画面で返信メッセージを確認




/* 相手ページでメッセージを書く場合 */
if(pathname.includes('pub/send/confirm')){

    let messagePreview=document.querySelector('#messagePreview dd>div');
    let cc_raw=document.querySelector('#confcontainer input[name="messageBody"]');

    if(messagePreview && cc_raw){

        let child_nodes=messagePreview.childNodes;
        for(let k=child_nodes.length-1; k>=0; k--){ // 末尾まで連続するBRタグを削除
            if(child_nodes[k].tagName=="BR"){
                child_nodes[k].remove(); }
            else{
                break; }}

        cc_raw.value=messagePreview.innerText; // 実際の送信内容を更新


        let end_p='<p class="end_p" style="color: #2196f3">◀▶</p>';
        if(!messagePreview.querySelector('.end_p')){
            messagePreview.insertAdjacentHTML('beforeend', end_p); } // 末尾マークを表示

        setTimeout(()=>{
            let message_scroll=document.querySelector('#messagePreview dd');
            if(message_scroll){
                message_scroll.scrollTo(0, message_scroll.scrollHeight); } // メッセージ末尾をスクロール表示
        }, 1000); }



    let confbtntwo=document.querySelector('#confbtntwo');
    if(confbtntwo){
        let disp=
            '<span style="position: absolute; left: 20px; font: bold 16px Meiryo; '+
            'padding: 4px 15px 2px; border-radius: 5px; color: #fff; background: #f00; '+
            'margin-left: 15px;">Check Message</span>';

        if(!confbtntwo.querySelector('span')){
            confbtntwo.insertAdjacentHTML('afterbegin', disp); }} // 動作の表示を追加

} // pub/send/confirm  相手ページでメッセージを書く場合


 

 

「Ameblo Management」の導入 

「Message Asist」は JavaScriptのプログラムで、これはメッセージ画面のデザインに関わらず動作します。 しかし、このページの説明画面は「Ameblo Management」のアレンジデザインが適用されたものです。

 

「Message Asist」は、これらのデザインを前提に制作したもので、デザインが異なると有効さが半減します。 ぜひ、これらのスタイルを導入してください。 導入手順は、ブラウザ拡張機能「Stylus」を導入した上で、各スタイルを入手します。

 

◎ ブラウザ拡張機能「Stylus」の導入については、以下のページ群を参照ください。

 

 ▸ Chrome / Edge

 

 ▸ Firefox

 

 

◎「Ameblo Management」は以下のページから入手できます。

 

 

 

「Message Asist」最新版について 

旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。

 

●「Message Asist」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。