所以我试图修改我见过的游戏代码......这只是一个较大代码的片段。不过我发现很有趣,这段代码使用 OCR,它会截取屏幕截图并上传一般概述,以与 Webhooks 的使用不一致。我发现它使用的系统是通过读取我的系统(计算机)时间...我想将其更改为一种更简单的方法来创建一个循环来每“x”分钟执行这一部分。它读取系统时间,每次包含 300、301、302、303 或 304 时,它都会执行该函数。我在将其更改为简单的 time.sleep() 函数时遇到了一些麻烦。我不知道它是否与影响代码的其余部分有关,但这是代码片段:
#IF LOGS ARE OPEN CHECK SYSTEM TIME, IF SYSTIME = THESE TIMES PERFORM LOG OVERVIEW
if tribe:
#EG 950 = 9m:50s
if str(300) in str_time or str(301) in str_time\
or str(302) in str_time or str(303) in str_time\
or str(304) in str_time:
ScreenGrab()
#CAN ADD A PRECHECK TO DETERMINE WHERE WE ARE ON THE ARK MENU (RECONNECT)
findcompare(im)
compare(im, roles)
#DELAY BETWEEN SCANS
time.sleep(1.9)
return
有人看到我错过的任何明显的更改需要进行吗?感谢任何帮助。
我尝试将其更改为以下内容,但似乎将冷却时间应用于代码的相当不同的部分。
#IF LOGS ARE OPEN CHECK SYSTEM TIME, IF SYSTIME = THESE TIMES PERFORM LOG OVERVIEW
if tribe:
#EG 950 = 9m:50s
time.sleep(60)
ScreenGrab()
#CAN ADD A PRECHECK TO DETERMINE WHERE WE ARE ON THE ARK MENU (RECONNECT)
findcompare(im)
compare(im, roles)
#DELAY BETWEEN SCANS
time.sleep(1.9)
return
这似乎是获得冷却时间的内容:
def startup():
checkRunning()
#GETS SYSTEM TIME FOR USE IN LOG OVERVIEW
timestamp = time.time()
date_time = datetime.fromtimestamp(timestamp)
str_time = date_time.strftime("%M%S")
#TAKES SCREENSHOT OF ARK (REGARDLESS OF IF THE WINDOW IS ACTIVE OR NOT)
try:
logger.info("Taking SS")
另外,它也是由于某种原因发送 2 个快速更新而不是 1 个:
def LogHook():
if "https" in log_urls:
try:
#SETS THE WEBHOOK/MESSAGE
content = (f"**Quick Update** - {who}")
#SENDS THE REPORT TO DISCORD WEBHOOK
webhook = DiscordWebhook(url=log_urls, content=content)
with open("Log Update.png", "rb") as f:
webhook.add_file(file=f.read(), filename='Log Update.jpg')
webhook.execute()
logger.debug("Overview Updated")
endoffunc()
except Exception as e:
logger.error(f"Log Overview Failed", e)
如果这是无法理解的,我可以共享其余的代码,但我不想让帖子充满可能不必要的代码。
当然,我可以帮助解决这个问题。是对的,根据特定系统时间检查循环不是理想的选择。
time.sleep()
是一个更好的方法。
看起来问题在于如何获取和使用
str_time
。似乎在一个单独的函数
startup()
中获得了它,但我怀疑这个函数没有像期望的那样经常被调用。
以下是如何使用
time.sleep()
重构代码以实现的目标:
import time
def startup():
# ... 的其他启动代码 ...
def main_loop():
while True: # 这将创建一个无限循环
if tribe:
ScreenGrab()
# ... 的其他处理代码 ...
time.sleep(60) # 等待 60 秒(1 分钟)
if __name__ == "__main__":
startup()
main_loop()
在这个修改后的代码中:
-
我们创建了一个名为
main_loop
的函数,其中包含希望每分钟执行的主要逻辑。 -
在
main_loop
内部,我们有一个while True
循环,该循环将无限期地运行的代码。 -
在循环内,我们调用
ScreenGrab()
和的其他处理函数。 -
然后,
time.sleep(60)
会使循环暂停 60 秒,然后再重新开始。
关于双重更新问题:
没有提供调用
LogHook()
函数的代码部分。但是,双重更新问题很可能是由于在短时间内两次调用
LogHook()
引起的。要对此进行调试,请尝试在调用
LogHook()
函数之前和之后添加日志语句,并查看日志以了解它被调用的频率和位置。
如果能共享更多有关
startup()
函数如何以及在何处被调用的上下文信息,以及调用
LogHook()
的代码部分,我或许可以提供更具体的帮助。