因此,我试图在某人执行“/logstart”和“/logstop”时为他们创建一个秒表,但我希望多个人能够在不受干扰的情况下启动和停止自己的秒表。
@bot.command(name='logstart')
async def logstart(ctx, arg1):
await ctx.message.delete()
await ctx.send('Log has Started')
@bot.command(name='logstop')
async def logstop(ctx):
await ctx.message.delete()
await ctx.send('FLIGHT LOG\nDuration: stopwatch time\nFlight Plan: argument1')
用户执行“/logstart EGCC( DEP) EGLL(ARR)":
机器人:日志已启动
用户执行“/logstop”
机器人:
飞行日志
持续时间:%stopwatch time%
飞行计划:EGCC(DEP) EGLL(ARR)
我尝试搜索文档以了解如何创建一个局部变量但没有找到太多
当然,我可以帮助你解决这个问题。你可以在 Discord.py 中使用字典来为每个用户存储秒表数据。以下是操作方法:
import time
from discord.ext import commands
bot = commands.Bot(command_prefix='/')
# 用来存储每个用户秒表数据的字典
# 格式:{user_id: start_time}
stopwatch_data = {}
@bot.command(name='logstart')
async def logstart(ctx, *, flight_plan: str):
"""启动秒表并存储飞行计划。
Args:
flight_plan: 用户提供的飞行计划字符串。
"""
await ctx.message.delete()
user_id = ctx.author.id
stopwatch_data[user_id] = {
"start_time": time.time(),
"flight_plan": flight_plan
}
await ctx.send(f'{ctx.author.mention} 日志已启动。', delete_after=5)
@bot.command(name='logstop')
async def logstop(ctx):
"""停止秒表并计算持续时间。"""
await ctx.message.delete()
user_id = ctx.author.id
start_data = stopwatch_data.get(user_id)
if start_data:
start_time = start_data["start_time"]
flight_plan = start_data["flight_plan"]
duration = time.time() - start_time
minutes, seconds = divmod(int(duration), 60)
formatted_duration = f"{minutes:02d}m {seconds:02d}s"
await ctx.send(
f"**飞行日志 {ctx.author.mention}**\n"
f"持续时间:{formatted_duration}\n"
f"飞行计划:{flight_plan}"
)
del stopwatch_data[user_id] # 重置数据
else:
await ctx.send(f'{ctx.author.mention} 你还没有启动日志。', delete_after=5)
bot.run('YOUR_BOT_TOKEN')
说明:
-
stopwatch_data
字典: - 此字典用于存储每个用户的秒表数据。
-
它使用用户 ID 作为键,并将字典存储为值,该字典包含开始时间和飞行计划。
-
/logstart
命令: -
它现在获取
flight_plan
作为参数。 -
当用户运行此命令时:
- 它将消息删除。
- 它会获取用户的 ID。
-
它会在
stopwatch_data
中存储当前时间(作为开始时间)和飞行计划,并使用用户 ID 作为键。
-
/logstop
命令: -
当用户运行此命令时:
- 它将消息删除。
- 它会获取用户的 ID。
-
它会检查
stopwatch_data
字典中是否存在用户的 ID。 -
如果找到:
- 它会计算持续时间。
- 它会向用户发送包含持续时间和飞行计划的消息。
-
它会从
stopwatch_data
中删除用户的数据。
-
如果未找到:
- 它会向用户发送消息,告知他们还没有启动秒表。
使用此设置,多个用户现在可以独立使用秒表命令,而不会相互干扰数据。每个用户的数据都存储在
stopwatch_data
字典中,并使用其唯一的用户 ID 进行标识。