discord-guess-img-bot/discord-bot.py

77 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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')
# 從環境變數讀取 Guild ID 並轉型為 int
MY_GUILD_ID = int(os.getenv('GUILD_ID'))
# 設定 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=MY_GUILD_ID)
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)