有没有办法在discord.py中的事件中更改昵称

时间:2019-04-10 21:20:59

标签: python discord.py discord.py-rewrite

我想在发送邮件时将人们的姓名更改为原始姓名+ 1。

我已经获得了所有用于消息检测的代码,但是没有用于更改名称的代码。

@bot.event
async def on_message(message):
      if message.author == bot.user: return
      await client.change_nickname(message.author, "...a")

我希望名称更改为。 。 .a当他们发送一条消息但什么都不做。

谢谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

正如我在评论中已经提到的:

  

据我所知,change_nickname代表   行会专用权限。为了改变用户的昵称   呼叫edit on a member and pass the nick parameter

类似这样的东西:

@bot.event
async def on_message(message):
      if message.author == bot.user: return
      await message.author.edit(nick="some new nick")

对于您对original name + 1形式的昵称的特殊需求,可以使用以下方式:

import re 

# Extracts digits that are at the end of string user_name
#
# @param user_name a string to extract digits from
# @return extracted digits as integer or -1 if error
def extract_number_suffix(user_name):
    # Using regex to find all digits at the end of the user_name
    # source https://docs.python.org/2/library/re.html#re.search
    # regex entry: https://regex101.com/r/WQkzhw/1
    extracted= re.search(r"[0-9]+$", user_name)
    try:
        return int(extracted[0])
    except:
        return -1


@bot.event
async def on_message(message):
      if message.author == bot.user: return
      previous_name = message.author.name
      number = extract_number_suffix(previous_name)
      if number == -1:
          # If number is -1 that means that the function extract_number_suffix
          # failed to extract a number because user has no number at the end of
          # it's name. So we just set the name to name1
          await message.author.edit(nick="{}1".format(previous_name))
      else:
          # Remove the current digit suffix
          clean_name = previous_name.replace(str(number ), "")
          # Increment current number and change nick
          new_number = number + 1
          await message.author.edit(nick="{0}{1}".format(clean_name , new_number ))

您还可以使用message.author.display_name

  

返回用户的显示名称。

     

对于普通用户,这只是他们的用户名,但是如果他们有一个   公会特定的昵称,然后返回。   source

答案 1 :(得分:0)

Discord.py-rewriteDiscord.py是API的不同分支。 rewrite分支是Discord应用程序及其官方API中最新的分支。

rewrite内部,您需要像这样

@bot.event
async def on_message(msg):
    await msg.author.edit(nick=f'{msg.author.name}1')

async(discord.py)分支中,将像这样

@bot.event
async def on_message(msg):
    await client.change_nickname(msg.author,'{msg.author.name}1')
可以在hereasync文档here

中找到客户端的

rewrite属性