前提・実現したいこと
on_user_update
が機能しません
発生している問題・エラーメッセージ
in on_user_update cursor.execute(f"SELECT log_channel FROM ServerSetting WHERE guild_id = {after.guild}") AttributeError: 'User' object has no attribute 'guild'
該当のソースコード
py
1@commands.Cog.listener() 2async def on_user_update(self, before, after): 3 await self.bot.wait_until_ready() 4 db = sqlite3.connect('main.sqlite') 5 cursor = db.cursor() 6 cursor.execute(f"SELECT log_channel FROM ServerSetting WHERE guild_id = {after.guild}") 7 result = cursor.fetchone() 8 if result is None: 9 return 10 else: 11 ch = self.bot.get_channel(id=int(result[0])) 12 13 if before.name != after.name: 14 e = discord.Embed(title="サーバーログ-ユーザーアップデート",description=f"ニックネームを変更しました\n変更メンバー:{str(after)}") 15 16 e.add_field(name="変更後",value=after.name) 17 await ch.send(embed=e) 18 elif before.status != after.status: 19 e = discord.Embed(title="サーバーログーユーザーアップデート",value=f"{after}のステータスが変わりました") 20 await ch.send(embed=e)
試したこと
{after.guild}のとこを色々変えてみました
補足情報(FW/ツールのバージョンなど)
discord.py→3.8.6
after.guild を使って参照したかったのは具体的にどのようなサーバーですか?
一つミスしてて{after.guild}じゃなくて{after.id}でした。
それでだとエラー内容が表示されず、ユーザーネームを変更しても通知が来なかったです
after のユーザーが参加するすべてのサーバーに対してサーバーログを記録することを目的と推測して回答しました。
after.guild は discord.Guild で、データベース上の guild_id と一致することはありえません。
また、 after.id は int ですが、ユーザーのIDなので、 guild_id と一致することはありえません。
オブジェクトの型や、それが示す内容を把握されることをおすすめします。
Discord.pyのAPIリファレンスを参照しましょう。
なるほど!ありがとうございます。
回答1件
あなたの回答
tips
プレビュー