ボットのレベリングシステムのセットアップを開始し、レベルアップに関するメッセージの実装を試みています。ただし、作成している関数はコマンドではないため、コンテキストを渡すことができないと思います。これが問題の原因です。
より良い解決策がないため、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を取得しようとすることから始めましたが、コンテキストを使用して現在のチャネルを取得する方法がわからないことに気づきました。コンテキストなしで現在のチャネルにメッセージを送信する方法はありますか、それともメソッドを再考する必要がありますか?
あなたがユーザー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))
注:これはテストされていませんが、リンクはそれを機能させるための情報を提供する必要があります!
これは、サーバーに投稿するのではなく、個人的なメッセージを送信するだけです。サーバーに投稿するには、ボットも含まれているユーザーがいるサーバーを相互参照する必要があるように思われますが、それは私には大変な作業のように思えますXD
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加