Skip to content

Commit

Permalink
main
Browse files Browse the repository at this point in the history
  • Loading branch information
tensandev committed Jan 19, 2025
1 parent 31ad105 commit 01ff37c
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 7 deletions.
108 changes: 106 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,106 @@
# twitchtroller_anti_bot
Twitchで荒らしのコメントを判断し処理するbot
# TwitchトロールアンチBot

TwitchトロールアンチBotは、Twitch配信中にスパムコメントや同じフレーズが繰り返し投稿されるコメントを自動的に検出し、削除およびユーザーのタイムアウトを行うボットです。配信者が快適なチャット環境を維持するためのツールとして設計されています。

## 特徴

- **フレーズの繰り返し検出**
> 同じフレーズや文字列が連続して投稿された場合にスパムとして検出。
- **タイムアウト機能**
> スパムを投稿したユーザーを自動的に任意の時間をタイムアウト。(実装は任意です)
- **誤検出の防止**
> 日本語特有の自然なコメントを誤って検出しないように設計。
---

## 動作環境

- Node.js 20以上
- Twitchアカウント(Bot用)
- Twitch APIのClient IDとAccess Token

---

## インストール

1. リポジトリをクローンします。

```bash
git clone https://github.com/star-dot123/twitchtroller_anti_bot.git
cd twitchtroller_anti_bot
```

2. 必要な依存関係をインストールします。

```bash
npm install
```

3. `.env`ファイルを作成して、以下の内容を設定します。

```env
TWITCH_CLIENT_ID=your_twitch_client_id
TWITCH_ACCESS_TOKEN=your_twitch_access_token
TWITCH_CHANNEL_NAME=your_channel_name
```

---

## 使用方法

1. ボットを起動します。

```bash
node index.js
```

2. ボットがTwitchチャットに接続され、繰り返しコメントを自動で検出・処理します。

---

## 検出のロジック

- ボットはTwitchチャットのコメントをリアルタイムで監視します。
- コメント内のフレーズを分割し、以下の条件でスパムを検出します。
1. 同じフレーズが3回以上連続。(こちらは任意で変更可能です)
2. 日本語の助詞や一般的な単語(例: 「は」「も」など)は無視。
3. ただし、同じ文字が連続で並んでいる場合は対象になります。
- スパムと判定されたコメントは削除されます。

---

## カスタマイズ

- **繰り返しの許容値**: `index.js`内の以下の部分を編集することで調整可能です。

```javascript
if (repeatedCount >= 3) {
```
- デフォルトでは3回連続の繰り返しでスパムと判定されます。これを変更することでスパム検出の厳しさを調整できます。
- **無視する単語**: 以下のリストを編集してフィルタリング対象外の単語を追加できます。
```javascript
const IGNORED_WORDS = ['', '', '', '', '', '', '', '', 'です', 'ます', ''];
```
---
## 注意事項
- ボットはTwitch APIを使用して動作します。Twitch APIの使用量に注意してください。
- 誤検出を防ぐために、適切な値設定やフィルタリングの調整を行ってください。
---
## ライセンス
このプロジェクトはMITライセンスの下で提供されています。詳細は[LICENSE](./LICENSE)ファイルをご参照ください。
---
## 貢献
バグ報告や機能提案、プルリクエストは歓迎します!ぜひ一緒にプロジェクトを改善しましょう。
---
31 changes: 26 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,37 @@ const channelName = process.env.TWITCH_CHANNEL_NAME;

const client = new ApiClient({ clientId, accessToken });

// 同じ文字の連続を検出する関数
function hasExcessiveCharacterRepetition(text) {
const maxAllowedRepetition = 5; // 許容する最大連続文字数
let lastChar = '';
let repeatCount = 0;

for (const char of text) {
if (char === lastChar) {
repeatCount++;
if (repeatCount >= maxAllowedRepetition) {
return true;
}
} else {
lastChar = char;
repeatCount = 1;
}
}

return false;
}

// 同じフレーズが連続しているか確認する関数
function hasExcessiveRepetition(text) {
function hasExcessivePhraseRepetition(text) {
const phrases = text.split(/[\s.!?]+/).filter(word => word);
let repeatedCount = 1;

for (let i = 1; i < phrases.length; i++) {
if (phrases[i] === phrases[i - 1]) {
repeatedCount++;
if (repeatedCount >= 3) {
return true; // 同じフレーズが3回以上連続している
if (repeatedCount >= 3) { // 同じフレーズが3回以上連続している
return true;
}
} else {
repeatedCount = 1;
Expand All @@ -30,8 +51,8 @@ async function handleMessage(message) {
const text = message.text;
const user = message.user.name;

if (hasExcessiveRepetition(text)) {
console.log(`削除対象: ${message.user.name}`);
if (hasExcessiveCharacterRepetition(text) || hasExcessivePhraseRepetition(text)) {
console.log(`削除対象: ${message.text}`);

await client.kraken.chat.deleteMessage(channelName, message.id);

Expand Down

0 comments on commit 01ff37c

Please sign in to comment.