75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
||||
|
|
Discord Bot - 主程式
|
|||
|
|
開發者:唐宋
|
|||
|
|
"""
|
|||
|
|
import os
|
|||
|
|
import discord
|
|||
|
|
from discord.ext import commands
|
|||
|
|
from dotenv import load_dotenv
|
|||
|
|
|
|||
|
|
# 載入環境變數
|
|||
|
|
load_dotenv()
|
|||
|
|
|
|||
|
|
# 設定 bot token
|
|||
|
|
TOKEN = os.getenv('DISCORD_BOT_TOKEN')
|
|||
|
|
|
|||
|
|
# 設定 bot
|
|||
|
|
intents = discord.Intents.default()
|
|||
|
|
intents.message_content = True
|
|||
|
|
intents.guilds = True
|
|||
|
|
|
|||
|
|
bot = commands.Bot(command_prefix='!', intents=intents)
|
|||
|
|
|
|||
|
|
# 機器人啟動時執行
|
|||
|
|
@bot.event
|
|||
|
|
async def on_ready():
|
|||
|
|
print(f'✅ {bot.user.name} 已上線!')
|
|||
|
|
print(f'📝 機器人 ID: {bot.user.id}')
|
|||
|
|
print(f'🌐 連接到的伺服器數量: {len(bot.guilds)}')
|
|||
|
|
|
|||
|
|
await bot.change_presence(activity=discord.Activity(
|
|||
|
|
type=discord.ActivityType.watching,
|
|||
|
|
name='等待指令'
|
|||
|
|
))
|
|||
|
|
|
|||
|
|
# 載入 Cog
|
|||
|
|
try:
|
|||
|
|
await bot.load_extension("cogs.base") # 使用標準 load_extension
|
|||
|
|
await bot.load_extension("cogs.lottery") # 例如你剛剛的 Lottery Cog
|
|||
|
|
print('✅ Cogs 已載入')
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f'❌ 載入 Cogs 時發生錯誤: {e}')
|
|||
|
|
|
|||
|
|
# 同步 Slash Commands 到指定伺服器
|
|||
|
|
try:
|
|||
|
|
guild = discord.Object(id=605678541530726421)
|
|||
|
|
synced = await bot.tree.sync(guild=guild)
|
|||
|
|
print(f'✅ 已同步 {len(synced)} 個 Slash Commands 到伺服器 {guild.id}')
|
|||
|
|
for cmd in synced:
|
|||
|
|
print(f' /{cmd.name} - {cmd.description}')
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f'❌ 同步 Slash Commands 時發生錯誤: {e}')
|
|||
|
|
|
|||
|
|
# 歡迎訊息
|
|||
|
|
@bot.event
|
|||
|
|
async def on_member_join(member):
|
|||
|
|
"""當新成員加入伺服器時"""
|
|||
|
|
await member.send(f'👋 歡迎加入 {member.guild.name}!')
|
|||
|
|
print(f'✨ 新成員加入: {member.name}')
|
|||
|
|
|
|||
|
|
# 錯誤處理
|
|||
|
|
@bot.event
|
|||
|
|
async def on_command_error(ctx, error):
|
|||
|
|
"""處理指令錯誤"""
|
|||
|
|
if isinstance(error, commands.CommandNotFound):
|
|||
|
|
await ctx.send('❌ 請輸入正確的指令!使用 `!help` 查看所有指令。')
|
|||
|
|
else:
|
|||
|
|
print(f'❌ 發生錯誤: {error}')
|
|||
|
|
|
|||
|
|
# 啟動機器人
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
if not TOKEN:
|
|||
|
|
print('❌ 錯誤:未找到 DISCORD_BOT_TOKEN')
|
|||
|
|
print('請確保 .env 檔案已正確設定!')
|
|||
|
|
else:
|
|||
|
|
bot.run(TOKEN)
|