diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..40467f1 --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +# Discord Bot Token +# 從 https://discord.com/developers/applications 取得 +DISCORD_BOT_TOKEN=your_bot_token_here + +# Discord Application ID (可選) +# 用於 Slash Commands +DISCORD_APPLICATION_ID=your_application_id_here \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ebb96e --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# 環境變數 +.env + +# 語言模型 +models/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# 機器人日誌 +logs/ +*.log \ No newline at end of file diff --git a/README.md b/README.md index 757cc2c..3412049 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,91 @@ -# discord-guess-img-bot +# 🖼️ Discord 猜圖片機器人 -猜圖片discord機器人 \ No newline at end of file +一個用 Python 和 discord.py 開發的 Discord 猜圖片互動機器人! + +## ✨ 功能特色 + +- 🖼️ 發送圖片讓人猜是什麼 +- 🎯 投票互動系統 +- 🎉 恭喜猜對者 +- 🎲 隨機答案提示 +- 📖 基礎功能指令:`!info`, `!help`, `!ping`, `!echo` +- ⚡ 支援 Slash Commands (`/info`, `/help`, `/ping`, `/echo`) + +## 🚀 安裝與設定 + +### 1. 克隆專案 +```bash +cd /home/tangsong/.openclaw/workspace/projects/discord-guess-img-bot +``` + +### 2. 安裝依賴 +```bash +pip install -r requirements.txt +``` + +### 3. 設定 Discord Bot Token +1. 前往 [Discord Developer Portal](https://discord.com/developers/applications) +2. 創建一個新應用程式 +3. 在 Bot 分頁創建機器人 +4. 複製你的 **Token** +5. 建立 `.env` 檔案: +```bash +cp .env.example .env +``` +6. 編輯 `.env` 檔案,填入你的 token: +```env +DISCORD_BOT_TOKEN=your_actual_token_here +``` + +### 4. 執行機器人 +```bash +python discord-bot.py +``` + +## 📖 指令說明 + +### 基礎指令 +- `!info` - 顯示機器人資訊 +- `!help` - 顯示幫助訊息 +- `!ping` - 測試機器人連線 +- `!echo <訊息>` - 回覆你的訊息 + +### Slash Commands +- `/info` - 顯示機器人資訊 +- `/help` - 顯示幫助訊息 +- `/ping` - 測試機器人連線 +- `/echo <訊息>` - 回覆你的訊息 + +## 🔧 專案結構 + +``` +discord-guess-img-bot/ +├── discord-bot.py # 主程式 +├── cogs/ +│ └── base.py # 基礎功能 Cog +├── .env.example # 環境變數範例 +├── requirements.txt # Python 依賴 +└── README.md # 專案說明 +``` + +## 🚧 待開發功能 + +- [ ] 猜圖片互動功能 +- [ ] 投票系統 +- [ ] 答案統計 +- [ ] 資料庫支援 +- [ ] 自訂機器人回應 + +## 🤝 貢獻 + +歡迎提交 Issue 和 Pull Request! + +## 📄 授權 + +MIT License + +--- + +**開發者:** 唐宋 +**語言:** Python +**套件:** discord.py \ No newline at end of file diff --git a/animate.json b/animate.json new file mode 100644 index 0000000..8937d2c --- /dev/null +++ b/animate.json @@ -0,0 +1,697 @@ +[ + { + "animate": "布布恰恰", + "character": "恰恰(車)", + "url": "https://i.imgur.com/M4iIjKs.jpg" + }, + { + "animate": "神風怪盜貞德", + "character": "怪盜貞德", + "url": "https://1.blog.xuite.net/1/4/2/e/24751250/blog_2308821/txt/40264635/5.jpg" + }, + { + "animate": "小紅帽恰恰", + "character": "小紅帽恰恰", + "url": "https://static.wikia.nocookie.net/chacha/images/5/53/Chacha140421f.gif/revision/latest?cb=20150425211616" + }, + { + "animate": "小紅帽恰恰", + "character": "利亞", + "url": "https://i.imgur.com/aNz6Wjo.jpg" + }, + { + "animate": "小紅帽恰恰", + "character": "希尼", + "url": "https://i.imgur.com/AsPZtrA.jpg" + }, + { + "animate": "美少女戰士", + "character": "月野兔(小兔)", + "url": "https://i1.wp.com/popbee.com/image/2020/04/sailormoon-3-seasons-free-on-youtube-teaser.jpg?quality=95&" + }, + { + "animate": "美少女戰士", + "character": "小小兔", + "url": "http://www.twword.com/uploads/wiki/72/bd/669536_27.jpg" + }, + { + "animate": "玩偶遊戲", + "character": "倉田紗南", + "url": "https://p2.bahamut.com.tw/HOME/creationCover/08/0003121708_B.JPG" + }, + { + "animate": "玩偶遊戲", + "character": "羽山秋人", + "url": "https://img.ttshow.tw/images/media/frontcover/2020/07/31/0000000.jpg" + }, + { + "animate": "玩偶遊戲", + "character": "巴比特", + "url": "https://www.newton.com.tw/img/2/fd0/cGcq5SN0MDMiRDZhNDNxQWN5M2YjJjMlVzYhVGNyYGMzImZwETNllTO4E2Nv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" + }, + { + "animate": "我們這一家", + "character": "柚子", + "url": "https://imgur.com/Cp1uuvm.jpg" + }, + { + "animate": "我們這一家", + "character": "橘子", + "url": "https://imgur.dcard.tw/lGLkd9Th.jpg" + }, + { + "animate": "我們這一家", + "character": "花媽", + "url": "https://imgur.dcard.tw/NvFjGHth.jpg" + }, + { + "animate": "我們這一家", + "character": "花爸", + "url": "https://pic.pimg.tw/dark21dark21/1611394960-272538816-g.png" + }, + { + "animate": "飛天小女警", + "character": "花花", + "url": "http://i1.kknews.cc/UBrRJGjbbIXe_3Ao6PX-mIJrZVf4fGvM9LUADyM/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "泡泡", + "url": "http://i2.kknews.cc/19oTUrSwHZkZKTiqgG3bN43TVF58bRpGDp8AuXs/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "毛毛", + "url": "http://i2.kknews.cc/1-gvGQ740jacyhYyxbmtpAFLTnBYnr5H9c7cAX8/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "魔人啾啾", + "url": "http://i1.kknews.cc/AOjo2LM9TIpxvmXf3ObhCT41BUavskVTWcfvBm4/0.jpg" + }, + { + "animate": "海賊王", + "character": "魯夫", + "url": "https://img.alicdn.com/imgextra/i2/2744466110/O1CN01axWoXd1v0QTQxN07i_!!2744466110-0-beehive-scenes.jpg" + }, + { + "animate": "海賊王", + "character": "娜美", + "url": "https://static.wikia.nocookie.net/onepiece/images/2/24/%E5%A8%9C%E7%BE%8E_%E8%B6%85%E6%96%B0%E6%98%9F%E7%AF%87_%E5%8B%95%E7%95%AB%E4%BF%A1%E6%81%AF%E6%A1%86.png/revision/latest?cb=20220226120148&path-prefix=zh" + }, + { + "animate": "海賊王", + "character": "喬巴", + "url": "https://sites.google.com/site/2017onepieceofcake/_/rsrc/1484064778421/7/4975f7735e38b.gif?height=375&width=400" + }, + { + "animate": "櫻桃小丸子", + "character": "小丸子", + "url": "https://cdn0.popo.tw/note/99/128995//7323254/201808281741521.jpg" + }, + { + "animate": "櫻桃小丸子", + "character": "小丸子的爺爺", + "url": "https://cdn2.ettoday.net/images/2385/2385503.jpg" + }, + { + "animate": "櫻桃小丸子", + "character": "小玉", + "url": "https://static.wikia.nocookie.net/maruko/images/c/c5/%E5%B0%8F%E7%8E%89.jpg/revision/latest/scale-to-width-down/313?cb=20160215090156&path-prefix=zh" + }, + { + "animate": "哆拉A夢", + "character": "哆拉A夢", + "url": "https://static.wikia.nocookie.net/doraemon/images/c/c4/%E5%93%86%E5%95%A6A%E5%A4%A2-0.jpg/revision/latest?cb=20190218095749&path-prefix=zh-tw" + }, + { + "animate": "哆拉A夢", + "character": "大雄", + "url": "https://i.imgur.com/1xle8rj.jpg" + }, + { + "animate": "哆拉A夢", + "character": "靜香", + "url": "https://img.moegirl.org.cn/common/thumb/5/57/%E6%BA%90%E9%9D%99%E9%A6%992005%E5%B9%B4%E7%89%88%E7%AB%8B%E7%BB%98.png/420px-%E6%BA%90%E9%9D%99%E9%A6%992005%E5%B9%B4%E7%89%88%E7%AB%8B%E7%BB%98.png" + }, + { + "animate": "庫洛魔法使", + "character": "木之本櫻", + "url": "https://imgur.dcard.tw/fQAMnV5h.jpg" + }, + { + "animate": "庫洛魔法使", + "character": "大道寺知世", + "url": "https://www.bnacg.com/uploads/2104/1-21041509134G96.jpg" + }, + { + "animate": "庫洛魔法使", + "character": "李小狼", + "url": "https://imgur.com/jaU2BF9.jpg" + }, + { + "animate": "尋找滿月", + "character": "神山滿月", + "url": "https://wx2.sinaimg.cn/large/006bnqvqly1gto7w1r8xbj61kw16oqv502.jpg" + }, + { + "animate": "尋找滿月", + "character": "長大的滿月", + "url": "https://wx1.sinaimg.cn/large/006bnqvqly1gto7w2wy9nj61kw16oqv502.jpg" + }, + { + "animate": "真珠美人魚", + "character": "七海露亞", + "url": "https://imgur.dcard.tw/meMlgVe.jpg" + }, + { + "animate": "真珠美人魚", + "character": "寶生波音", + "url": "https://imgur.dcard.tw/ndW5tZ0.jpg" + }, + { + "animate": "真珠美人魚", + "character": "洞院莉娜", + "url": "https://imgur.dcard.tw/HJ2aYxg.jpg" + }, + { + "animate": "魔法咪嚕咪嚕", + "character": "咪嚕", + "url": "http://i1.kknews.cc/ZVCqdHcwQCY05ciBO1XYsu4IyKdPHd0LDRLSLe7fJCQ/0.jpg" + }, + { + "animate": "探險活寶", + "character": "老皮", + "url": "https://upload.wikimedia.org/wikipedia/zh/thumb/d/d0/JaketheDog.png/220px-JaketheDog.png" + }, + { + "animate": "探險活寶", + "character": "阿寶", + "url": "https://upload.wikimedia.org/wikipedia/zh/e/e5/FinnAdventureTime.png" + }, + { + "animate": "探險活寶", + "character": "BMO", + "url": "https://i1.sndcdn.com/avatars-000119781902-cd2uwn-t500x500.jpg" + }, + { + "animate": "阿爾卑斯山的少女", + "character": "小蓮", + "url": "https://pic.pimg.tw/zyi5866/4b5dd69a744f1.gif" + }, + { + "animate": "阿爾卑斯山的少女", + "character": "小芬", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQLVIb5f6r2hzQyWh9-C50kSJ5l4JpBpIxGYkGDpQI2WszsByZ_7_dr28IfgTXnfL37kqk&usqp=CAU" + }, + { + "animate": "通靈王", + "character": "麻倉葉", + "url": "https://unimap.wingzero.tw/unipic/yeh.jpg" + }, + { + "animate": "通靈王", + "character": "安娜(阿葉的婆)", + "url": "https://imgur.dcard.tw/ezo8m1W.jpg" + }, + { + "animate": "通靈王", + "character": "葉王", + "url": "http://p9-tt-ipv6.byteimg.com/large/31d50000d27de9fc8364?from=detail&index=0" + }, + { + "animate": "KERORO軍曹", + "character": "Keroro軍曹", + "url": "https://stickershop.line-scdn.net/stickershop/v1/product/595/LINEStorePC/main.png" + }, + { + "animate": "KERORO軍曹", + "character": "Tamama二等兵", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4891/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Giroro伍長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4887/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Dororo 兵長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4900/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Kululu曹長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4895/android/sticker.png" + }, + { + "animate": "麵包超人", + "character": "麵包超人", + "url": "https://img.shoplineapp.com/media/image_clips/5f8037678e37d30023fe6242/original.jpg?1602238311" + }, + { + "animate": "麵包超人", + "character": "果醬爺爺", + "url": "https://img.shoplineapp.com/media/image_clips/5f8038068f843a494a53c559/original.jpg?1602238469" + }, + { + "animate": "麵包超人", + "character": "細菌人", + "url": "https://img.shoplineapp.com/media/image_clips/5f803796cb32120038c61202/original.jpg?1602238358" + }, + { + "animate": "大嘴鳥", + "character": "大嘴鳥", + "url": "https://www.popdaily.com.tw/shaper/u/202011/ae675724-19dc-40d9-b39f-7a4e1e6bfedc.jpg?resize-w=900&resize-h=675" + }, + { + "animate": "飛天少女豬", + "character": "國分果林", + "url": "https://wx3.sinaimg.cn/large/007tH3W4gy1gyk8crdoslj30gn0mctb9.jpg" + }, + { + "animate": "飛天少女豬", + "character": "國分果林(豬版)", + "url": "https://wx3.sinaimg.cn/large/007tH3W4gy1gyk8crdoslj30gn0mctb9.jpg" + }, + { + "animate": "湯姆貓與傑利鼠", + "character": "湯姆貓", + "url": "https://p1.nanmuxuan.com/images/a9/d8acae639bf8cf9f.jpg" + }, + { + "animate": "湯姆貓與傑利鼠", + "character": "傑利鼠", + "url": "https://dl.bbs.9game.cn/attachments/forum/202002/26/124149j5t4d4ddit5i5z6d.jpg" + }, + { + "animate": "白金公主", + "character": "優希", + "url": "https://9.share.photo.xuite.net/emily920278/19b2e3e/9108639/388818847_m.jpg" + }, + { + "animate": "怪醫黑傑克", + "character": "黑傑克", + "url": "https://imgur.com/W8kKWxK.jpg" + }, + { + "animate": "怪醫黑傑克", + "character": "皮諾可", + "url": "https://cdn2.ettoday.net/images/1476/1476932.jpg" + }, + { + "animate": "豆豆先生", + "character": "豆豆先生", + "url": "http://b.blog.xuite.net/b/1/f/6/23823944/blog_1988994/txt/32214847/0.jpg" + }, + { + "animate": "豆豆先生", + "character": "豆豆先生的泰迪", + "url": "https://imgur.dcard.tw/QoStsJx.jpg" + }, + { + "animate": "企鵝家族", + "character": "PINGU", + "url": "https://cdn2-t17.techbang.com/system/attached_images/2015/08/164950/original/1aa179ac5ae9103a1f6d5a8eaf39dad8.jpg?1440067084" + }, + { + "animate": "企鵝家族", + "character": "PINGA", + "url": "https://www.popdaily.com.tw/shaper/u/202012/3cbd4c09-27b3-4af3-b87a-3352eb009dde.jpg?resize-w=900&resize-h=531" + }, + { + "animate": "霹靂酷樂貓", + "character": "酷樂", + "url": "https://truth.bahamut.com.tw/s01/201512/fcf85503e488c9f283635fbbfbdad498.JPG?w=1000" + }, + { + "animate": "外星人田中太郎", + "character": "田中太郎", + "url": "https://img.komicolle.org/2020-10/16041463930272.jpg" + }, + { + "animate": "大力水手卜派", + "character": "卜派", + "url": "https://truth.bahamut.com.tw/s01/201609/f05dfa9e4a15c939827273958c5ea1ac.JPG" + }, + { + "animate": "大力水手卜派", + "character": "奧莉薇", + "url": "https://truth.bahamut.com.tw/s01/201609/9e94399871c7ac5f71e03ad232bd8af5.JPG" + }, + { + "animate": "遊戲王", + "character": "武藤遊戲", + "url": "https://static.wikia.nocookie.net/motoneta/images/0/03/31027.jpg/revision/latest/scale-to-width-down/595?cb=20161015115601&path-prefix=zh" + }, + { + "animate": "遊戲王", + "character": "海馬瀨人", + "url": "http://pic.pimg.tw/billy77111/1317433353-3667293818.jpg" + }, + { + "animate": "可愛巧虎島", + "character": "巧虎", + "url": "https://truth.bahamut.com.tw/s01/201709/0804088c1c6c076d79396877f2323116.JPG" + }, + { + "animate": "可愛巧虎島", + "character": "桃樂比", + "url": "https://cf.shopee.tw/file/24dd04695da5c1188608bf4604748f4d" + }, + { + "animate": "可愛巧虎島", + "character": "琪琪", + "url": "https://www.newton.com.tw/img/0/580/cGcq5CZ5Q2NxMDZiVjM5kTZmJWZzQjYhFGOlNjZxAjZlVGN5QTNjhjZ4UjYv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" + }, + { + "animate": "神奇寶貝", + "character": "小智", + "url": "http://i.imgur.com/7jpS5.png" + }, + { + "animate": "神奇寶貝", + "character": "小霞", + "url": "https://img.139y.com/article/image/201809/12/e91553f48f.gif" + }, + { + "animate": "神奇寶貝", + "character": "小剛", + "url": "https://tw.portal-pokemon.com/anime/series/s1/img/character/big_04.png" + }, + { + "animate": "海綿寶寶", + "character": "海綿寶寶", + "url": "https://static.wikia.nocookie.net/worldpedias/images/a/a4/Spongebob_SquarePants.jpg/revision/latest?cb=20140620141253&path-prefix=zh" + }, + { + "animate": "海綿寶寶", + "character": "派大星", + "url": "https://cdn-origin.cool-style.com.tw/cool/2020/02/49559949267_3da049d7ab_b1.jpg" + }, + { + "animate": "海綿寶寶", + "character": "章魚哥", + "url": "https://upload.wikimedia.org/wikipedia/zh/9/99/Squidward1.png" + }, + { + "animate": "天線寶寶", + "character": "丁丁", + "url": "https://pic.pimg.tw/shiuan0920/1382449280-2901655149.jpg" + }, + { + "animate": "天線寶寶", + "character": "迪西", + "url": "http://368521570729454624.weebly.com/uploads/1/3/6/3/13635053/112349.jpg" + }, + { + "animate": "天線寶寶", + "character": "拉拉", + "url": "https://image.knowing.asia/a022f397-e107-4a1e-8627-18e7e825b9f1/ab0c746a9932f418e072ec0a2b5cc302.png" + }, + { + "animate": "天線寶寶", + "character": "小波", + "url": "http://368521570729454624.weebly.com/uploads/1/3/6/3/13635053/3229820.jpg" + }, + { + "animate": "PUCCA(中國娃娃)", + "character": "Pucca", + "url": "https://inkscape.org/zh-hant/gallery/item/9639/Pucca.png" + }, + { + "animate": "PUCCA(中國娃娃)", + "character": "Garu", + "url": "https://static.wikia.nocookie.net/pucca/images/3/30/Garu_5.png/revision/latest?cb=20160919182049" + }, + { + "animate": "靈異教師神眉", + "character": "神眉(鵺野鳴介)", + "url": "https://image.32yx.com/file/userfiles/images/201803151743142678.png" + }, + { + "animate": "靈異教師神眉", + "character": "雪女(雪姬)", + "url": "https://i.imgur.com/zmv8v4f.jpg" + }, + { + "animate": "灌籃高手", + "character": "櫻木花道", + "url": "http://farm1.static.flickr.com/146/431236414_61aaa30f28.jpg" + }, + { + "animate": "灌籃高手", + "character": "安西教練", + "url": "https://p1.nanmuxuan.com/images/46/62a69fcb688d68f7.jpg" + }, + { + "animate": "小紅豆", + "character": "小紅豆", + "url": "https://i.imgur.com/XTPreqX.jpg" + }, + { + "animate": "小紅豆", + "character": "勇之助", + "url": "https://static.popdaily.com.tw/u/202105/c021e3e9-af01-439d-a215-2e1a3282cbb1.png" + }, + { + "animate": "小魔女Doremi", + "character": "Doremi", + "url": "https://wiki.komica.org/images/5/53/Img13127.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "藤原羽月", + "url": "https://wiki.komica.org/images/d/d9/Img13129.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "妹尾愛子", + "url": "https://wiki.komica.org/images/7/70/Img13130.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "瀨川音符", + "url": "https://wiki.komica.org/images/9/97/Img13132.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "飛鳥桃子", + "url": "https://wiki.komica.org/images/3/3d/Img13133.jpg" + }, + { + "animate": "蠟筆小新", + "character": "野原新之助", + "url": "https://obs.line-scdn.net/0h_XrCaP2kAHdPOi0AuRJ_IHVsAxh8VhN0KwxRdAxUXkMxCkZ2IFoYGWwzXU5kDkcpJl9HF2o-G0ZrDxIicFsY/w1200" + }, + { + "animate": "蠟筆小新", + "character": "野原美?", + "url": "https://web.ntnu.edu.tw/~40047006S/hw1/5.png" + }, + { + "animate": "蠟筆小新", + "character": "野原廣志", + "url": "https://img.toy-people.com/member/16158686292.jpg" + }, + { + "animate": "蠟筆小新", + "character": "風間徹", + "url": "https://p1-tt.byteimg.com/origin/pgc-image/ef7199f1096c4f36af8873a29183952e?from=pc" + }, + { + "animate": "獵人", + "character": "小傑", + "url": "https://img.alicdn.com/imgextra/i1/119389549/O1CN01peEoS02KPUeRyCD7Z_!!119389549.jpg" + }, + { + "animate": "獵人", + "character": "奇犽", + "url": "https://i.imgur.com/V7laqQm.png" + }, + { + "animate": "獵人", + "character": "酷拉皮卡", + "url": "https://img.ruten.com.tw/s2/d/85/78/21306274516344_650.jpg" + }, + { + "animate": "獵人", + "character": "雷歐力", + "url": "https://static.wikia.nocookie.net/hunterxhunter/images/0/08/Leorio-2011.png/revision/latest?cb=20200711024522" + }, + { + "animate": "獵人", + "character": "西索", + "url": "https://shironeko-matomemix.com/wp-content/uploads/2016/06/hiso2.png" + }, + { + "animate": "彗星公主", + "character": "彗星公主", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRQ4407-TbSSbVxEac3hYSff5-J4_F4eSQ7dQ&usqp=CAU" + }, + { + "animate": "彗星公主", + "character": "流星公主", + "url": "https://pbs.twimg.com/media/D0ud8Z4VYAA2t03.png" + }, + { + "animate": "德克斯特的實驗室", + "character": "德克斯特", + "url": "https://truth.bahamut.com.tw/s01/201906/b2ed8e0a0576c43f293b93e4f645ab06.JPG" + }, + { + "animate": "德克斯特的實驗室", + "character": "蒂蒂", + "url": "https://truth.bahamut.com.tw/s01/201906/cd5270370e1662127a2aa963c268e3ca.JPG" + }, + { + "animate": "膽小狗英雄", + "character": "膽小狗英雄", + "url": "https://truth.bahamut.com.tw/s01/201111/f4b494832b68ecd68551c86f13157870.JPG" + }, + { + "animate": "膽小狗英雄", + "character": "茉莉兒", + "url": "https://imgur.dcard.tw/DbJ2tiq.jpg" + }, + { + "animate": "膽小狗英雄", + "character": "奧提斯", + "url": "https://imgur.dcard.tw/82Kf47L.jpg" + }, + { + "animate": "拼命郎約翰尼", + "character": "約翰尼", + "url": "https://truth.bahamut.com.tw/s01/201207/92a87a221b07a2f780ed8ceb6831c1a7.PNG" + }, + { + "animate": "火影忍者", + "character": "漩渦鳴人", + "url": "http://i1.kknews.cc/P9FCkCChy2lhqdm1IhJ-UiGwJOluo-ZXsznHeJc/0.jpg" + }, + { + "animate": "火影忍者", + "character": "春野櫻", + "url": "http://pic.happytify.cc/uploads/20211031/3B/A3B782EC6282w650h334.jpeg" + }, + { + "animate": "火影忍者", + "character": "宇智波佐助", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRR4x2hwgFDY3kTy9RJCGMpsiYynKi3AL6MLA&usqp=CAU" + }, + { + "animate": "火影忍者", + "character": "旗木卡卡西", + "url": "https://static.wikia.nocookie.net/naruto3258/images/b/b3/KakashiHatake.png/revision/latest?cb=20170121140313&path-prefix=zh" + }, + { + "animate": "名偵探柯南", + "character": "江戶川柯南", + "url": "https://static.wikia.nocookie.net/detectiveconanchinese/images/d/dd/Conan.jpg/revision/latest/top-crop/width/360/height/450?cb=20180808144302&path-prefix=zh-tw" + }, + { + "animate": "名偵探柯南", + "character": "毛利蘭(小蘭)", + "url": "https://cloud.sbsub.com/pedia/5/5c/%E6%AF%9B%E5%88%A9%E5%85%B0.png" + }, + { + "animate": "名偵探柯南", + "character": "毛利偵探", + "url": "https://static.wikia.nocookie.net/detectiveconanchinese/images/1/1a/Kogorou.jpg/revision/latest/top-crop/width/360/height/450?cb=20180805042418&path-prefix=zh-tw" + }, + { + "animate": "哈姆太郎", + "character": "哈姆太郎", + "url": "https://www.likejapan.com/wp-content/uploads/2018/07/editors/10520/20180714163033_5b49b4a90e5c1.jpg" + }, + { + "animate": "哈姆太郎", + "character": "麗麗", + "url": "https://www.newton.com.tw/img/b/79a/cGcq5COhRGN0ITOwQGNhljN1YmMkZGOhFWO4MzLtVGdp9yYpB3LltWahJ2Lt92YuUHZpFmYuMmczdWbp9yL6MHc0RHa.jpg" + }, + { + "animate": "哈姆太郎", + "character": "大老闆", + "url": "https://ying310.tripod.com/siuyuk/taisho.gif" + }, + { + "animate": "犬夜叉", + "character": "犬夜叉", + "url": "https://img.moegirl.org.cn/common/thumb/c/ca/Inuyasha_.png/420px-Inuyasha_.png" + }, + { + "animate": "犬夜叉", + "character": "日暮籬(阿離)", + "url": "https://img.moegirl.org.cn/common/thumb/e/e3/24144428.jpeg/280px-24144428.jpeg" + }, + { + "animate": "犬夜叉", + "character": "殺生丸", + "url": "https://cdn.suruga-ya.jp/database/pics_light/game/892041666.jpg" + }, + { + "animate": "雞與牛", + "character": "雞", + "url": "https://truth.bahamut.com.tw/s01/201401/d48e21c164b69a6afff69b2cf0215f3d.JPG?w=1000" + }, + { + "animate": "雞與牛", + "character": "牛", + "url": "https://truth.bahamut.com.tw/s01/201401/1c56eeb396daa46aaa8e22bcd6fceb1d.JPG" + }, + { + "animate": "雞與牛", + "character": "雞與牛的爸媽", + "url": "https://imgur.dcard.tw/17EfoiHh.jpg" + }, + { + "animate": "七龍珠", + "character": "悟空", + "url": "https://cdn2.ettoday.net/images/3081/d3081968.jpg" + }, + { + "animate": "七龍珠", + "character": "達爾", + "url": "https://www.chinchun.com/upload/customer/4478d3f8-cc73-42dd-973e-5f589376fc32.jpg" + }, + { + "animate": "七龍珠", + "character": "比克", + "url": "https://img.moegirl.org.cn/common/thumb/e/e5/Piccolo.png/420px-Piccolo.png" + }, + { + "animate": "七龍珠", + "character": "魔人卜烏", + "url": "https://www.easyatm.com.tw/img/2/649/nBnauM3X3QjN2cTNzETN3MDO0UTMyITNykTO0EDMwAjMwUzLxUzLzgzLt92YucmbvRWdo5Cd0FmLxE2LvoDc0RHa.jpg" + }, + { + "animate": "中華一番", + "character": "劉昴星(小當家)", + "url": "https://cdn2.ettoday.net/images/1023/d1023591.jpg" + }, + { + "animate": "中華一番", + "character": "嘟嘟", + "url": "http://i.imgur.com/nP0j5Uh.jpg" + }, + { + "animate": "中華一番", + "character": "四郎", + "url": "https://img.komicolle.org/2019-06/15612197759256.jpg" + }, + { + "animate": "中華一番", + "character": "雷恩", + "url": "https://i.imgur.com/uRoWZds.jpg" + }, + { + "animate": "中華一番", + "character": "鋼棍解師傅", + "url": "https://i0.wp.com/imgsrc.baidu.com/forum/w%3D580/sign=6a24817d73f082022d9291377bfafb8a/ec0a6159252dd42aef5b64f5033b5bb5c9eab83a.jpg" + }, + { + "animate": "中華一番", + "character": "李嚴", + "url": "https://i.imgur.com/ttvXi3f.jpg" + } +] \ No newline at end of file diff --git a/cogs/base.py b/cogs/base.py new file mode 100644 index 0000000..309da92 --- /dev/null +++ b/cogs/base.py @@ -0,0 +1,76 @@ +""" +Base Cog - 基礎功能 +開發者:唐宋 +""" +import discord +from discord.ext import commands +from discord import app_commands + + +class Base(commands.Cog): + """基礎功能 Cog""" + + def __init__(self, bot): + self.bot = bot + + # --- Slash Commands --- + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='info', description='顯示機器人資訊') + async def slash_info(self, interaction: discord.Interaction): + """顯示機器人資訊""" + embed = discord.Embed( + title='📖 機器人資訊', + color=discord.Color.blue() + ) + embed.add_field(name='名稱', value=self.bot.user.name, inline=True) + embed.add_field(name='ID', value=self.bot.user.id, inline=True) + embed.add_field(name='伺服器數量', value=len(self.bot.guilds), inline=True) + embed.add_field(name='成員數量', value=sum(g.member_count for g in self.bot.guilds), inline=True) + embed.set_footer(text=f'由 Discord.py {discord.__version__} 驅動') + await interaction.response.send_message(embed=embed) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='ping', description='測試機器人連線') + async def slash_ping(self, interaction: discord.Interaction): + """測試機器人連線""" + latency = round(self.bot.latency * 1000) + await interaction.response.send_message(f'🏓 Pong! 延遲: {latency}ms') + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='echo', description='回覆你的訊息') + async def slash_echo(self, interaction: discord.Interaction, message: str): + """回覆你的訊息""" + await interaction.response.send_message(f'🔊 {message}') + + # --- Prefix Commands (向後相容) --- + + @commands.command(name='info') + async def info(self, ctx): + """顯示機器人資訊""" + embed = discord.Embed( + title='📖 機器人資訊', + color=discord.Color.blue() + ) + embed.add_field(name='名稱', value=self.bot.user.name, inline=True) + embed.add_field(name='ID', value=self.bot.user.id, inline=True) + embed.add_field(name='伺服器數量', value=len(self.bot.guilds), inline=True) + embed.add_field(name='成員數量', value=sum(g.member_count for g in self.bot.guilds), inline=True) + embed.set_footer(text=f'由 Discord.py {discord.__version__} 驅動') + await ctx.send(embed=embed) + + @commands.command(name='ping') + async def ping(self, ctx): + """測試機器人連線""" + latency = round(self.bot.latency * 1000) + await ctx.send(f'🏓 Pong! 延遲: {latency}ms') + + @commands.command(name='echo') + async def echo(self, ctx, *, message): + """回覆你的訊息""" + await ctx.send(f'🔊 {message}') + + +# 需要注入 bot 變數 +async def setup(bot): + """註冊 Base cog""" + await bot.add_cog(Base(bot)) \ No newline at end of file diff --git a/cogs/lottery.py b/cogs/lottery.py new file mode 100644 index 0000000..43a3a19 --- /dev/null +++ b/cogs/lottery.py @@ -0,0 +1,153 @@ +import discord +import random +import json +import asyncio +import datetime +from discord.ext import commands +from discord import app_commands +from discord import FFmpegPCMAudio + +class Lottery(commands.Cog): + def __init__(self, bot): + self.bot = bot + with open('./pokemon.json', mode='r', encoding='utf8') as jFile: + self.pokeData = json.load(jFile) + with open('./animate.json', mode='r', encoding='utf8') as jFile: + self.aniData = json.load(jFile) + + self.getPokeCount = 0 + self.getAniCount = 0 + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.stop = False + + # --- Slash Command with Choice --- + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="建立抽選清單", description="建立寶可夢或動畫角色的抽選清單") + @app_commands.choices(list_name=[ + app_commands.Choice(name="寶可夢", value="寶可夢"), + app_commands.Choice(name="動畫角色", value="動畫角色"), + app_commands.Choice(name="全部", value="全部") + ]) + async def create_list(self, interaction: discord.Interaction, list_name: app_commands.Choice[str]): + if list_name.value == "寶可夢": + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.getPokeCount = 0 + msg = "已建立寶可夢抽選清單!" + elif list_name.value == "動畫角色": + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.getAniCount = 0 + msg = "已建立動畫角色抽選清單!" + else: + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.getPokeCount = 0 + self.getAniCount = 0 + msg = "已建立全部抽選清單!" + + await interaction.response.send_message(msg, ephemeral=True) + + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽選清單", description="檢視所有抽選清單及目前抽選狀態") + async def show_list(self, interaction: discord.Interaction): + pokeCount = self.getPokeCount + 1 + aniCount = self.getAniCount + 1 + await interaction.response.send_message( + f'寶可夢清單:共{len(self.pokeData)}個,正準備抽選第 {pokeCount} 個\n' + f'動畫角色清單:共{len(self.aniData)}個,正準備抽選第 {aniCount} 個' + ) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽寶可夢", description="顯示題目,並於指定秒數後公布答案圖片") + @app_commands.describe(t="倒數秒數(需大於5)") + async def get_poke(self, interaction: discord.Interaction, t: int): + if t < 5: + await interaction.response.send_message("秒數需大於5秒", ephemeral=True) + return + + if self.getPokeCount >= len(self.pokeData): + await interaction.response.send_message("清單已抽取完畢,請重新建立抽選清單", ephemeral=True) + return + + if interaction.user.voice and interaction.user.voice.channel: + if interaction.guild.voice_client is None: + vc = await interaction.user.voice.channel.connect() + else: + vc = interaction.guild.voice_client + + idx = self.pokeList[self.getPokeCount] + poke = self.pokeData[idx] + self.getPokeCount += 1 + + await interaction.response.send_message( + f'第 {self.getPokeCount} 抽\n{poke["name"]} \n倒數 {t} 秒,開始!' + ) + + await asyncio.sleep(t - 5) + if not vc.is_playing(): + vc.play(FFmpegPCMAudio('countdown.wav')) + + await asyncio.sleep(5) + await interaction.followup.send("時間到!") + + embed = discord.Embed(title="抽選寶可夢", timestamp=datetime.datetime.now(), color=0x34f4b4) + embed.add_field(name="編號:", value=poke["number"], inline=True) + embed.add_field(name="名稱:", value=poke["name"], inline=True) + embed.set_image(url=poke["url"]) + await interaction.followup.send(embed=embed) + await vc.disconnect() + else: + await interaction.response.send_message("請先加入語音頻道", ephemeral=True) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽動畫角色", description="顯示題目,並於指定秒數後公布答案圖片") + @app_commands.describe(t="倒數秒數(需大於5)") + async def get_ani(self, interaction: discord.Interaction, t: int): + if t < 5: + await interaction.response.send_message("秒數需大於5秒", ephemeral=True) + return + + if self.getAniCount >= len(self.aniData): + await interaction.response.send_message("清單已抽取完畢,請重新建立抽選清單", ephemeral=True) + return + + if interaction.user.voice and interaction.user.voice.channel: + if interaction.guild.voice_client is None: + vc = await interaction.user.voice.channel.connect() + else: + vc = interaction.guild.voice_client + + idx = self.aniList[self.getAniCount] + ani = self.aniData[idx] + self.getAniCount += 1 + + await interaction.response.send_message( + f'第 {self.getAniCount} 抽\n{ani["animate"]} 的 {ani["character"]}\n倒數 {t} 秒,開始!' + ) + + await asyncio.sleep(t - 5) + if not vc.is_playing(): + vc.play(FFmpegPCMAudio('countdown.wav')) + + await asyncio.sleep(5) + await interaction.followup.send("時間到!") + + embed = discord.Embed(title=f'第 {self.getAniCount} 抽角色', timestamp=datetime.datetime.now(), color=0x34f4b4) + embed.add_field(name="動畫:", value=ani["animate"], inline=True) + embed.add_field(name="角色:", value=ani["character"], inline=True) + embed.set_image(url=ani["url"]) + await interaction.followup.send(embed=embed) + await vc.disconnect() + else: + await interaction.response.send_message("請先加入語音頻道", ephemeral=True) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="停止", description="停止顯示總複習清單") + async def stop_check_all_ani(self, interaction: discord.Interaction): + self.stop = True + await interaction.response.send_message("已接收停止指令", ephemeral=True) + +# Discord.py 2.0+ 的 setup 寫法 +async def setup(bot): + await bot.add_cog(Lottery(bot)) \ No newline at end of file diff --git a/countdown.wav b/countdown.wav new file mode 100644 index 0000000..ee75dda Binary files /dev/null and b/countdown.wav differ diff --git a/discord-bot.py b/discord-bot.py new file mode 100644 index 0000000..5c1770a --- /dev/null +++ b/discord-bot.py @@ -0,0 +1,75 @@ +""" +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) \ No newline at end of file diff --git a/pokemon.json b/pokemon.json new file mode 100644 index 0000000..08c99a8 --- /dev/null +++ b/pokemon.json @@ -0,0 +1,757 @@ +[ + { + "number": "#001", + "name": "妙蛙種子", + "url": "https://s1.52poke.wiki/wiki/thumb/2/21/001Bulbasaur.png/300px-001Bulbasaur.png" + }, + { + "number": "#002", + "name": "妙蛙草", + "url": "https://s1.52poke.wiki/wiki/thumb/7/73/002Ivysaur.png/300px-002Ivysaur.png" + }, + { + "number": "#003", + "name": "妙蛙花", + "url": "https://s1.52poke.wiki/wiki/thumb/a/ae/003Venusaur.png/300px-003Venusaur.png" + }, + { + "number": "#004", + "name": "小火龍", + "url": "https://s1.52poke.wiki/wiki/thumb/7/73/004Charmander.png/300px-004Charmander.png" + }, + { + "number": "#005", + "name": "火恐龍", + "url": "https://s1.52poke.wiki/wiki/thumb/4/4a/005Charmeleon.png/300px-005Charmeleon.png" + }, + { + "number": "#006", + "name": "噴火龍", + "url": "https://s1.52poke.wiki/wiki/thumb/7/7e/006Charizard.png/300px-006Charizard.png" + }, + { + "number": "#007", + "name": "傑尼龜", + "url": "https://s1.52poke.wiki/wiki/thumb/3/39/007Squirtle.png/300px-007Squirtle.png" + }, + { + "number": "#008", + "name": "卡咪龜", + "url": "https://s1.52poke.wiki/wiki/thumb/0/0c/008Wartortle.png/300px-008Wartortle.png" + }, + { + "number": "#009", + "name": "水箭龜", + "url": "https://s1.52poke.wiki/wiki/thumb/0/02/009Blastoise.png/300px-009Blastoise.png" + }, + { + "number": "#010", + "name": "綠毛蟲", + "url": "https://s1.52poke.wiki/wiki/thumb/5/5d/010Caterpie.png/300px-010Caterpie.png" + }, + { + "number": "#011", + "name": "鐵甲蛹", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cd/011Metapod.png/300px-011Metapod.png" + }, + { + "number": "#012", + "name": "巴大蝶", + "url": "https://s1.52poke.wiki/wiki/thumb/d/d1/012Butterfree.png/300px-012Butterfree.png" + }, + { + "number": "#013", + "name": "獨角蟲", + "url": "https://s1.52poke.wiki/wiki/thumb/d/df/013Weedle.png/300px-013Weedle.png" + }, + { + "number": "#014", + "name": "鐵殼蛹", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f0/014Kakuna.png/300px-014Kakuna.png" + }, + { + "number": "#015", + "name": "大針蜂", + "url": "https://s1.52poke.wiki/wiki/thumb/6/61/015Beedrill.png/300px-015Beedrill.png" + }, + { + "number": "#016", + "name": "波波", + "url": "https://s1.52poke.wiki/wiki/thumb/5/55/016Pidgey.png/300px-016Pidgey.png" + }, + { + "number": "#017", + "name": "比比鳥", + "url": "https://s1.52poke.wiki/wiki/thumb/7/7a/017Pidgeotto.png/300px-017Pidgeotto.png" + }, + { + "number": "#018", + "name": "大比鳥", + "url": "https://s1.52poke.wiki/wiki/thumb/5/57/018Pidgeot.png/300px-018Pidgeot.png" + }, + { + "number": "#019", + "name": "小拉達", + "url": "https://s1.52poke.wiki/wiki/thumb/4/46/019Rattata.png/300px-019Rattata.png" + }, + { + "number": "#020", + "name": "拉達", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f4/020Raticate.png/300px-020Raticate.png" + }, + { + "number": "#021", + "name": "烈雀", + "url": "https://s1.52poke.wiki/wiki/thumb/8/8b/021Spearow.png/300px-021Spearow.png" + }, + { + "number": "#022", + "name": "大嘴雀", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a0/022Fearow.png/300px-022Fearow.png" + }, + { + "number": "#023", + "name": "阿柏蛇", + "url": "https://s1.52poke.wiki/wiki/thumb/f/fa/023Ekans.png/300px-023Ekans.png" + }, + { + "number": "#024", + "name": "阿柏怪", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cd/024Arbok.png/300px-024Arbok.png" + }, + { + "number": "#025", + "name": "皮卡丘", + "url": "https://s1.52poke.wiki/wiki/thumb/0/0d/025Pikachu.png/260px-025Pikachu.png" + }, + { + "number": "#026", + "name": "雷丘", + "url": "https://s1.52poke.wiki/wiki/thumb/8/88/026Raichu.png/300px-026Raichu.png" + }, + { + "number": "#027", + "name": "穿山鼠", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9e/027Sandshrew.png/300px-027Sandshrew.png" + }, + { + "number": "#028", + "name": "穿山王", + "url": "https://s1.52poke.wiki/wiki/thumb/0/0b/028Sandslash.png/300px-028Sandslash.png" + }, + { + "number": "#029", + "name": "尼多蘭", + "url": "https://s1.52poke.wiki/wiki/thumb/8/80/029Nidoran%E2%99%80.png/300px-029Nidoran%E2%99%80.png" + }, + { + "number": "#030", + "name": "尼多娜", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cd/030Nidorina.png/300px-030Nidorina.png" + }, + { + "number": "#031", + "name": "尼多后", + "url": "https://s1.52poke.wiki/wiki/thumb/b/bf/031Nidoqueen.png/300px-031Nidoqueen.png" + }, + { + "number": "#032", + "name": "尼多朗", + "url": "https://s1.52poke.wiki/wiki/thumb/0/02/032Nidoran%E2%99%82.png/300px-032Nidoran%E2%99%82.png" + }, + { + "number": "#033", + "name": "尼多力諾", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9f/033Nidorino.png/300px-033Nidorino.png" + }, + { + "number": "#034", + "name": "尼多王", + "url": "https://s1.52poke.wiki/wiki/thumb/c/c6/034Nidoking.png/300px-034Nidoking.png" + }, + { + "number": "#035", + "name": "皮皮", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f4/035Clefairy.png/300px-035Clefairy.png" + }, + { + "number": "#036", + "name": "皮可西", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a9/036Clefable.png/300px-036Clefable.png" + }, + { + "number": "#037", + "name": "六尾", + "url": "https://s1.52poke.wiki/wiki/thumb/6/60/037Vulpix.png/300px-037Vulpix.png" + }, + { + "number": "#038", + "name": "九尾", + "url": "https://s1.52poke.wiki/wiki/thumb/0/05/038Ninetales.png/300px-038Ninetales.png" + }, + { + "number": "#039", + "name": "胖丁", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3e/039Jigglypuff.png/300px-039Jigglypuff.png" + }, + { + "number": "#040", + "name": "胖可丁", + "url": "https://s1.52poke.wiki/wiki/thumb/9/92/040Wigglytuff.png/300px-040Wigglytuff.png" + }, + { + "number": "#041", + "name": "超音蝠", + "url": "https://s1.52poke.wiki/wiki/thumb/d/da/041Zubat.png/300px-041Zubat.png" + }, + { + "number": "#042", + "name": "大嘴蝠", + "url": "https://s1.52poke.wiki/wiki/thumb/0/0c/042Golbat.png/300px-042Golbat.png" + }, + { + "number": "#043", + "name": "走路草", + "url": "https://s1.52poke.wiki/wiki/thumb/4/43/043Oddish.png/300px-043Oddish.png" + }, + { + "number": "#044", + "name": "臭臭花", + "url": "https://s1.52poke.wiki/wiki/thumb/2/2a/044Gloom.png/300px-044Gloom.png" + }, + { + "number": "#045", + "name": "霸王花", + "url": "https://s1.52poke.wiki/wiki/thumb/6/6a/045Vileplume.png/300px-045Vileplume.png" + }, + { + "number": "#046", + "name": "派拉斯", + "url": "https://s1.52poke.wiki/wiki/thumb/d/d4/046Paras.png/300px-046Paras.png" + }, + { + "number": "#047", + "name": "派拉斯特", + "url": "https://s1.52poke.wiki/wiki/thumb/8/80/047Parasect.png/300px-047Parasect.png" + }, + { + "number": "#048", + "name": "毛球", + "url": "https://s1.52poke.wiki/wiki/thumb/a/ad/048Venonat.png/300px-048Venonat.png" + }, + { + "number": "#049", + "name": "摩魯蛾", + "url": "https://s1.52poke.wiki/wiki/thumb/d/d3/049Venomoth.png/300px-049Venomoth.png" + }, + { + "number": "#050", + "name": "地鼠", + "url": "https://s1.52poke.wiki/wiki/thumb/3/31/050Diglett.png/300px-050Diglett.png" + }, + { + "number": "#051", + "name": "三地鼠", + "url": "https://s1.52poke.wiki/wiki/thumb/e/e5/051Dugtrio.png/300px-051Dugtrio.png" + }, + { + "number": "#052", + "name": "喵喵", + "url": "https://s1.52poke.wiki/wiki/thumb/d/d6/052Meowth.png/300px-052Meowth.png" + }, + { + "number": "#053", + "name": "貓老大", + "url": "https://s1.52poke.wiki/wiki/thumb/1/13/053Persian.png/300px-053Persian.png" + }, + { + "number": "#054", + "name": "可達鴨", + "url": "https://s1.52poke.wiki/wiki/thumb/5/53/054Psyduck.png/300px-054Psyduck.png" + }, + { + "number": "#055", + "name": "哥達鴨", + "url": "https://s1.52poke.wiki/wiki/thumb/f/fe/055Golduck.png/300px-055Golduck.png" + }, + { + "number": "#056", + "name": "猴怪", + "url": "https://s1.52poke.wiki/wiki/thumb/4/41/056Mankey.png/300px-056Mankey.png" + }, + { + "number": "#057", + "name": "火爆猴", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9a/057Primeape.png/300px-057Primeape.png" + }, + { + "number": "#058", + "name": "卡蒂狗", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3d/058Growlithe.png/300px-058Growlithe.png" + }, + { + "number": "#059", + "name": "風速狗", + "url": "https://s1.52poke.wiki/wiki/thumb/b/b8/059Arcanine.png/300px-059Arcanine.png" + }, + { + "number": "#060", + "name": "蚊香蝌蚪", + "url": "https://s1.52poke.wiki/wiki/thumb/4/49/060Poliwag.png/300px-060Poliwag.png" + }, + { + "number": "#061", + "name": "蚊香君", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a9/061Poliwhirl.png/300px-061Poliwhirl.png" + }, + { + "number": "#062", + "name": "蚊香泳士", + "url": "https://s1.52poke.wiki/wiki/thumb/2/2d/062Poliwrath.png/300px-062Poliwrath.png" + }, + { + "number": "#063", + "name": "凱西", + "url": "https://s1.52poke.wiki/wiki/thumb/6/62/063Abra.png/300px-063Abra.png" + }, + { + "number": "#064", + "name": "勇基拉", + "url": "https://s1.52poke.wiki/wiki/thumb/9/97/064Kadabra.png/300px-064Kadabra.png" + }, + { + "number": "#065", + "name": "胡地", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cc/065Alakazam.png/300px-065Alakazam.png" + }, + { + "number": "#066", + "name": "腕力", + "url": "https://s1.52poke.wiki/wiki/thumb/8/85/066Machop.png/300px-066Machop.png" + }, + { + "number": "#067", + "name": "豪力", + "url": "https://s1.52poke.wiki/wiki/thumb/8/8e/067Machoke.png/300px-067Machoke.png" + }, + { + "number": "#068", + "name": "怪力", + "url": "https://s1.52poke.wiki/wiki/thumb/8/8f/068Machamp.png/300px-068Machamp.png" + }, + { + "number": "#069", + "name": "喇叭芽", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a2/069Bellsprout.png/300px-069Bellsprout.png" + }, + { + "number": "#070", + "name": "口呆花", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9f/070Weepinbell.png/300px-070Weepinbell.png" + }, + { + "number": "#071", + "name": "大食花", + "url": "https://s1.52poke.wiki/wiki/thumb/b/be/071Victreebel.png/300px-071Victreebel.png" + }, + { + "number": "#072", + "name": "瑪瑙水母", + "url": "https://s1.52poke.wiki/wiki/thumb/4/4e/072Tentacool.png/300px-072Tentacool.png" + }, + { + "number": "#073", + "name": "毒刺水母", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f6/073Tentacruel.png/300px-073Tentacruel.png" + }, + { + "number": "#074", + "name": "小拳石", + "url": "https://s1.52poke.wiki/wiki/thumb/9/98/074Geodude.png/300px-074Geodude.png" + }, + { + "number": "#075", + "name": "隆隆石", + "url": "https://s1.52poke.wiki/wiki/thumb/7/75/075Graveler.png/300px-075Graveler.png" + }, + { + "number": "#076", + "name": "隆隆岩", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f2/076Golem.png/300px-076Golem.png" + }, + { + "number": "#077", + "name": "小火馬", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3b/077Ponyta.png/300px-077Ponyta.png" + }, + { + "number": "#078", + "name": "烈焰馬", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3f/078Rapidash.png/300px-078Rapidash.png" + }, + { + "number": "#079", + "name": "呆呆獸", + "url": "https://s1.52poke.wiki/wiki/thumb/7/70/079Slowpoke.png/300px-079Slowpoke.png" + }, + { + "number": "#080", + "name": "呆殼獸", + "url": "https://s1.52poke.wiki/wiki/thumb/8/80/080Slowbro.png/300px-080Slowbro.png" + }, + { + "number": "#081", + "name": "小磁怪", + "url": "https://s1.52poke.wiki/wiki/thumb/6/6c/081Magnemite.png/300px-081Magnemite.png" + }, + { + "number": "#082", + "name": "三合一磁怪", + "url": "https://s1.52poke.wiki/wiki/thumb/7/72/082Magneton.png/300px-082Magneton.png" + }, + { + "number": "#083", + "name": "大蔥鴨", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f8/083Farfetch%27d.png/300px-083Farfetch%27d.png" + }, + { + "number": "#084", + "name": "嘟嘟", + "url": "https://s1.52poke.wiki/wiki/thumb/5/54/084Doduo.png/300px-084Doduo.png" + }, + { + "number": "#085", + "name": "嘟嘟利", + "url": "https://s1.52poke.wiki/wiki/thumb/9/93/085Dodrio.png/300px-085Dodrio.png" + }, + { + "number": "#086", + "name": "小海獅", + "url": "https://s1.52poke.wiki/wiki/thumb/1/1f/086Seel.png/300px-086Seel.png" + }, + { + "number": "#087", + "name": "白海獅", + "url": "https://s1.52poke.wiki/wiki/thumb/c/c7/087Dewgong.png/300px-087Dewgong.png" + }, + { + "number": "#088", + "name": "臭泥", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a0/088Grimer.png/300px-088Grimer.png" + }, + { + "number": "#089", + "name": "臭臭泥", + "url": "https://s1.52poke.wiki/wiki/thumb/7/7c/089Muk.png/300px-089Muk.png" + }, + { + "number": "#090", + "name": "大舌貝", + "url": "https://s1.52poke.wiki/wiki/thumb/4/40/090Shellder.png/300px-090Shellder.png" + }, + { + "number": "#091", + "name": "刺甲貝", + "url": "https://s1.52poke.wiki/wiki/thumb/1/1d/091Cloyster.png/300px-091Cloyster.png" + }, + { + "number": "#092", + "name": "鬼斯", + "url": "https://s1.52poke.wiki/wiki/thumb/c/ca/092Gastly.png/300px-092Gastly.png" + }, + { + "number": "#093", + "name": "鬼斯通", + "url": "https://s1.52poke.wiki/wiki/thumb/6/62/093Haunter.png/300px-093Haunter.png" + }, + { + "number": "#094", + "name": "耿鬼", + "url": "https://s1.52poke.wiki/wiki/thumb/c/c6/094Gengar.png/300px-094Gengar.png" + }, + { + "number": "#095", + "name": "大岩蛇", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9a/095Onix.png/300px-095Onix.png" + }, + { + "number": "#096", + "name": "催眠貘", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3e/096Drowzee.png/300px-096Drowzee.png" + }, + { + "number": "#097", + "name": "引夢貘人", + "url": "https://s1.52poke.wiki/wiki/thumb/0/0a/097Hypno.png/300px-097Hypno.png" + }, + { + "number": "#098", + "name": "大鉗蟹", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a7/098Krabby.png/300px-098Krabby.png" + }, + { + "number": "#099", + "name": "巨鉗蟹", + "url": "https://s1.52poke.wiki/wiki/thumb/7/71/099Kingler.png/300px-099Kingler.png" + }, + { + "number": "#100", + "name": "霹靂電球", + "url": "https://s1.52poke.wiki/wiki/thumb/d/da/100Voltorb.png/300px-100Voltorb.png" + }, + { + "number": "#101", + "name": "頑皮雷彈", + "url": "https://s1.52poke.wiki/wiki/thumb/8/84/101Electrode.png/300px-101Electrode.png" + }, + { + "number": "#102", + "name": "蛋蛋", + "url": "https://s1.52poke.wiki/wiki/thumb/a/af/102Exeggcute.png/300px-102Exeggcute.png" + }, + { + "number": "#103", + "name": "椰蛋樹", + "url": "https://s1.52poke.wiki/wiki/thumb/2/24/103Exeggutor.png/300px-103Exeggutor.png" + }, + { + "number": "#104", + "name": "卡拉卡拉", + "url": "https://s1.52poke.wiki/wiki/thumb/2/2a/104Cubone.png/300px-104Cubone.png" + }, + { + "number": "#105", + "name": "嘎啦嘎啦", + "url": "https://s1.52poke.wiki/wiki/thumb/9/98/105Marowak.png/300px-105Marowak.png" + }, + { + "number": "#106", + "name": "飛腿郎", + "url": "https://s1.52poke.wiki/wiki/thumb/3/32/106Hitmonlee.png/300px-106Hitmonlee.png" + }, + { + "number": "#107", + "name": "快拳郎", + "url": "https://s1.52poke.wiki/wiki/thumb/a/a3/107Hitmonchan.png/300px-107Hitmonchan.png" + }, + { + "number": "#108", + "name": "大舌頭", + "url": "https://s1.52poke.wiki/wiki/thumb/0/00/108Lickitung.png/300px-108Lickitung.png" + }, + { + "number": "#109", + "name": "瓦斯彈", + "url": "https://s1.52poke.wiki/wiki/thumb/1/17/109Koffing.png/300px-109Koffing.png" + }, + { + "number": "#110", + "name": "雙彈瓦斯", + "url": "https://s1.52poke.wiki/wiki/thumb/4/42/110Weezing.png/300px-110Weezing.png" + }, + { + "number": "#111", + "name": "獨角犀牛", + "url": "https://s1.52poke.wiki/wiki/thumb/9/9b/111Rhyhorn.png/300px-111Rhyhorn.png" + }, + { + "number": "#112", + "name": "鑽角犀獸", + "url": "https://s1.52poke.wiki/wiki/thumb/4/47/112Rhydon.png/300px-112Rhydon.png" + }, + { + "number": "#113", + "name": "吉利蛋", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cd/113Chansey.png/300px-113Chansey.png" + }, + { + "number": "#114", + "name": "蔓藤怪", + "url": "https://s1.52poke.wiki/wiki/thumb/3/3e/114Tangela.png/300px-114Tangela.png" + }, + { + "number": "#115", + "name": "袋獸", + "url": "https://s1.52poke.wiki/wiki/thumb/4/4e/115Kangaskhan.png/300px-115Kangaskhan.png" + }, + { + "number": "#116", + "name": "墨海馬", + "url": "https://s1.52poke.wiki/wiki/thumb/5/5a/116Horsea.png/300px-116Horsea.png" + }, + { + "number": "#117", + "name": "海刺龍", + "url": "https://s1.52poke.wiki/wiki/thumb/2/26/117Seadra.png/300px-117Seadra.png" + }, + { + "number": "#118", + "name": "角金魚", + "url": "https://s1.52poke.wiki/wiki/thumb/7/7b/118Goldeen.png/300px-118Goldeen.png" + }, + { + "number": "#119", + "name": "金魚王", + "url": "https://s1.52poke.wiki/wiki/thumb/6/6a/119Seaking.png/300px-119Seaking.png" + }, + { + "number": "#120", + "name": "海星星", + "url": "https://s1.52poke.wiki/wiki/thumb/4/4f/120Staryu.png/300px-120Staryu.png" + }, + { + "number": "#121", + "name": "寶石海星", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cd/121Starmie.png/300px-121Starmie.png" + }, + { + "number": "#122", + "name": "魔牆人偶", + "url": "https://s1.52poke.wiki/wiki/thumb/e/ec/122Mr._Mime.png/300px-122Mr._Mime.png" + }, + { + "number": "#123", + "name": "飛天螳螂", + "url": "https://s1.52poke.wiki/wiki/thumb/b/ba/123Scyther.png/300px-123Scyther.png" + }, + { + "number": "#124", + "name": "迷唇姐", + "url": "https://s1.52poke.wiki/wiki/thumb/7/7c/124Jynx.png/300px-124Jynx.png" + }, + { + "number": "#125", + "name": "電擊獸", + "url": "https://s1.52poke.wiki/wiki/thumb/d/de/125Electabuzz.png/300px-125Electabuzz.png" + }, + { + "number": "#126", + "name": "鴨嘴火獸", + "url": "https://s1.52poke.wiki/wiki/thumb/8/8c/126Magmar.png/300px-126Magmar.png" + }, + { + "number": "#127", + "name": "凱羅斯", + "url": "https://s1.52poke.wiki/wiki/thumb/7/71/127Pinsir.png/300px-127Pinsir.png" + }, + { + "number": "#128", + "name": "肯泰羅", + "url": "https://s1.52poke.wiki/wiki/thumb/b/b8/128Tauros.png/300px-128Tauros.png" + }, + { + "number": "#129", + "name": "鯉魚王", + "url": "https://s1.52poke.wiki/wiki/thumb/0/02/129Magikarp.png/300px-129Magikarp.png" + }, + { + "number": "#130", + "name": "暴鯉龍", + "url": "https://s1.52poke.wiki/wiki/thumb/4/41/130Gyarados.png/300px-130Gyarados.png" + }, + { + "number": "#131", + "name": "拉普拉斯", + "url": "https://s1.52poke.wiki/wiki/thumb/a/ab/131Lapras.png/300px-131Lapras.png" + }, + { + "number": "#132", + "name": "百變怪", + "url": "https://s1.52poke.wiki/wiki/thumb/3/36/132Ditto.png/300px-132Ditto.png" + }, + { + "number": "#133", + "name": "伊布", + "url": "https://s1.52poke.wiki/wiki/thumb/e/e2/133Eevee.png/300px-133Eevee.png" + }, + { + "number": "#134", + "name": "水伊布", + "url": "https://s1.52poke.wiki/wiki/thumb/f/fd/134Vaporeon.png/300px-134Vaporeon.png" + }, + { + "number": "#135", + "name": "雷伊布", + "url": "https://s1.52poke.wiki/wiki/thumb/b/bb/135Jolteon.png/300px-135Jolteon.png" + }, + { + "number": "#136", + "name": "火伊布", + "url": "https://s1.52poke.wiki/wiki/thumb/d/dd/136Flareon.png/300px-136Flareon.png" + }, + { + "number": "#137", + "name": "多邊獸", + "url": "https://s1.52poke.wiki/wiki/thumb/6/6b/137Porygon.png/300px-137Porygon.png" + }, + { + "number": "#138", + "name": "菊石獸", + "url": "https://s1.52poke.wiki/wiki/thumb/7/79/138Omanyte.png/300px-138Omanyte.png" + }, + { + "number": "#139", + "name": "多刺菊石獸", + "url": "https://s1.52poke.wiki/wiki/thumb/4/43/139Omastar.png/300px-139Omastar.png" + }, + { + "number": "#140", + "name": "化石盔", + "url": "https://s1.52poke.wiki/wiki/thumb/f/f9/140Kabuto.png/300px-140Kabuto.png" + }, + { + "number": "#141", + "name": "鐮刀盔", + "url": "https://s1.52poke.wiki/wiki/thumb/2/29/141Kabutops.png/300px-141Kabutops.png" + }, + { + "number": "#142", + "name": "化石翼龍", + "url": "https://s1.52poke.wiki/wiki/thumb/e/e8/142Aerodactyl.png/300px-142Aerodactyl.png" + }, + { + "number": "#143", + "name": "卡比獸", + "url": "https://s1.52poke.wiki/wiki/thumb/f/fb/143Snorlax.png/300px-143Snorlax.png" + }, + { + "number": "#144", + "name": "急凍鳥", + "url": "https://s1.52poke.wiki/wiki/thumb/4/4e/144Articuno.png/300px-144Articuno.png" + }, + { + "number": "#145", + "name": "閃電鳥", + "url": "https://s1.52poke.wiki/wiki/thumb/e/e3/145Zapdos.png/300px-145Zapdos.png" + }, + { + "number": "#146", + "name": "火焰鳥", + "url": "https://s1.52poke.wiki/wiki/thumb/1/1b/146Moltres.png/300px-146Moltres.png" + }, + { + "number": "#147", + "name": "迷你龍", + "url": "https://s1.52poke.wiki/wiki/thumb/c/cc/147Dratini.png/300px-147Dratini.png" + }, + { + "number": "#148", + "name": "哈克龍", + "url": "https://s1.52poke.wiki/wiki/thumb/9/93/148Dragonair.png/300px-148Dragonair.png" + }, + { + "number": "#149", + "name": "快龍", + "url": "https://s1.52poke.wiki/wiki/thumb/8/8b/149Dragonite.png/300px-149Dragonite.png" + }, + { + "number": "#150", + "name": "超夢", + "url": "https://s1.52poke.wiki/wiki/thumb/7/78/150Mewtwo.png/300px-150Mewtwo.png" + }, + { + "number": "#151", + "name": "夢幻", + "url": "https://s1.52poke.wiki/wiki/thumb/b/b1/151Mew.png/300px-151Mew.png" + } +] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..85ce0ec --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +discord.py>=2.3.2 +python-dotenv>=1.0.0 \ No newline at end of file