iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

Python Discord Bot(DC機器人)系列 第 7

Python Discord Bot#7 - 偵測編輯與刪除的訊息

  • 分享至 

  • xImage
  •  

當然除了偵測一般的訊息的功能外,
也能偵測到訊息被刪被編輯
通常很少人會想使用到這兩個功能,
除了拉記錄以外。

在編輯code之前一樣,官方後台有一個功能需要先打開,
一樣直接上路

官方後台權限打開

打開官方後台打開你的目標應用程式,
左側有選單,選擇「Bot」
https://ithelp.ithome.com.tw/upload/images/20230906/20106071W7lKZMWpxk.png
拉到下面,有一個Pirvileged Gateway Intents 的設定中,PRESENCE INTENT打開 然後保存。
接收狀態更新消息
https://ithelp.ithome.com.tw/upload/images/20230906/20106071M1ChhOLaGQ.png

偵測編輯

discord.on_message_edit(before, after)

@client.event
async def on_message_edit(before, after):
  print(before)
  print(after)
  channel = client.get_channel({channel_id})
  await channel.send(f'{ before.author.mention }修改了訊息!!!')

https://ithelp.ithome.com.tw/upload/images/20230907/20106071laIqnRpxWg.png

偵測刪除

discord.on_message_delete(message)

@client.event
async def on_message_delete(message):
  print(message)
  channel = client.get_channel(message.channel.id)
  await channel.send(f'{ message.author.mention }刪除了訊息: {message.content}')
  return

https://ithelp.ithome.com.tw/upload/images/20230907/20106071XducCjwnWe.png

小實作

將訊息 依discord.ui 顯示在 伺服器的 系統訊息頻道
https://ithelp.ithome.com.tw/upload/images/20230907/20106071PEytLGgWyW.png

@client.event
async def on_message_edit(before, after):
  # channel = client.get_channel(before.channel.id)
  # await channel.send(f'{ before.author.mention }修改了訊息!!!')
  
  embed = discord.Embed(color=0x34495E, timestamp=dt.datetime.utcnow())
  embed.description = f"{before.author.mention} 在 {before.channel.mention} 編輯了訊息 "
  embed.add_field(
      name="編輯前", value=f"``{before.clean_content}``", inline=False)
  embed.add_field(name="編輯後", value=f"``{after.clean_content}``")
  embed.set_author(name="訊息編輯紀錄")
  guild = client.get_guild(before.guild.id)
  await guild.system_channel.send(embed=embed, silent=True)
  return

@client.event
async def on_message_delete(message):
  # channel = client.get_channel(message.channel.id)
  # await channel.send(f'{ message.author.mention }刪除了訊息: {message.content}')
  
  embed = discord.Embed(color=0xDE353E, timestamp=dt.datetime.utcnow())
  embed.description = f"{message.author.mention} 在 {message.channel.mention} 刪除了訊息 "
  embed.add_field(name="刪除的內容", value=f"``{message.content}``")
  embed.set_author(name="訊息刪除紀錄")
  guild = client.get_guild(message.guild.id)
  await guild.system_channel.send(embed=embed, silent=True)
  return

範例code
TAG: it_#7


上一篇
Python Discord Bot#6 - 偵測對話的簡單方式與回覆
下一篇
Python Discord Bot#8 - Slash Commands 斜線命令處理
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言