当前位置: 首页 > 知识库问答 >
问题:

Discord py-在后台任务中获取当前公会id

庄飞
2023-03-14

所以用我的代码,如果当前公会id与特定公会id相同,我想打印一条消息到控制台。bot应该检查数据库中列出的每台服务器。

这就是我的代码:

@tasks.loop(minutes=15.0)
async def topic():
            print("topic start")
            mydb = getConnection()
            mycursor = mydb.cursor()
            mycursor.execute(f"SELECT * FROM partner_list")
            myresult = mycursor.fetchall()
            for x in myresult:
                try:
                    x1 = [x]
                    guild = bot.get_guild(int(x1[0][0]))
                    name = (str(x1[0][1]))
                    print("inside try catch")
                    print(guild.id)
                    print(ctx.guild.id) # <--- This doesn't work
                    if int(ctx.guild.id) == int(guild.id):
                        print("Trading Sucht")
                        #mydb.commit()
                except:
                    pass
            mycursor.close()
            mydb.close()

错误是ctx.guild.id不起作用,因为他找不到“ctx”。有没有其他方法可以让bot从我的数据库中遍历每个guildid行,并检查当前的行id是否与数据库中的行id相同?

共有1个答案

鄂琛
2023-03-14

伙计,你在犯一个愚蠢的错误。

这里的ctx是上下文。您的函数也应该有ctx,以便有上下文并供您使用。

现在我修改您的代码,它是:

@tasks.loop(minutes=15.0)
async def topic(ctx):
            print("topic start")
            mydb = getConnection()
            mycursor = mydb.cursor()
            mycursor.execute(f"SELECT * FROM partner_list")
            myresult = mycursor.fetchall()
            for x in myresult:
                try:
                    x1 = [x]
                    guild = bot.get_guild(int(x1[0][0]))
                    name = (str(x1[0][1]))
                    print("inside try catch")
                    print(guild.id)
                    print(ctx.guild.id)
                    if int(ctx.guild.id) == int(guild.id):
                        print("Trading Sucht")
                        #mydb.commit()
                except:
                    pass
            mycursor.close()
            mydb.close()

这是你能解决的。如果您仍然得到这个错误,请随时询问任何问题。:)

谢谢!:d

 类似资料:
  • 问题内容: 如何从任务中获取任务的task_id值?这是我的代码: 这个想法是,当我创建任务的新实例时,我从任务对象中检索。然后,我使用任务ID来确定任务是否已完成。我 不想 按值跟踪任务,因为在任务完成后文件将被“清理”,并且可能存在也可能不存在。 在上面的示例中,我将如何获取值? 问题答案: 如果任务接受,Celery会设置一些默认关键字参数。(您可以使用** kwargs接受它们,也可以专门

  • cmf_get_current_admin_theme() 功能 获取当前后台模板 参数 无 返回 string

  • 说明 在后台任务中,因为是运行在task进程,所以无法使用协程和协程客户端。如果你要操作数据库或Redis,一定要配置同步的连接池。 配置 项目配置文件中mainServer.configs.task_worker_num一定要配置为大于0,否则无法使用后台任务。 定义任务执行类 <?php namespace Test; use Imi\Task\TaskParam; use Imi\Task

  • cmf_get_current_theme() 功能 获取当前前台模板 参数 无 返回 string

  • 我有一个 Java 程序在我的 Linux 服务器上运行,jar 已经以”

  • 如果只是偶尔查询一次,可以通过chaipip或者ip138查询,这里chaipip更加权威一些。