Skip to content

NTUT-SELab/MicrosoftGraphBot

Repository files navigation

MicrosoftGraphBot

Microsoft Graph API 是一個 RESTful 的 Web API,可讓您存取 Microsoft Cloud 服務資源。 註冊應用程式並取得使用者或服務的驗證權杖之後,您就可以對 Microsoft Graph API 提出要求。

藉由本專案建立自動化觸發 Microsoft Graph API 機器人伺服器,滿足微軟 Office365 開發者訂閱續約條件並自動續約,該機器人會根據組態檔的設定排成觸發 Microsoft Graph API。

應用: Office365 開發者訂閱 😘

Ubuntu Windows MacOS
master Build Status Build Status Build Status
develop Build Status Build Status Build Status
hotfix Build Status Build Status Build Status
document Build Status Build Status Build Status
release Build Status Build Status Build Status
master develop hotfix document release
CodeQL CodeQL CodeQL CodeQL CodeQL CodeQL
Coverage Azure DevOps coverage (branch) Azure DevOps coverage (branch) Azure DevOps coverage (branch) Azure DevOps coverage (branch) Azure DevOps coverage (branch)
Github Docker
Publish Build Status Build Status

教學:

組態檔介紹:

範例文件: appsettings.json.example

{
  "JoinBotMessage": "歡迎使用 Microsoft Graph Bot",
  "Cron": "0 */4 * * *",
  "CheckVerCron": "0 */12 * * *",
  "PushResultCron": "0 0 * * *",
  "AdminPassword": "P@ssw0rd",
  "DeleteDelayTime": 30000,
  "Telegram": {
    "Token": "1119104861:AAH4D1-ZdtwvFPeQARLJAdhBYPA1xK7px08"
  },
  "MSSQL": {
    "Host": "mssql",
    "Port": 1433,
    "User": "sa",
    "Password": "P@ssw0rd",
    "DataBase": "MicrosoftGraphBot"
  },
  "API": {
    "NumberOfServiceCall": 2,
    "NumberOfMethodCall": 1
  }
}
配置項 說明
JoinBotMessage 使用者第一次與 Bot 建立聯繫時,Bot的問候語
Cron Api 排程觸發的頻率,請參考 Crontab 格式
CheckVerCron 檢查 Bot 是否有新版本的頻率,請參考 Crontab 格式
PushResultCron 推播使用者呼叫 API 結果的頻率,請參考 Crontab 格式
AdminPassword 管理者密碼,與 Bot 溝通後,輸入此密碼可取得管理者權限
DeleteDelayTime 任務執行完畢,刪除任務產生的垃圾資料前等待的時間
Telegram Token Telegram bot token,請與 Telegram bot father 聊天建立 Telegram bot 並取得 Token
MSSQL Host SQL server 主機位置 (備註:使用 Docker compose 在 MSSQL 項不需要做任何更改)
Port SQL server port
User SQL server 使用者
Password SQL server 使用者的密碼
DataBase 資料庫名稱
API NumberOfServiceCall 每次呼叫 API 時,呼叫 API 種類數量的上限 例如: Outlook API (備註: 0 為所有 API 種類)
NumberOfMethodCall 某個 API 種類,呼叫 API 數量的上限 例如: List messages (備註: 0 為某個 API 種類中,所有的 API)

架設方法:

Github Release 下載最新的 appsettings.json(應用程式配置文件),編輯其內容。 備註: [Telegram:Token] 請改成自己 Bot 的 Token。

Docker(推薦):

  1. Github Release 下載最新的 docker.tar.gz,並解壓縮文件
  2. 安裝 Docker
  • Windows

    1. 開啟 Powershell,並切換至 docker.tar.gz 解壓縮後的目錄
    2. 第一次執行需要建立必要資料夾
      PS C:\docker> .\CreateContainerFolder.ps1
      
    3. 將 appsettings.json 移動至 docker 資料夾下的 bot 資料夾內
    4. 編輯 appsettings.json 文件的內容
    5. 建立並啟動容器
      PS C:\docker> docker-compose up -d
      
  • Linux & MacOS

    1. 切換至 docker.tar.gz 解壓縮後的目錄
    2. 第一次執行需要建立必要資料夾
      root@docker_server:~/docker$ ./CreateContainerFolder.sh
      
    3. 將 appsettings.json 移動至 docker 資料夾下的 bot 資料夾內
    4. 編輯 appsettings.json 文件的內容
    5. 建立並啟動容器
      root@docker_server:~/docker$ docker-compose up -d
      

其它

  1. 自行安裝 SQL server
  2. 編輯 appsettings.json 內 MSSQL 配置項的配置
  • Windows(x64):

    1. Github Release 下載最新的 win-x64.zip,並解壓縮文件
    2. 執行 MicrosoftGraphAPIBot.exe
  • Linux(x64):

    1. Github Release 下載最新的 linux-x64.zip,並解壓縮文件
    2. 執行 MicrosoftGraphAPIBot
      root@server:~/MicrosoftGraphAPIBot$ ./MicrosoftGraphAPIBot
      
  • MacOS(x64):

    1. Github Release 下載最新的 osx-x64.zip,並解壓縮文件
    2. 執行 MicrosoftGraphAPIBot
      root@server:~/MicrosoftGraphAPIBot$ ./MicrosoftGraphAPIBot
      

更新版本方法

  1. 檢查 appsettings.json(應用程式配置文件) 是否需要增加或刪除欄位
  2. 更新程式
  • Docker
    docker-compose down
    docker-compose pull
    docker-compose up -d
    
  • 其它: 至 Github Release 下載最新版本的程式

支援 API:

  • List messages
  • Create Message
  • Get message
  • Update message
  • Delete message
  • message: send
  • List children of a driveItem
  • Create a new folder in a drive
  • Update DriveItem properties
  • Delete a DriveItem
  • Move a DriveItem to a new folder
  • Create a sharing link for a DriveItem
  • Accessing shared DriveItems
  • List sharing permissions on a driveItem
  • Get sharing permission for a file or folder
  • Update sharing permission
  • Delete a sharing permission from a file or folder
  • Get contact
  • Create Contact
  • Update contact
  • Delete contact

版本:

請至 ReleaseNotes 資料夾查看變更紀錄。

貢獻:

我們將貢獻分為3類:

  1. 提出功能需求,但無撰寫程式能力

    • 開啟新的 issue,並使用 功能要求 模板
  2. 提出錯誤報告,但無撰寫程式能力

    • 開啟新的 issue,並使用 錯誤報告 模板
  3. 有撰寫程式能力者

技術:

  • C#
  • Dependency injection
  • Entity Framework Core
  • Microsoft Graph API
  • Telegram API
  • Hangfire (排程)