【问题标题】:Is there a way to record the specific user of a command for future use without a database?有没有办法在没有数据库的情况下记录命令的特定用户以备将来使用?
【发布时间】:2021-07-24 16:04:10
【问题描述】:

所以我正在使用 discord.py 开发一个不和谐的机器人,并且我正在尝试为服务器中的审核团队创建一个机器人,该机器人会将“主持人”角色与“请假”角色交换因为当它们不活动时,但是我想出的代码有一个我无法弄清楚的轻微漏洞问题,命令的代码是这样的

...

@client.command()
@commands.has_role('Moderator')
async def sl(ctx, member: discord.Member = None):
    if not member:
        member = ctx.author
    loa = ctx.guild.get_role(848032714715561985)
    mod = ctx.guild.get_role(848032880709074944)
    await member.add_roles(loa)
    await member.remove_roles(mod)
    await ctx.send("I have filed your Leave, take care, we look forward to your return!")


@client.command()
async def sr(ctx, member: discord.Member = None):
    if not member:
        member = ctx.author
    mod = ctx.guild.get_role(848032880709074944)
    loa = ctx.guild.get_role(848032714715561985)
    await member.add_roles(mod)
    await member.remove_roles(loa)
    await ctx.send("Welcome back!")

...

你可以看到任何人都可以使用第二个命令来给自己一个主持人角色,我不能将第二个命令设置为只使用主持人,因为主持人将不再使用第一个命令说角色,我我绞尽脑汁想办法解决,即将命令用户 id 记录到白名单中,并且只有那些列入白名单的 id 才能使用第二个命令,我为此做了很多谷歌搜索,但没有结果,任何建议将不胜感激,请原谅这个问题有点冗长,而且我对一般编码仍然很陌生,所以任何帮助,即使你不完全理解我在喋喋不休的内容也会非常感谢,谢谢。

【问题讨论】:

    标签: discord.py


    【解决方案1】:

    检查命令中的 loa 角色(例如):

    mod = None
    for role in ctx.author.roles:
       if role.id == 848032714715561985: mod = True
    if mod:
        #your code here
    

    【讨论】:

      【解决方案2】:

      所以从你的问题来看,我猜你想基本上编写一个“存储”文件,并确保休假的人以前是版主。

      您可以做的是创建一个csv文件,例如records.csv(当然与您的主.py文件在同一文件夹中),每次有人调用sl命令时,程序都会记录用户使用它。

      import csv
      
      @client.command()
      @commands.has_role('Moderator')
      async def sl(ctx, member: discord.Member = None):
          if not member:
              member = ctx.author
          loa = ctx.guild.get_role(848032714715561985)
          mod = ctx.guild.get_role(848032880709074944)
          await member.add_roles(loa)
          await member.remove_roles(mod)
          file = open("records.csv", "w")
          file.writelines(str(ctx.author.id))
          file.close()
          await ctx.send("I have filed your Leave, take care, we look forward to your return!")
      
      
      @client.command()
      async def sr(ctx, member: discord.Member = None):
          if not member:
              member = ctx.author
          mod = ctx.guild.get_role(848032880709074944)
          loa = ctx.guild.get_role(848032714715561985)
          found = False
          with open('records.csv', 'r') as file:
              reader = csv.reader(file)
              for row in reader:
                  if row[0] == str(ctx.author.id):     
                       found = True
                       break
          if found = False:
              await member.add_roles(mod)
              await member.remove_roles(loa)
              await ctx.send("Welcome back!")
          else:
              await ctx.send("We do not have history of you having a moderator role.")
      

      您是否通过像 Repl.it 这样的在线环境运行程序?如果是这样,这可能不是解决此问题的最佳方法,因为人们可以访问您的 records.csv 文件(您可能不关心,但以防万一)。如果您是通过桌面文件目录运行程序,那么应该没有隐私问题。

      【讨论】:

      • 我目前正在使用本地 rpi4 运行它,但这些建议听起来正是我所追求的,非常感谢!
      • 您提供的代码建议是否会存储和检查多个ID? VSCode 也是这么说的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 2016-04-07
      • 2016-01-10
      • 2016-01-19
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多