iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

1.功能介紹

這個Discord bot實現了將成員近言跟解禁言的命令:

  • !timeout - 可以對指定成員設置臨時禁言時間
  • !remove_timeout - 可以解除成員的臨時禁言
    這可以讓管理員更靈活地對成員進行短時間禁言的懲罰,而不需要完全禁言或解禁成員。

2.程式碼

分鐘版本

from discord.ext import commands
import discord
import datetime 

intents = discord.Intents.all()

bot = commands.Bot(command_prefix='!',intents=intents)

@bot.command()
@commands.has_permissions(manage_roles=True)  # 只有管理員才能使用這個指令
async def timeout(ctx, member: commands.MemberConverter, minutes: int):
    await member.edit(timed_out_until=discord.utils.utcnow() + datetime.timedelta(minutes=minutes))
    await ctx.send(f'{member.name}已被設定超時時間,將在{minutes}分鐘後解除超時。')

@bot.command()
@commands.has_permissions(manage_roles=True)
async def remove_timeout(ctx, member: commands.MemberConverter):
    await member.edit(timed_out_until=discord.utils.utcnow())  # 使用已知的 UTC 時間
    await ctx.send(f'{member.name}的超時已被解除。')


bot.run(‘token’)

秒版本

import discord
from discord.ext import commands
import datetime

intents = discord.Intents.all() 

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.command()  
@commands.has_permissions(manage_roles=True)
async def timeout(ctx, member: discord.Member, seconds: int):

  await member.edit(timed_out_until=discord.utils.utcnow() + datetime.timedelta(seconds=seconds))

  await ctx.send(f"{member.mention} 已被設定超時 {seconds} 秒。")


@bot.command()
@commands.has_permissions(manage_roles=True)  
async def remove_timeout(ctx, member: discord.Member):

  await member.edit(timed_out_until=None)  

  await ctx.send(f"已解除 {member.mention} 的超時。")

bot.run(‘token’)

3.程式碼說明

  1. 導入需要的discord.py相關模塊
  2. 設置intents以獲取成員列表
  3. 創建bot實例並設置命令前綴為!
  4. !timeout命令:
  • 檢查調用者是否有管理權限
  • 使用MemberConverter自動轉換成員參數
  • 計算超時結束時間
  • 更新成員的禁言結束時間以設置超時
  • 發送確認消息
  1. !remove_timeout命令:
  • 移除成員的禁言結束時間以解除禁言
  • 發送確認消息

4.執行結果

https://ithelp.ithome.com.tw/upload/images/20230925/20161116XYcZBJ9w0l.png


上一篇
[Day14]警告3次並ban成員
下一篇
[Day16] 有趣的機器人程式碼
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言