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

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

ただいまの
回答率

90.38%

  • Python

    12873questions

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

  • Python 3.x

    10746questions

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

discord.pyでメンバーのニックネームを変更する方法が分からない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 394

meoto2408

score 4

コマンドを実行すると役職を付与、ニックネームを変更したいです。

    @commands.command()
    async def agree(self, ctx, mcid):
        if ctx.channel.id == 499427177444409366:
            if mcid == "notid":
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(ctx.author, ctx.author_name + "#非スポンサー")
            else:
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(ctx.author, mcid + "#非スポンサー")
        if ctx.channel.id == 555051444596768789:
            if mcid == "notid":
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(ctx.author, ctx.author_name + "#非スポンサー")
            else:
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(ctx.author, mcid + "#非スポンサー")
        else:
            return

追記

ですが、ニックネームを変更する方法がわかりません。
どうかご教授お願い致します。

追記2

pythonのバージョンは3.6.6です。
discord.pyは1.0.0aです。

discord.pyのドキュメント等は既に確認済みです。
それでできませんでした。

どうかご教授ください。

追記3

それでできませんでした。について・・
以下を読んでも分からなかった部分を質問してください。という部分から読んでできませんでした、という意味でした。わかりずらい表記をしてすみません。

ニックネームの変更がわかりません。
また、こういう場所で質問する場合はドキュメントをしっかり読んで、日本語じゃないなら翻訳を使いながら読み取ってそれで分からなければ聞くという流れで質問しなければ失礼だとわかってます。
なので、実装したいことを説明しますと、
!?agree Monster2408と入力するとニックネームがMonster2408#非スポンサーとなるようにしたいです。

await ctx.bot.change_nickname(mcid + "#非スポンサー")このようにしたり、ctxself.botmcidにしたり、ここを参考にawait after.edit(nick=last)を使ってみたりと試行錯誤しましたが、ニックネームを変更する部分のみうまくできませんでした。

追記3.5

どういう結果だったかを忘れていました。
コマンド実行時に同じようなエラーがでるといった感じです。

Ignoring exception in command agree:
Traceback (most recent call last):
  File "C:\Users\enjoy\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 62, in wrapped
    ret = await coro(*args, **kwargs)
  File "c:\Users\enjoy\OneDrive\デスクトップ\Python\DiscordBot\cogs\testcog.py", line 275, in agree
    await ctx.bot.change_nickname(nick=ctx.author_name + "#非スポンサー")
AttributeError: 'MyBot' object has no attribute 'change_nickname'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\enjoy\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\bot.py", line 898, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\enjoy\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 611, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\enjoy\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 71, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'MyBot' object has no attribute 'change_nickname'

追記4

    @commands.command()
    async def agree(self, ctx, mcid):
        if ctx.channel.id == 499427177444409366:
            if mcid == "notid":
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.bot.change_nickname(nick=ctx.author_name + "#非スポンサー")
            else:
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.change_nickname(mcid + "#非スポンサー")
        if ctx.channel.id == 555051444596768789:
            if mcid == "notid":
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.bot.change_nickname(nick=ctx.author_name + "#非スポンサー")
            else:
                role = discord.utils.get(ctx.guild.roles, name="m._.m(モン民)")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="再認証者")
                await ctx.author.add_roles(role, role1, role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#499571567823421440>にて`!?help`と入力するとコマンド一覧が、\n<#546337968042803222>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.bot.change_nickname(mcid + "#非スポンサー")  

これが最新のコードです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ryu22e

    2019/03/14 22:25

    「追記3.5」でどんなエラーが発生しているのか分かりました。私が最初のコメントで書いたchange_nicknameメソッドも、実際に試していたのですね。

    エラー内容を読むと、testcog.pyの275行目で「MyBot」というオブジェクトのchange_nicknameメソッドを呼ぼうとして、存在しないためにAttributeErrorになっています。
    おそらく、change_nicknameメソッドを呼ぶ前の段階でdiscord.pyの使い方を間違えているのだと思います。

    質問文の最初に書かれているコードではchange_nicknameメソッドを呼んでいる部分がないので、これ以上こちらから調査することは難しいです。
    なるべく、実際に書いたコードの全文を質問文に書いてください。
    (ただし、コードの中にDiscord API の Client Secret Keyのような公開できない値が書かれている場合は、そこだけ伏せ字にしてください)

    キャンセル

  • ryu22e

    2019/03/15 13:24 編集

    「追記4」に書いているソースコードは本当に実際に書いたコードの**全文**ですか?
    見たところ、「ctx.bot」の中身が何なのか調べる必要がありますが、agreeメソッドの呼び出し元のコードが載っていないので何も分かりません。

    また、discord.pyのバージョンは1.0.0aとのことですが、どうやってインストールしたのでしょうか?
    実際に手元のPCでdiscord.pyインストールしようとしたのですが、「pip install "discord.py==1.0.0a"」だと以下の「該当するバージョンがない」旨のエラーになります。

    Could not find a version that satisfies the requirement discord.py==1.0.0a (from versions: 0.1.0, 0.2.0, 0.2.1, 0.3.0, 0.3.1, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 0.9.2, 0.10.0, 0.11.0, 0.12.0, 0.13.0, 0.14.0, 0.14.1, 0.14.2, 0.14.3, 0.15.0, 0.15.1, 0.16.0, 0.16.1, 0.16.2, 0.16.3, 0.16.4, 0.16.5, 0.16.6, 0.16.7, 0.16.8, 0.16.9, 0.16.10, 0.16.11, 0.16.12)
    No matching distribution found for discord.py==1.0.0a

    「pip install discord.py --pre」でpre-releaseなバージョンをインストールしても0.16.12がインストールされます。
    discord.pyのソースコード( https://github.com/Rapptz/discord.py )を見ても1.0.0aというバージョンは見当たりませんでした。
    「pip freeze」で表示されるdiscord.pyのバージョンは本当に「1.0.0a」ですか?
    もし「1.0.0a」なら、インストール方法についても記載してください。

    キャンセル

  • meoto2408

    2019/03/15 16:33

    あ、すみません。
    自己解決しました。

    キャンセル

回答 1

check解決した方法

0

    @commands.command()
    async def agree(self, ctx, mcid, ac):
        if ctx.channel.id == 556847189662367755:
            channel = self.bot.get_channel(557920512169476098)
            a = "{}".format(ctx.author.id)
            dd = "----------\n{} | ".format(ctx.author.mention) + a + " | " + mcid
            if ac == "main":
                role = discord.utils.get(ctx.guild.roles, name="メンバー")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="非認証者")
                await ctx.author.add_roles(role, role1)
                await ctx.author.remove_roles(role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#557173935590998016>にて`!?help`と入力するとコマンド一覧が、\n<#556848319360532480>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(nick=mcid + "#非スポンサー")
                await channel.send(dd)
            if ac == "sub":
                role = discord.utils.get(ctx.guild.roles, name="メンバー")
                role1 = discord.utils.get(ctx.guild.roles, name="通知")
                role2 = discord.utils.get(ctx.guild.roles, name="非認証者")
                await ctx.author.add_roles(role, role1)
                await ctx.author.remove_roles(role2)
                embed = discord.Embed(title="{}さんの認証が完了しましたなの".format(ctx.author.name), description='', color=0xff0000)
                embed.add_field(name="MLSBOTに関して・・・", value="当サーバーではあらゆる機能を持ったBOTがいます。\nその機能は<#557173935590998016>にて`!?help`と入力するとコマンド一覧が、\n<#556848319360532480>にて`何ができるの?`と聞いたり`何が話せるの?`と聞いたりすると機能がわかります。", inline=False)
                await ctx.author.send(embed=embed)
                await ctx.author.edit(nick=mcid + "(さぶ)#非スポンサー") 
                await channel.send(dd)


Discord.pyにはrewriteバージョンというのがあり、そこに1.0.0aは該当します。

ご回答いただいた方々ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12873questions

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

  • Python 3.x

    10746questions

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