在没有上下文的情况下向当前频道发送消息? | discord.py重写
Send a message to current channel without context? | discord.py rewrite
我已经开始为我的机器人设置一个升级系统,并且一直在努力尝试实现一个关于升级的消息。但是,因为我正在创建的函数不是命令,所以我认为我无法将上下文传递给它,这会导致问题。
由于缺乏更好的解决方案,我将它放入我的函数中,该函数检查 exp 并与级别匹配 - 发生的是复制用户级别,然后与更新的级别进行比较以查看是否发生了升级。这行得通,但是我唯一的问题是无法发送 "level-up" 消息。
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,却意识到我不知道如何获取当前频道的上下文。有没有办法在没有上下文的情况下向当前频道发送消息,还是我需要重新考虑我的方法?
看到你有一个用户 ID,我会提出这个解决方案。
- Use your bot to get the
User
object.
- Use the
User
object to get a DM Channel
- Use the
DM_channel
to send a level up message
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))
注意:这是未经测试的,但链接应提供使其有效的信息!
这只是向他们发送个人消息,而不是 post 在服务器中发送。对于服务器中的 post,您似乎需要交叉引用用户所在的服务器,机器人也在其中,这对我来说听起来工作量太大 XD
我已经开始为我的机器人设置一个升级系统,并且一直在努力尝试实现一个关于升级的消息。但是,因为我正在创建的函数不是命令,所以我认为我无法将上下文传递给它,这会导致问题。
由于缺乏更好的解决方案,我将它放入我的函数中,该函数检查 exp 并与级别匹配 - 发生的是复制用户级别,然后与更新的级别进行比较以查看是否发生了升级。这行得通,但是我唯一的问题是无法发送 "level-up" 消息。
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,却意识到我不知道如何获取当前频道的上下文。有没有办法在没有上下文的情况下向当前频道发送消息,还是我需要重新考虑我的方法?
看到你有一个用户 ID,我会提出这个解决方案。
- Use your bot to get the
User
object. - Use the
User
object to get a DM Channel - Use the
DM_channel
to send a level up message
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))
注意:这是未经测试的,但链接应提供使其有效的信息!
这只是向他们发送个人消息,而不是 post 在服务器中发送。对于服务器中的 post,您似乎需要交叉引用用户所在的服务器,机器人也在其中,这对我来说听起来工作量太大 XD