実現したいこと
チャットワークを使用しています。
グループチャットごとに、自分が投稿したチャットを一括で削除したいです。
発生している問題・分からないこと
プログラミングの知識が無いため自力でソースを書けません。
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コピペで使えるものがほしいのですが、ググっても見当たりませんでした。
補足
特になし
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
Google Apps Scriptのタグがありますので、
GASでの処理をご希望という前提で回答します。
GASでメッセージを取得できる件数には
ChatworkのAPIの制限があります。
最大で最新の100件までが取得可能ですが、
他のメンバーが投稿したものや
既に削除したものも含んで最後の100件が上限です。
それ以前のメッセージを遡っては取得することはできません。
このため、削除可能なメッセージの数は、
実際にはもっと少なくなります。
このことを前提としたスクリプトの例です。
JavaScript
1function deleteAllMyMessages() { 2 // const properties = PropertiesService.getScriptProperties().getProperties(); 3 // const token = properties.cw_token; 4 // const room_id = properties.cw_room_chatTest; 5 // const user_id = properties.cw_user_id; 6 7 const token = 'xxxxxxxxxxxxxx'; 8 const room_id = '99999999'; 9 const user_id = '99999999'; 10 11 // メッセージ一覧を取得(削除済、他メンバー送信も含め、上限は最新の100件) 12 const url = `https://api.chatwork.com/v2/rooms/${room_id}/messages`; 13 let options = {method: 'GET', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 14 const response = UrlFetchApp.fetch(url + '?force=1', options).getContentText(); 15 console.log(response); 16 17 // 取得したメッセージから自分のメッセージID(未削除)を抽出 18 if (response.includes('message_id')) { 19 const contents = JSON.parse(response); 20 const message_ids = contents.filter(v => v.account.account_id == user_id && v.body != '[deleted]').map(v => v.message_id); 21 22 // メッセージを削除 23 if (message_ids.length > 0) { 24 options = {method: 'DELETE', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 25 for (const id of message_ids) { 26 console.log(JSON.parse(UrlFetchApp.fetch(url + '/' + id, options))); 27 } 28 } else { 29 console.log('削除するメッセージがありませんでした。'); 30 } 31 } else { 32 console.log('メッセージを取得できませんでした。'); 33 } 34}
なお、
GASによる方法以外の方法で100件超のメッセージを全て取得する方法は、
丁寧にネットを検索すると見つかると思います。
この方法によってメッセージを取得できた場合は、
ダウンロードされたファイルのうち、
999999999_messages.jsonファイル(999999999はルームID)を
Googleドライブにアップロードして次のスクリプトで削除できます。
JavaScript
1function deleteChatworkMessages() { 2 const fileName = '999999999_messages.json'; 3 4 // const properties = PropertiesService.getScriptProperties().getProperties(); 5 // const token = properties.cw_token; 6 // const room_id = properties.cw_room_chatTest; 7 // const user_id = properties.cw_user_id; 8 9 const token = 'xxxxxxxxxxxxxx'; 10 const room_id = '99999999'; 11 const user_id = '99999999'; 12 13 const file = DriveApp.getFilesByName(fileName).next(); 14 if (file) { 15 const json = file.getBlob().getDataAsString('UTF-8'); 16 if (json.includes('aid')) { 17 const messages = JSON.parse(json); 18 const message_ids = messages.filter(v => v.aid == user_id && v.msg != '[deleted]').map(v => v.id); 19 if (message_ids.length > 0) { 20 const url = `https://api.chatwork.com/v2/rooms/${room_id}/messages`; 21 const options = {method: 'DELETE', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 22 for (const id of message_ids) { 23 console.log(JSON.parse(UrlFetchApp.fetch(url + '/' + id, options))); 24 } 25 } else { 26 console.log('削除するメッセージがありませんでした。'); 27 } 28 } else { 29 console.log('メッセージを取得できませんでした。'); 30 } 31 } else { 32 console.log(`${fileName}というファイルが見つかりません。`); 33 } 34}
投稿2024/01/25 03:23
総合スコア861
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/01/25 03:40 編集
2024/01/25 07:00