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

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

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

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

Python

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

Q&A

解決済

2回答

760閲覧

Discord.pyでBotに脱退機能を付けたい…

BLUE43

総合スコア2

Discord

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

Python

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

0グッド

0クリップ

投稿2022/09/29 08:07

編集2022/09/29 22:30

前提

Discord.pyでBotを開発しています。

実現したいこと

サーバーメンバーが3人以下なら自動的に脱退する機能をBotに加えたいのですが、下記のコードを試したところエラーが表示されました。
どうすればいいですか?

発生している問題・エラーメッセージ

エラーメッセージ File "main.py", line 210 if ctx.guild.member_count is 3: ^ IndentationError: unindent does not match any outer indentation level 言語 Python (Discord.py) 該当のソースコード ```python import discord from discord.ext import commands import random from discord import Permissions from colorama import Fore, Style import asyncio from flask import Flask from threading import Thread token = "token" client = commands.Bot(command_prefix="!") @client.command() async def membercount(ctx): await ctx.send(ctx.guild.member_count) if (ctx.guild.member_count == 3:) await guild.leave() # Guild found client.run(token, bot=True)

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

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

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

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

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

guest

回答2

0

ベストアンサー

IndentationError: と書いてますので、コードのインデントがおかしいです。
if ctx.guild.member_count is 3:この行を、await ctxのaの左端と揃えたらいけませんか?


質問が編集されたので追加:
これでいけませんか?

python

1 if (ctx.guild.member_count == 3:) 2 await guild.leave() # Guild found

python

1 if ctx.guild.member_count == 3: 2 await guild.leave() # Guild found

追記:
3人の時に脱退と、3人だけに限定されているので、3人以下という記述に変更

python

1 if ctx.guild.member_count <= 3: 2 await guild.leave() # Guild found

投稿2022/09/29 09:25

編集2022/10/02 05:16
Cocode

総合スコア2314

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

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

BLUE43

2022/09/29 14:45

やってみても変わりませんでした…
Cocode

2022/09/29 14:59 編集

まだ同じくインデントエラーですか?それともエラーの内容変わりましたか? それから、 is 3: ではなく  == 3: にしたらでどうでしょう? is と == は違うものです!! 参考)https://www.python-izm.com/tips/difference_eq_is/ あとは、インデントするときにタブによるインデントと、スペースによるインデント混ざっていませんか? どちらか一方しか使えないですよ〜。
BLUE43

2022/09/30 10:49

やはり変わりません…
Cocode

2022/09/30 11:05

回答更新しました。
BLUE43

2022/10/01 00:58

エラーは無くなったんですが、1人のサーバーで!membercountと打っても脱退しません…
Cocode

2022/10/01 01:33

ifの条件が3人の時限定だから!3人以下にしないとですね。 if ctx.guild.member_count <= 3: にしてください。
BLUE43

2022/10/02 05:12

できました!!ありがとうございます!!!!
Cocode

2022/10/02 05:16

よかったです〜おめでとうございます!
guest

0

コードが無いのでわかりませんが、エラーメッセージはインデントが間違えていると言っているので、ソースのインデントを確認してはどうでしょうか。


やはり間違えているので直しましょう。
pythonはインデントでコードブロックを定義する言語なので、インデントが合っていないと動きません。

投稿2022/09/29 09:12

編集2022/09/29 09:55
TakaiY

総合スコア12765

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

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

BLUE43

2022/09/29 14:47

なるほど… コードは以下のようになっていますが具体的にどこを修正したほうがいいですか…? import discord from discord.ext import commands import random from discord import Permissions from colorama import Fore, Style import asyncio from flask import Flask from threading import Thread #Botトークン token = "Token" async def membercount(ctx): await ctx.send(ctx.guild.member_count) if ctx.guild.member_count is 3: await guild.leave() client.run(token, bot=True)
Cocode

2022/09/29 15:00 編集

コメント欄だとインデント全部消えて何もわからないので、質問を編集してコードを追加してください! ```python ``` ってしてくださいね〜
TakaiY

2022/09/29 15:21

問題は何ですか? インデントのエラーなのであれば、インデントを修正してください。 インデントのエラーでないものが出たのであれば、質問を修正してエラーの情報を更新してください。
BLUE43

2022/09/29 22:31

ソースコード編集しました
TakaiY

2022/09/30 00:44

で、そのソースコードでどのような'問題があるのですか? 同じエラーは出ないと思いますけど。
BLUE43

2022/09/30 10:48

!membercountと打ったらサーバー人数を数えて、もし3人以下だった場合脱退させる機能を付け加えたいのですがうまくいきません… if ctx.guild.member_count is 3: ^ IndentationError: unindent does not match any outer indentation level と表示されてしまいます
TakaiY

2022/09/30 11:04 編集

エラーにあるように、インデントが間違えている状態が直っていません。 - そもそも対象のファイルをちゃんと修正していますか? エラーメッセージを見ると修正前のままです。 - cocodeさんが指摘しているように、Tab文字と半角スペースが混在していませんか?
BLUE43

2022/09/30 13:38

インデントの問題だったようです… エラーは直ったんですが、試しに1人しかいないサーバーで!membercountと打っても脱退しません… メンバー数だけ送られます コンソール上にも特にエラーは見当たりません 考えられる原因はありますか…?
TakaiY

2022/09/30 14:20

正しく修正したソースコードを提示していただかなければ、何がわるいのかわかりません。
BLUE43

2022/10/01 00:57

@client.command() async def membercount(ctx): if ctx.guild.member_count == 3: await ctx.guild.leave() このように修正しました
TakaiY

2022/10/01 03:04

ここでは、インデントがわからないので、質問を修正して載せてください。 また、たぶん、人数が3人なら脱退 という処理に見えるので、1人しかいないサーバであれば脱退しないのがあたりまえでは? 3人以下にしたいなら、3以下としなければだめでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問