discord.py Я пытаюсь сделать команду afk с моего сервера, и каждый раз, когда я запускаю своего бота, выдает ошибку - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь сделать команду afk для своего сервера, и всякий раз, когда я запускаю ее в cmd, она выдает эту ошибку:

    discord.ext.commands.errors.CommandInvokeError: Command raised an 
    exception: AttributeError: 'Client' object has no attribute 
    'change_nickname'

Я не уверен, почему. Может ли кто-нибудь, кто знает приличное количество о discord.py, помочь мне с этим? Вот мой код:

import os
import discord
import asyncio
from discord.ext import commands

client = discord.Client()
bot_prefix="!"
bot = commands.Bot(command_prefix=bot_prefix)

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

@client.event
async def on_member_join(member):
    await member.create_dm()
    await member.dm_channel.send(f"Hi {member.name}, welcome to the chiaravalle discord server, please read the rules")

@bot.command(pass_context=True)
async def yeet(ctx):
    await ctx.send("{0.author.mention} hit a yeet!".format(ctx.message))

@bot.command(pass_context=True)
async def ping(ctx):
    await ctx.send("Pong!")

@bot.command(pass_context=True)
async def afk(ctx, mins):
    await ctx.send("{0.author.mention} has gone afk for {1} minutes.".format(ctx, mins))
    await client.change_nickname(ctx.author.mention, "{0.author.mention} [AFK]".format(ctx))
    counter = 0
    while counter != mins:
        counter += 1
        await asyncio.sleep(60)
    if counter == mins:
        await ctx.send("{0.author.mention} is no longer AFK".format(ctx))


bot.run("my token")
client.run("my token")

1 Ответ

0 голосов
/ 10 марта 2020

Проблема, с которой вы сталкиваетесь на данный момент, заключается в том, что вам нужно изменить чей-то никнейм другим способом. Вы можете редактировать чью-либо информацию с помощью Member.edit () .

Ниже приведен рабочий пример отправленного вами кода, а также сбрасывается псевдоним обратно без [AFK].

@bot.command()
async def afk(ctx, mins):
    current_nick = ctx.author.nick
    await ctx.send(f"{ctx.author.mention} has gone afk for {mins} minutes.")
    await ctx.author.edit(nick=f"{ctx.author.name} [AFK]")

    counter = 0
    while counter <= int(mins):
        counter += 1
        await asyncio.sleep(60)

        if counter == int(mins):
            await ctx.author.edit(nick=current_nick)
            await ctx.send(f"{ctx.author.mention} is no longer AFK")
            break
...