nana-bot


Namenana-bot JSON
Version 5.4.4 PyPI version JSON
download
home_pagehttps://github.com/vito1317/nana-bot
SummaryA helpful Discord bot powered by Gemini
upload_time2024-12-13 04:24:26
maintainerNone
docs_urlNone
authorVito1317
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements discord discord_interactions typing google-generativeai requests aiohttp BeautifulSoup4 search_engine_tool_vito1317 python-dotenv
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 奈奈 - 智能陪伴機器人 (nana_bot) v5.4.4

## 簡介
奈奈是一個基於 Google Gemini 模型的 Discord 機器人,旨在提供溫暖、理解和專業的陪伴,並提供一些伺服器管理功能。 奈奈也具備自行上網搜尋資料和瀏覽網站的能力,讓她的知識更豐富,回覆更精確。

## 功能

* **陪伴與支持:**
    * 使用繁體中文與用戶進行自然流暢的對話。
    * 提供情感支持和建議,擅長 DBT 辯證行為治療。
    * 記憶最近 60 則對話內容,讓互動更自然。
    * 使用者 @tag 機器人時,機器人會回應。
* **資訊檢索:**
    * 自動上網搜尋資料:奈奈可以根據對話內容,自行判斷是否需要上網搜尋資料,以提供更準確的回覆。 例如,當使用者詢問天氣、新聞或其他 factual 的資訊時,奈奈會自動搜尋相關資訊。
    * 使用 `/search google/bing/yahoo [關鍵字]` 命令,進行指定搜尋引擎的搜索並總結結果。
    * 使用 `/browse [網址]` 命令,瀏覽特定網站並總結內容。
* **伺服器管理:**
    * 監控伺服器成員加入和離開,提供相關通知。
    * `/pass` 命令:審核通過新成員,賦予其特定角色,並移除未審核角色。
    * 點數系統:
        * `/add` 命令:增加使用者點數。
        * `/subtract` 命令:減少使用者點數。
        * `/points` 命令:查詢使用者點數。
* **分析數據:**
    * `/analytics` 命令:顯示伺服器或特定成員的分析數據。

## 安裝

```bash
pip install nana-bot
```
## 設定(可跳過,直接使用設定檔>>請看下面或是使用直接設定方法)
[使用手冊](https://docs.google.com/presentation/d/1oJPoptZYt5PfNlh5RtnyA--XjEBijbt0/edit?usp=drivesdk&ouid=109673722431645325120&rtpof=true&sd=true)
環境變數: 建立一個 .env 檔案於專案資料夾中,並設定以下環境變數(非必要):
```ini
NANA_API_KEY="Your Gemini API Key"
NANA_DISCORD_TOKEN="Your Discord Bot Token"
```
設定檔 (config.ini): 除了環境變數,你也可以使用 config.ini 檔案來自訂其他設定。預設設定檔的路徑為 default_config.ini,使用者可以創建 ~/.nana_config.ini 來覆蓋預設設定。
```ini
[Nana]
gemini_model = gemini-1.5-pro-002
servers = server_id1,server_id2  # 以逗號分隔多個伺服器 ID
send_daily_channel_id_list = channel_id1,channel_id2
# ...其他設定
```

## 使用方法
```python
from nana_bot import Config, initialize_bot, run_bot
import os

# 從 .env 檔案載入環境變數
from dotenv import load_dotenv
load_dotenv()

user_config = Config(
    api_key=os.environ.get("NANA_API_KEY"),  # 從環境變數讀取
    gemini_model="gemini-1.5-pro-002",  # 或直接設定
    bot_name = "奈奈"   # 可直接設定
    review_format="我叫:\n我從這裡來:\n我的困擾有:\n是否有在諮商或就醫:\n為什麼想加入這邊:\n我最近狀況如何:", #審核格式
    pass_user_prompt_text = "{member.mention} 已通過審核,可以先到 <#{reviewed_prompt_channel_id}> 打聲招呼,也歡迎到 <#{TARGET_CHANNEL_ID[1]}> 或 <#{TARGET_CHANNEL_ID[0]}>  找othor bot或是我聊聊喔!", #審核通過後的回覆
    reviewed_role_id = [int(os.environ.get("NANA_REVIEWED_ROLE_ID"))], #已審核身分組ID
    reviewed_prompt_channel_id = int(os.environ.get("NANA_REVIEWED_PROMPT_CHANNEL_ID")), #已審核提示頻道ID
    debug = False, #debug模式
    servers=[int(os.environ.get("NANA_SERVERS"))],       # 從環境變數讀取伺服器 ID 列表
    send_daily_channel_id_list=[int(os.environ.get("NANA_SEND_DAILY_CHANNEL_ID_LIST"))], #從環境變數讀取每日頻道ID
    newcomer_channel_id = [int(os.environ.get("NANA_NEWCOMER_CHANNEL_ID"))],#從環境變數讀取新人審核頻道ID
    member_remove_channel_id = [int(os.environ.get("NANA_MEMBER_REMOVE_CHANNEL_ID"))],#從環境變數讀取用戶離開頻道ID
    not_reviewed_id = [int(os.environ.get("NANA_NOT_REVIEWED_ID"))],#從環境變數讀取未審核身分組ID
    welcome_channel_id = [int(os.environ.get("NANA_WELCOME_CHANNEL_ID"))],#從環境變數讀取歡迎頻道ID
    allowed_role_ids={int(os.environ.get("NANA_ALLOWED_ROLE_IDS"))},#從環境變數讀取允許的管理員身分組ID
    whitelisted_servers={int(os.environ.get("NANA_WHITELISTED_SERVERS")): "Server 1"},#從環境變數讀取白名單ServerID
    target_channel_id=[int(os.environ.get("NANA_TARGET_CHANNEL_ID"))],#從環境變數讀取目標說話頻道ID
    discord_bot_token=os.environ.get("NANA_DISCORD_BOT_TOKEN") #從環境變數讀取discord bot tokenID
)

initialize_bot(user_config)

run_bot()
```
### 或是使用直接設定方法
```python
from nana_bot import Config, initialize_bot, run_bot

user_config = Config(
    api_key="User's Gemini API Key", #api key
    gemini_model="gemini-1.5-pro-002", #模型
    bot_name="奈奈", #機器人名稱
    review_format="我叫:\n我從這裡來:\n我的困擾有:\n是否有在諮商或就醫:\n為什麼想加入這邊:\n我最近狀況如何:", #審核格式
    pass_user_prompt_text = "{member.mention} 已通過審核,可以先到 <#{reviewed_prompt_channel_id}> 打聲招呼,也歡迎到 <#{TARGET_CHANNEL_ID[1]}> 或 <#{TARGET_CHANNEL_ID[0]}>  找othor bot或是我聊聊喔!", #審核通過後的回覆
    reviewed_role_id = [int("user_reviewed_role_id")], #已審核身分組ID
    reviewed_prompt_channel_id = int("user_reviewed_prompt_channel_id"), #已審核提示頻道ID
    debug = False, #debug模式
    servers=[int("user_servers_id")], #servers列表
    send_daily_channel_id_list=[int("user_send_daily_channel_id")], #每日頻道ID列表
    newcomer_channel_id=[int("user_newcomer_channel_id")], #新人審核頻道ID
    member_remove_channel_id=[int("user_member_remove_channel_id")], #用戶離開頻道ID
    not_reviewed_id=[int("user_not_reviewed_id")], #未審核身分組ID
    welcome_channel_id=[int("user_welcome_channel_id")], #歡迎頻道ID
    allowed_role_ids={int("user_ALLOWED_ROLE_IDS")}, #允許的管理員身分組ID
    whitelisted_servers={int("User's Server ID"): "Server 1"}, #白名單ServerID
    target_channel_id=[int("user_TARGET_CHANNEL_ID")], #目標說話頻道ID
    discord_bot_token="Your Discord Bot Token" #discord bot tokenID
    )
initialize_bot(user_config)
run_bot()
```
## 注意事項

本機器人僅供研究和實驗使用,不應該用於任何醫療或專業諮詢。

機器人可能會產生錯誤或不準確的資訊,請勿將其視為專業意見。

機器人的功能和行為可能隨著時間推移而發生變化。

## 貢獻

歡迎您提交拉取請求和錯誤報告!

## 作者

Vito1317 - 柯瑋宸

## 授權

本專案使用 [MIT](LICENSE) 授權
## 安全政策

[SECURITY.md](SECURITY.md)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/vito1317/nana-bot",
    "name": "nana-bot",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "Vito1317",
    "author_email": "service@vito95311.online",
    "download_url": "https://files.pythonhosted.org/packages/07/99/40fb1a420bd1d2ff13eb116725c96901229fdccfa1d00fbce345e615026a/nana_bot-5.4.4.tar.gz",
    "platform": null,
    "description": "# \u5948\u5948 - \u667a\u80fd\u966a\u4f34\u6a5f\u5668\u4eba (nana_bot) v5.4.4\n\n## \u7c21\u4ecb\n\u5948\u5948\u662f\u4e00\u500b\u57fa\u65bc Google Gemini \u6a21\u578b\u7684 Discord \u6a5f\u5668\u4eba\uff0c\u65e8\u5728\u63d0\u4f9b\u6eab\u6696\u3001\u7406\u89e3\u548c\u5c08\u696d\u7684\u966a\u4f34\uff0c\u4e26\u63d0\u4f9b\u4e00\u4e9b\u4f3a\u670d\u5668\u7ba1\u7406\u529f\u80fd\u3002 \u5948\u5948\u4e5f\u5177\u5099\u81ea\u884c\u4e0a\u7db2\u641c\u5c0b\u8cc7\u6599\u548c\u700f\u89bd\u7db2\u7ad9\u7684\u80fd\u529b\uff0c\u8b93\u5979\u7684\u77e5\u8b58\u66f4\u8c50\u5bcc\uff0c\u56de\u8986\u66f4\u7cbe\u78ba\u3002\n\n## \u529f\u80fd\n\n* **\u966a\u4f34\u8207\u652f\u6301:**\n    * \u4f7f\u7528\u7e41\u9ad4\u4e2d\u6587\u8207\u7528\u6236\u9032\u884c\u81ea\u7136\u6d41\u66a2\u7684\u5c0d\u8a71\u3002\n    * \u63d0\u4f9b\u60c5\u611f\u652f\u6301\u548c\u5efa\u8b70\uff0c\u64c5\u9577 DBT \u8faf\u8b49\u884c\u70ba\u6cbb\u7642\u3002\n    * \u8a18\u61b6\u6700\u8fd1 60 \u5247\u5c0d\u8a71\u5167\u5bb9\uff0c\u8b93\u4e92\u52d5\u66f4\u81ea\u7136\u3002\n    * \u4f7f\u7528\u8005 @tag \u6a5f\u5668\u4eba\u6642\uff0c\u6a5f\u5668\u4eba\u6703\u56de\u61c9\u3002\n* **\u8cc7\u8a0a\u6aa2\u7d22:**\n    * \u81ea\u52d5\u4e0a\u7db2\u641c\u5c0b\u8cc7\u6599\uff1a\u5948\u5948\u53ef\u4ee5\u6839\u64da\u5c0d\u8a71\u5167\u5bb9\uff0c\u81ea\u884c\u5224\u65b7\u662f\u5426\u9700\u8981\u4e0a\u7db2\u641c\u5c0b\u8cc7\u6599\uff0c\u4ee5\u63d0\u4f9b\u66f4\u6e96\u78ba\u7684\u56de\u8986\u3002 \u4f8b\u5982\uff0c\u7576\u4f7f\u7528\u8005\u8a62\u554f\u5929\u6c23\u3001\u65b0\u805e\u6216\u5176\u4ed6 factual \u7684\u8cc7\u8a0a\u6642\uff0c\u5948\u5948\u6703\u81ea\u52d5\u641c\u5c0b\u76f8\u95dc\u8cc7\u8a0a\u3002\n    * \u4f7f\u7528 `/search google/bing/yahoo [\u95dc\u9375\u5b57]` \u547d\u4ee4\uff0c\u9032\u884c\u6307\u5b9a\u641c\u5c0b\u5f15\u64ce\u7684\u641c\u7d22\u4e26\u7e3d\u7d50\u7d50\u679c\u3002\n    * \u4f7f\u7528 `/browse [\u7db2\u5740]` \u547d\u4ee4\uff0c\u700f\u89bd\u7279\u5b9a\u7db2\u7ad9\u4e26\u7e3d\u7d50\u5167\u5bb9\u3002\n* **\u4f3a\u670d\u5668\u7ba1\u7406:**\n    * \u76e3\u63a7\u4f3a\u670d\u5668\u6210\u54e1\u52a0\u5165\u548c\u96e2\u958b\uff0c\u63d0\u4f9b\u76f8\u95dc\u901a\u77e5\u3002\n    * `/pass` \u547d\u4ee4\uff1a\u5be9\u6838\u901a\u904e\u65b0\u6210\u54e1\uff0c\u8ce6\u4e88\u5176\u7279\u5b9a\u89d2\u8272\uff0c\u4e26\u79fb\u9664\u672a\u5be9\u6838\u89d2\u8272\u3002\n    * \u9ede\u6578\u7cfb\u7d71\uff1a\n        * `/add` \u547d\u4ee4\uff1a\u589e\u52a0\u4f7f\u7528\u8005\u9ede\u6578\u3002\n        * `/subtract` \u547d\u4ee4\uff1a\u6e1b\u5c11\u4f7f\u7528\u8005\u9ede\u6578\u3002\n        * `/points` \u547d\u4ee4\uff1a\u67e5\u8a62\u4f7f\u7528\u8005\u9ede\u6578\u3002\n* **\u5206\u6790\u6578\u64da:**\n    * `/analytics` \u547d\u4ee4\uff1a\u986f\u793a\u4f3a\u670d\u5668\u6216\u7279\u5b9a\u6210\u54e1\u7684\u5206\u6790\u6578\u64da\u3002\n\n## \u5b89\u88dd\n\n```bash\npip install nana-bot\n```\n## \u8a2d\u5b9a(\u53ef\u8df3\u904e\uff0c\u76f4\u63a5\u4f7f\u7528\u8a2d\u5b9a\u6a94>>\u8acb\u770b\u4e0b\u9762\u6216\u662f\u4f7f\u7528\u76f4\u63a5\u8a2d\u5b9a\u65b9\u6cd5)\n[\u4f7f\u7528\u624b\u518a](https://docs.google.com/presentation/d/1oJPoptZYt5PfNlh5RtnyA--XjEBijbt0/edit?usp=drivesdk&ouid=109673722431645325120&rtpof=true&sd=true)\n\u74b0\u5883\u8b8a\u6578\uff1a \u5efa\u7acb\u4e00\u500b .env \u6a94\u6848\u65bc\u5c08\u6848\u8cc7\u6599\u593e\u4e2d\uff0c\u4e26\u8a2d\u5b9a\u4ee5\u4e0b\u74b0\u5883\u8b8a\u6578\uff08\u975e\u5fc5\u8981\uff09\uff1a\n```ini\nNANA_API_KEY=\"Your Gemini API Key\"\nNANA_DISCORD_TOKEN=\"Your Discord Bot Token\"\n```\n\u8a2d\u5b9a\u6a94 (config.ini)\uff1a \u9664\u4e86\u74b0\u5883\u8b8a\u6578\uff0c\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528 config.ini \u6a94\u6848\u4f86\u81ea\u8a02\u5176\u4ed6\u8a2d\u5b9a\u3002\u9810\u8a2d\u8a2d\u5b9a\u6a94\u7684\u8def\u5f91\u70ba default_config.ini\uff0c\u4f7f\u7528\u8005\u53ef\u4ee5\u5275\u5efa ~/.nana_config.ini \u4f86\u8986\u84cb\u9810\u8a2d\u8a2d\u5b9a\u3002\n```ini\n[Nana]\ngemini_model = gemini-1.5-pro-002\nservers = server_id1,server_id2  # \u4ee5\u9017\u865f\u5206\u9694\u591a\u500b\u4f3a\u670d\u5668 ID\nsend_daily_channel_id_list = channel_id1,channel_id2\n# ...\u5176\u4ed6\u8a2d\u5b9a\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n```python\nfrom nana_bot import Config, initialize_bot, run_bot\nimport os\n\n# \u5f9e .env \u6a94\u6848\u8f09\u5165\u74b0\u5883\u8b8a\u6578\nfrom dotenv import load_dotenv\nload_dotenv()\n\nuser_config = Config(\n    api_key=os.environ.get(\"NANA_API_KEY\"),  # \u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\n    gemini_model=\"gemini-1.5-pro-002\",  # \u6216\u76f4\u63a5\u8a2d\u5b9a\n    bot_name = \"\u5948\u5948\"   # \u53ef\u76f4\u63a5\u8a2d\u5b9a\n    review_format=\"\u6211\u53eb:\\n\u6211\u5f9e\u9019\u88e1\u4f86:\\n\u6211\u7684\u56f0\u64fe\u6709:\\n\u662f\u5426\u6709\u5728\u8aee\u5546\u6216\u5c31\u91ab:\\n\u70ba\u4ec0\u9ebc\u60f3\u52a0\u5165\u9019\u908a:\\n\u6211\u6700\u8fd1\u72c0\u6cc1\u5982\u4f55\uff1a\", #\u5be9\u6838\u683c\u5f0f\n    pass_user_prompt_text = \"{member.mention} \u5df2\u901a\u904e\u5be9\u6838\uff0c\u53ef\u4ee5\u5148\u5230 <#{reviewed_prompt_channel_id}> \u6253\u8072\u62db\u547c\uff0c\u4e5f\u6b61\u8fce\u5230 <#{TARGET_CHANNEL_ID[1]}> \u6216 <#{TARGET_CHANNEL_ID[0]}>  \u627eothor bot\u6216\u662f\u6211\u804a\u804a\u5594!\", #\u5be9\u6838\u901a\u904e\u5f8c\u7684\u56de\u8986\n    reviewed_role_id = [int(os.environ.get(\"NANA_REVIEWED_ROLE_ID\"))], #\u5df2\u5be9\u6838\u8eab\u5206\u7d44ID\n    reviewed_prompt_channel_id = int(os.environ.get(\"NANA_REVIEWED_PROMPT_CHANNEL_ID\")), #\u5df2\u5be9\u6838\u63d0\u793a\u983b\u9053ID\n    debug = False, #debug\u6a21\u5f0f\n    servers=[int(os.environ.get(\"NANA_SERVERS\"))],       # \u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u4f3a\u670d\u5668 ID \u5217\u8868\n    send_daily_channel_id_list=[int(os.environ.get(\"NANA_SEND_DAILY_CHANNEL_ID_LIST\"))], #\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u6bcf\u65e5\u983b\u9053ID\n    newcomer_channel_id = [int(os.environ.get(\"NANA_NEWCOMER_CHANNEL_ID\"))],#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u65b0\u4eba\u5be9\u6838\u983b\u9053ID\n    member_remove_channel_id = [int(os.environ.get(\"NANA_MEMBER_REMOVE_CHANNEL_ID\"))],#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u7528\u6236\u96e2\u958b\u983b\u9053ID\n    not_reviewed_id = [int(os.environ.get(\"NANA_NOT_REVIEWED_ID\"))],#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u672a\u5be9\u6838\u8eab\u5206\u7d44ID\n    welcome_channel_id = [int(os.environ.get(\"NANA_WELCOME_CHANNEL_ID\"))],#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u6b61\u8fce\u983b\u9053ID\n    allowed_role_ids={int(os.environ.get(\"NANA_ALLOWED_ROLE_IDS\"))},#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u5141\u8a31\u7684\u7ba1\u7406\u54e1\u8eab\u5206\u7d44ID\n    whitelisted_servers={int(os.environ.get(\"NANA_WHITELISTED_SERVERS\")): \"Server 1\"},#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u767d\u540d\u55aeServerID\n    target_channel_id=[int(os.environ.get(\"NANA_TARGET_CHANNEL_ID\"))],#\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6\u76ee\u6a19\u8aaa\u8a71\u983b\u9053ID\n    discord_bot_token=os.environ.get(\"NANA_DISCORD_BOT_TOKEN\") #\u5f9e\u74b0\u5883\u8b8a\u6578\u8b80\u53d6discord bot tokenID\n)\n\ninitialize_bot(user_config)\n\nrun_bot()\n```\n### \u6216\u662f\u4f7f\u7528\u76f4\u63a5\u8a2d\u5b9a\u65b9\u6cd5\n```python\nfrom nana_bot import Config, initialize_bot, run_bot\n\nuser_config = Config(\n    api_key=\"User's Gemini API Key\", #api key\n    gemini_model=\"gemini-1.5-pro-002\", #\u6a21\u578b\n    bot_name=\"\u5948\u5948\", #\u6a5f\u5668\u4eba\u540d\u7a31\n    review_format=\"\u6211\u53eb:\\n\u6211\u5f9e\u9019\u88e1\u4f86:\\n\u6211\u7684\u56f0\u64fe\u6709:\\n\u662f\u5426\u6709\u5728\u8aee\u5546\u6216\u5c31\u91ab:\\n\u70ba\u4ec0\u9ebc\u60f3\u52a0\u5165\u9019\u908a:\\n\u6211\u6700\u8fd1\u72c0\u6cc1\u5982\u4f55\uff1a\", #\u5be9\u6838\u683c\u5f0f\n    pass_user_prompt_text = \"{member.mention} \u5df2\u901a\u904e\u5be9\u6838\uff0c\u53ef\u4ee5\u5148\u5230 <#{reviewed_prompt_channel_id}> \u6253\u8072\u62db\u547c\uff0c\u4e5f\u6b61\u8fce\u5230 <#{TARGET_CHANNEL_ID[1]}> \u6216 <#{TARGET_CHANNEL_ID[0]}>  \u627eothor bot\u6216\u662f\u6211\u804a\u804a\u5594!\", #\u5be9\u6838\u901a\u904e\u5f8c\u7684\u56de\u8986\n    reviewed_role_id = [int(\"user_reviewed_role_id\")], #\u5df2\u5be9\u6838\u8eab\u5206\u7d44ID\n    reviewed_prompt_channel_id = int(\"user_reviewed_prompt_channel_id\"), #\u5df2\u5be9\u6838\u63d0\u793a\u983b\u9053ID\n    debug = False, #debug\u6a21\u5f0f\n    servers=[int(\"user_servers_id\")], #servers\u5217\u8868\n    send_daily_channel_id_list=[int(\"user_send_daily_channel_id\")], #\u6bcf\u65e5\u983b\u9053ID\u5217\u8868\n    newcomer_channel_id=[int(\"user_newcomer_channel_id\")], #\u65b0\u4eba\u5be9\u6838\u983b\u9053ID\n    member_remove_channel_id=[int(\"user_member_remove_channel_id\")], #\u7528\u6236\u96e2\u958b\u983b\u9053ID\n    not_reviewed_id=[int(\"user_not_reviewed_id\")], #\u672a\u5be9\u6838\u8eab\u5206\u7d44ID\n    welcome_channel_id=[int(\"user_welcome_channel_id\")], #\u6b61\u8fce\u983b\u9053ID\n    allowed_role_ids={int(\"user_ALLOWED_ROLE_IDS\")}, #\u5141\u8a31\u7684\u7ba1\u7406\u54e1\u8eab\u5206\u7d44ID\n    whitelisted_servers={int(\"User's Server ID\"): \"Server 1\"}, #\u767d\u540d\u55aeServerID\n    target_channel_id=[int(\"user_TARGET_CHANNEL_ID\")], #\u76ee\u6a19\u8aaa\u8a71\u983b\u9053ID\n    discord_bot_token=\"Your Discord Bot Token\" #discord bot tokenID\n    )\ninitialize_bot(user_config)\nrun_bot()\n```\n## \u6ce8\u610f\u4e8b\u9805\n\n\u672c\u6a5f\u5668\u4eba\u50c5\u4f9b\u7814\u7a76\u548c\u5be6\u9a57\u4f7f\u7528\uff0c\u4e0d\u61c9\u8a72\u7528\u65bc\u4efb\u4f55\u91ab\u7642\u6216\u5c08\u696d\u8aee\u8a62\u3002\n\n\u6a5f\u5668\u4eba\u53ef\u80fd\u6703\u7522\u751f\u932f\u8aa4\u6216\u4e0d\u6e96\u78ba\u7684\u8cc7\u8a0a\uff0c\u8acb\u52ff\u5c07\u5176\u8996\u70ba\u5c08\u696d\u610f\u898b\u3002\n\n\u6a5f\u5668\u4eba\u7684\u529f\u80fd\u548c\u884c\u70ba\u53ef\u80fd\u96a8\u8457\u6642\u9593\u63a8\u79fb\u800c\u767c\u751f\u8b8a\u5316\u3002\n\n## \u8ca2\u737b\n\n\u6b61\u8fce\u60a8\u63d0\u4ea4\u62c9\u53d6\u8acb\u6c42\u548c\u932f\u8aa4\u5831\u544a\uff01\n\n## \u4f5c\u8005\n\nVito1317 - \u67ef\u744b\u5bb8\n\n## \u6388\u6b0a\n\n\u672c\u5c08\u6848\u4f7f\u7528 [MIT](LICENSE) \u6388\u6b0a\n## \u5b89\u5168\u653f\u7b56\n\n[SECURITY.md](SECURITY.md)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A helpful Discord bot powered by Gemini",
    "version": "5.4.4",
    "project_urls": {
        "Homepage": "https://github.com/vito1317/nana-bot"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c6005b4c64170f4aed5a7c9478f5c78b3120eafa5224e1bf6c79c40dc9c2a73e",
                "md5": "f2c710dca8f9092dafd2f4d80ceb6643",
                "sha256": "0ccc852b87dff6a0c02d277d6b6149a05db63936d82d353d0e2915aed64c4276"
            },
            "downloads": -1,
            "filename": "nana_bot-5.4.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f2c710dca8f9092dafd2f4d80ceb6643",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 24534,
            "upload_time": "2024-12-13T04:24:24",
            "upload_time_iso_8601": "2024-12-13T04:24:24.934336Z",
            "url": "https://files.pythonhosted.org/packages/c6/00/5b4c64170f4aed5a7c9478f5c78b3120eafa5224e1bf6c79c40dc9c2a73e/nana_bot-5.4.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "079940fb1a420bd1d2ff13eb116725c96901229fdccfa1d00fbce345e615026a",
                "md5": "e5a1be61b4bfb34294b397fbe5d402a7",
                "sha256": "f8ca6240a54fd60bd2a39179b4e97a6cf0ba08ee06607f9f4fdb0afe860fc9b5"
            },
            "downloads": -1,
            "filename": "nana_bot-5.4.4.tar.gz",
            "has_sig": false,
            "md5_digest": "e5a1be61b4bfb34294b397fbe5d402a7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 23253,
            "upload_time": "2024-12-13T04:24:26",
            "upload_time_iso_8601": "2024-12-13T04:24:26.206919Z",
            "url": "https://files.pythonhosted.org/packages/07/99/40fb1a420bd1d2ff13eb116725c96901229fdccfa1d00fbce345e615026a/nana_bot-5.4.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-13 04:24:26",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "vito1317",
    "github_project": "nana-bot",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "discord",
            "specs": []
        },
        {
            "name": "discord_interactions",
            "specs": []
        },
        {
            "name": "typing",
            "specs": []
        },
        {
            "name": "google-generativeai",
            "specs": []
        },
        {
            "name": "requests",
            "specs": []
        },
        {
            "name": "aiohttp",
            "specs": []
        },
        {
            "name": "BeautifulSoup4",
            "specs": []
        },
        {
            "name": "search_engine_tool_vito1317",
            "specs": []
        },
        {
            "name": "python-dotenv",
            "specs": []
        }
    ],
    "lcname": "nana-bot"
}
        
Elapsed time: 0.41738s