计算两个不和id /雪花的时间差



命令timedif获取两个消息id并计算它们发送的时间差,精确到小数点后2位。

这是我所做的:

@bot.command(name='timedif', help='', aliases=['snowflake', 'timediff'])
async def timedif(ctx, id1, id2):
try:
id1 = int(id1)
id2 = int(id2)

except:
await ctx.reply("Check your message ID's! They are incorrect!")

msg1 = await ctx.fetch_message(id1)
msg2 = await ctx.fetch_message(id2)

time1 = msg1.created_at
time2 = msg2.created_at

ts_diff = time2 - time1
secs = abs(ts_diff.total_seconds())
days,secs=divmod(secs,secs_per_day:=60*60*24)
hrs,secs=divmod(secs,secs_per_hr:=60*60)
mins,secs=divmod(secs,secs_per_min:=60)
secs=round(secs, 2)
answer='{} secs'.format(secs)

if secs > 60:
answer='{} mins and {} secs'.format(int(mins),secs)
if mins > 60:
answer='{} hrs, {} mins and {} secs'.format(int(hrs),int(mins),secs)
if hrs > 24:
answer='{} days, {} hrs, {} mins and {} secs'.format(int(days),int(hrs),int(mins),secs)

embed = discord.Embed(title="**Time Difference**", description=f"""IDs: {id1}, {id2}
Time difference between the 2 IDs: 
{answer}""")
await ctx.reply(embed=embed)

我测试了bot,但我遇到了一个问题:对于这段代码,它只能从与' ctx '相同的通道中获取消息。但如果我从另一个通道(即。(DM通道),机器人无法访问它。是否有一个算法/函数允许我计算任何的时差2身份证的?我认为这是可能的,因为最近很多机器人都在做这件事。

澄清一下:对于来自ctx.channel的消息,它工作得很好,并且能够计算时间差,唯一的问题在于它不能从其他通道获取消息。

计算任何两个Discord id之间的时差不需要任何API请求。因为每个雪花对象的创建时间都是用19-21个数字编码的。当以二进制读取时,第22位及以上是时间戳。

对于最新的discord.py版本,已经为您提供了一个助手方法!

time1 = discord.utils.snowflake_time(int(id1))
time2 = discord.utils.snowflake_time(int(id2))
ts_diff = time2 - time1
secs = abs(ts_diff.total_seconds())

如果你的版本还不存在,很容易实现snowflake_time():

import datetime
def snowflake_time(id):
return datetime.datetime.utcfromtimestamp(((id >> 22) + 1420070400000) / 1000)

此方法适用于任何不和ID(消息ID,频道ID,公会ID,类别ID,审计日志ID等)

Discord Snowflake Structure: https://discord.com/developers/docs/reference#snowflakes.

相关内容

  • 没有找到相关文章

最新更新