在没有上下文的情况下向当前频道发送消息?| 不和.py雷弗瑞

2024-10-01 07:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始为我的机器人设置一个调平系统,并一直在努力实现一个消息的水平上升。但是,因为我创建的函数不是一个命令,我认为我不能将上下文传递给它,这会导致问题。在

由于没有更好的解决方案,我把它放到我的函数中,该函数检查exp并与某个级别相匹配,结果是生成用户级别的副本,然后再与更新的版本进行比较,以查看是否发生了升级。这是可行的,但是我唯一的问题是不能发送“升级”消息。在

async def levelcheck(user):
    global userlvl
    global userlvlc

    channel = discord.Object(id="")
    # copying the userlevel BEFORE update
    try:
        userlvlc = userlvl
    except NameError as e:
        print(e)

    with open('userexp.json', 'r') as fp:
        userexp = json.load(fp)

    # finding out level based on exp 
    for x in range(0,len(levelcaps)):
        if userexp[str(user)] <= levelcaps[x]:
            userlvl = x
            try:
                if userlvlc < userlvl:
                    await ctx.send('You levelled up --> {}'.format(userlvl))
            except NameError as e:
                print(e)
            #
            return userlvl

正如您可以清楚地看到的,这不是一个很好的命令,但肯定是有效的。我开始尝试获取频道id,但发现我不知道如何获取当前频道的上下文。有没有办法在没有上下文的情况下将消息发送到当前频道,还是需要重新考虑我的方法?在


Tags: 函数命令id消息as级别频道global
1条回答
网友
1楼 · 发布于 2024-10-01 07:10:59

既然你有一个用户ID,我就提出这个解决方案。在

user_to_level_up = bot.fetch_user(user) # since your user variable is an ID
dm_channel = user_to_level_up.dm_channel
if dm_channel is None:
    await user_to_level_up.create_dm()
    dm_channel = user_to_level_up.dm_channel
await dm_channel.send("You've leveled up! You are now level {}".format(userlvl))

注意:这是未经测试,但链接应提供信息,使其工作!在

这只是向他们发送个人信息,而不是在服务器上发布。要在服务器中发布,似乎需要交叉引用bot所在的用户所在的服务器,这对我XD来说似乎是太多的工作了

相关问题 更多 >