質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

937閲覧

エラーログも出ずに動かない

Raifu

総合スコア32

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2021/04/11 06:44

5回連続して投稿すればスパムと検知してaとprint、testメッセージを送信させたいです。

コード

Python

1@client.event 2async def on_message(message): 3 count = 0 4 count+=1 5 6 if count > 5: 7 await channel.send("test") 8 await asyncio.sleep(1) 9 print("a")

動かずに試行錯誤してますが良い解決法が思いつきません
エラー無し、ログも無いです。Python3.8.5/VSC使用

Nova124👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppaul

2021/04/11 11:05

5回連続して投稿すればスパムと検知、とありますが、同一ユーザからの投稿であるというのはどうやって判断しているのでしょうか?
Raifu

2021/04/11 11:34

情報不足ですね、まだテストなのでメッセージが連続送信されてから検知という形にしています。
guest

回答2

0

メッセージが送信される度にcountが0に更新されるからでしょう
関数の外でcountを宣言してあげてください

投稿2021/04/11 07:13

Huyu2239

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Raifu

2021/04/11 09:29

宣言しましたがエラーが起きました。 UnboundLocalError: local variable 'count' referenced before assignment Ignoring exception in on_message Traceback (most recent call last): File "C:\Users\user\anaconda3\lib\site-packages\discord\client.py", line 333, in _run_event await coro(*args, **kwargs) File "c:\Users\user\Desktop\twitterauto.py", line 30, in on_message count+=1 UnboundLocalError: local variable 'count' referenced before assignment
退会済みユーザー

退会済みユーザー

2021/04/11 09:46

エラーが発生したコードがあると、回答できるかもしれません。
Raifu

2021/04/11 10:39

@client.event async def on_message(message): count+=1 if count > 5: await channel.send("test") await asyncio.sleep(1) print("a") intentとかを定義している場所でcount = 0で宣言しました
Huyu2239

2021/04/12 15:29

そのエラー文で検索かけるなどをおすすめします
Raifu

2021/04/13 06:49

掛けて分からないから質問してます
Huyu2239

2021/04/13 22:39 編集

そうでしたか 失礼しましたね
Huyu2239

2021/04/14 07:55 編集

この場合でのこのエラーは、変数を関数内での定義(assignment)の前に参照(referenced)した場合に発生するエラーです 関数外での `count = 0` のcountと、関数内での `count += 1` のcountは全くの別物(グローバル変数とローカル変数)であり、参照できません `count += 1` は一見定義に見えますが、内部だと `count = count + 1` となり、定義の前に参照してしまっています なのでon_message内で `global count` を追加し、グローバル変数である、関数外で宣言したcountを関数内で使う宣言を追加しなければなりません
guest

0

Discord.pyにはwait_forというメッセージを待つための関数が用意されています
さらにこれを使うとタイムアウトを指定することが可能です

python

1spam_list = [] 2@client.event 3async def on_message(message): 4 if message.author.id in spam_list: 5 return 6 7 def pred(m): 8 return m.author == message.author 9 10 count = 1 11 spam_list.append(message.author.id) 12 13 while count > 5: 14 15 try: 16 await client.wait_for('message', check=pred, timeout=1.0) 17 count=+1 18 except: 19 spam_list.remove(message.author.id) 20 return 21 22 await message.channel.send("test") 23 print("a") 24

投稿2021/05/08 05:37

Nova124

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問