【问题标题】:Trying to get the number of warns a users has and send it discord.py尝试获取用户的警告数量并将其发送 discord.py
【发布时间】:2021-08-17 12:30:48
【问题描述】:

我现在收到一个新错误。我现在编辑了 smth,我得到了这个错误。该怎么办。新代码如下

 @commands.command()
  async def warn(self, ctx, user:discord.Member, *, reason=None):
    user_id = user.id
    if collection.count_documents({"userid":user.id}) == 0:
      collection.insert_one({"userid":user.id,"count":0})

    if reason == None:
      return await ctx.send("Please mention a reason!")
    elif user == None:
      return await ctx.send("Please mention a member!")
    
    user = collection.find_one({"userid":user.id})
 
    current_count = user["count"]
    new_count = current_count + 1
    collection.update_one({"userid":user.id}, {"$set": {"count": new_count}}) 

    em = discord.Embed(title = "Member Warned!", description = f"Warned {user.mention} for **{reason}** | They now have {new_count} warnings!", timestamp = ctx.message.created_at, color = 0xFF0000)
    em.set_footer(text=f'Warned By {ctx.author} | ID: {ctx.author.id}', icon_url = ctx.author.avatar_url)
    await ctx.send(embed = em)``` This is the code 

忽略命令警告中的异常: 回溯(最近一次通话最后): 文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py”,第 85 行,已包装 ret = 等待 coro(*args, **kwargs) 文件“/home/runner/HorribleSentimentalParallelprocessing/cogs/warn.py”,第 30 行,在警告中 collection.update_one({"userid":user.id}, {"$set": {"count": new_count}}) AttributeError: 'dict' 对象没有属性 'id'

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次): 文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py”,第 939 行,在调用中 等待 ctx.command.invoke(ctx) 文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py”,第 863 行,在调用中 等待注入(*ctx.args,**ctx.kwargs) 文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py”,第 94 行,已包装 从 exc 引发 CommandInvokeError(exc) discord.ext.commands.errors.CommandInvokeError:命令引发异常:AttributeError:'dict'对象没有属性'id'```

【问题讨论】:

  • 这个问题您已经问过两次了,请耐心等待,直到有人回答。

标签: python python-3.x mongodb discord discord.py


【解决方案1】:

您正在尝试在没有任何警告的情况下查找用户。您还向作者本人而不是用户添加警告。

@commands.command()
  async def warn(self, ctx,user: discord.Member, *,reason=None):
    if collection.count_documents({"userid":user.id}) == 0:
        collection.insert_one({"userid":user.id,"count":0})

    if reason is None:
      return await ctx.send("Please mention a reason!")
    
    user_doc = collection.find_one({"userid":user.id})
 
    current_count = user_doc["count"]
    new_count = current_count + 1
    collection.update_one({"userid":user.id}, {"$set": {"count": new_count}}) 

    em = discord.Embed(title = "Member Warned!", description = f"Warned {user.mention} for **{reason}** | They now have {new_count} warnings!", timestamp = ctx.message.created_at, color = 0xFF0000)
    em.set_footer(text=f'Warned By {ctx.author} | ID: {ctx.author.id}')
    collection.update_one({"userid":ctx.author.id}, {"$inc": {"count": 1}}) 
    await ctx.send(embed = em)

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2021-10-20
    • 2022-01-04
    • 2020-01-17
    • 2021-07-25
    • 1970-01-01
    • 2022-01-08
    • 2022-08-07
    • 1970-01-01
    相关资源
    最近更新 更多