Skip to content

Commit

Permalink
hitcon 2024
Browse files Browse the repository at this point in the history
  • Loading branch information
iach526526 committed Aug 26, 2024
1 parent 0c19ec6 commit 9d22666
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 28 deletions.
17 changes: 17 additions & 0 deletions blog/2024-08-24-HITCON2024/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
slug: hitcon2024
title: HITCON 2024
authors: [SCAICT]
tags: [HITCON 2024,社群活動]
---
中電在今年 2024 HITCON 有參與社群擺攤,地點在中央研究院人文社會科學館,
<!-- truncate -->
今年的攤位我們準備了中電喵貼紙和中電 bar 闖關在現場和大家互動,並延長了幹部招募時間連同前兩天的 AIS3 club 宣傳以增加下一屆招募人數。

## 中電 bar
![中電 bar](https://raw.githubusercontent.com/SCAICT/2024-HITCON-barcode/main/posters/og.jpg)
當天攤位有準備兩面顏色不同的冰棒棍,遊戲規則是用 EAN-8 編碼方式拼出指定的八位數字,計時排名,完成贈送電電
中電 bar 原始碼現在已經在 [GitHub](https://github.com/SCAICT/2024-HITCON-barcode) 上釋出,現在也可以繼續遊玩,但過關後不會贈送獎品。

## 中電喵貼紙
中電商店復刻,商品包郵方式正在討論中,很快就會正式上線。
48 changes: 22 additions & 26 deletions blog/2024-08-24-uwuAPI/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@
slug: gift-api
title: 中電喵送禮 by Discord API
authors: [iach526]
tags: [HITCON 2024,SCAICT-uwu,中電喵]
tags: [HITCON 2024,SCAICT-uwu]
---

中電會報名了 HITCON 2024 的社群擺攤,為此我們資訊組設計了[中電 bar](https://github.com/SCAICT/2024-HITCON-barcode) 讓大家來攤位遊玩。遊戲過關後會私訊通知並發送獎勵,但之前做的發送獎勵只能透過在頻道使用斜線指令使用 pycord 傳訊息 ,在這個 case 得直接用在網頁程式裡面呼叫,這勢必得修改一點點程式,因此催生了這篇部落格教學
中電會報名了 HITCON 2024 的社群擺攤,為此資訊組設計了[中電 bar](https://github.com/SCAICT/2024-HITCON-barcode) 讓大家來攤位遊玩。遊戲過關後會私訊通知並發送獎勵,但之前做的發送獎勵只能透過在頻道使用斜線指令使用 pycord 傳訊息 ,在這個 case 得直接用在網頁程式裡面呼叫,這勢必得修改一點點程式,因此催生了這篇部落格教學
<!-- truncate -->

要操控中電喵(或你的 bot) 的形象幫忙發訊息是一個很常見的需求,中電喵公告也是用相同的原理。Discord 提供了 API 讓我們呼叫,只要給 API bot token 和要傳送的訊息,就能達成我們的目的。本篇文章會用 python 的 request 套件示範

## 常數定義
本文章中若該程式碼區塊若沒有另外定義以下變數值,均採用這裡的定義方式。
```python
discord_token = "Discord Bot Token"
target_user_id = "要送訊息的目標帳號 ID"
guild_id = "伺服器 ID ,我們會希望私訓的對象和 bot 在同一個伺服器"
```
## 步驟 0: 驗證該使用者是否存在
這同時也是一個簡單且完整的 GET 請求示範,設定 header、url 和 payload並發出請求。我建議在發送 DM 訊息之前先檢查使用者是否在伺服器裡面。
這同時也是一個簡單且完整的 GET 請求示範,設定 header、url 和 payload並發出請求。我建議在發送 DM 訊息之前先檢查使用者是否在伺服器裡面。如果不存在,會回傳 JSON:```{'message': 'Unknown Member', 'code': 10007}```
<!-- 我沒有嘗試過如果沒有共同伺服器能不能發訊息 -->
```python
url = f"https://discord.com/api/v10/guilds/{guild_id}/members/{target_user_id}"
Expand Down Expand Up @@ -92,23 +93,23 @@ button = {

#### 下表為 components 底下元素常用的屬性,更多內容可以參考(官方文檔)[https://discord.com/developers/docs/interactions/message-components]

| 屬性 | 類型 | 說明 |
|--------------|--------|------------------------------------------------------------------------------------------|
| `type` | 整數 | 按鈕的類型。`1` 表示 Action Row,用來包含多個按鈕;`2` 表示按鈕本身。 |
| `label` | 字串 | 按鈕上顯示的文本。最多 80 個字元。 |
| `style` | 整數 | 按鈕的樣式。可選值包括 `1` (Primary)、`2` (Secondary)、`3` (Success)、`4` (Danger)、`5` (Link)。 |
| `url` | 字串 |`style` 設為 `5` 時,需要設置此屬性,指定按鈕指向的 URL。 |
| `custom_id` | 字串 | 用於識別按鈕的唯一 ID(僅在 `style` 不為 `5` 時使用)。 |
| `disabled` | 布林值 | 是否禁用此按鈕。`True` 為禁用,`False` 為啟用。默認為 `False`|


| `style` 數值 | 按鈕樣式 | 說明 |
|--------------|------------------|--------------------------------------------|
| `1` | Primary Button | 藍色按鈕,用於主要操作。 |
| `2` | Secondary Button | 灰色按鈕,用於次要操作。 |
| `3` | Success Button | 綠色按鈕,用於表示成功或正面的操作。 |
| `4` | Danger Button | 紅色按鈕,用於表示危險或破壞性的操作。 |
| `5` | Link Button | 透明背景帶下劃線的文字按鈕,用開啟 URL 連結。 |
| 屬性 | 類型 | 說明 |
| ----------- | ------ | ------------------------------------------------------------------------------------------------ |
| `type` | 整數 | 按鈕的類型。`1` 表示 Action Row,用來包含多個按鈕;`2` 表示按鈕本身。 |
| `label` | 字串 | 按鈕上顯示的文本。最多 80 個字元。 |
| `style` | 整數 | 按鈕的樣式。可選值包括 `1` (Primary)、`2` (Secondary)、`3` (Success)、`4` (Danger)、`5` (Link)。 |
| `url` | 字串 |`style` 設為 `5` 時,需要設置此屬性,指定按鈕指向的 URL。 |
| `custom_id` | 字串 | 用於識別按鈕的唯一 ID(僅在 `style` 不為 `5` 時使用)。 |
| `disabled` | 布林值 | 是否禁用此按鈕。`True` 為禁用,`False` 為啟用。默認為 `False` |


| `style` 數值 | 按鈕樣式 | 說明 |
| ------------ | ---------------- | --------------------------------------------- |
| `1` | Primary Button | 藍色按鈕,用於主要操作。 |
| `2` | Secondary Button | 灰色按鈕,用於次要操作。 |
| `3` | Success Button | 綠色按鈕,用於表示成功或正面的操作。 |
| `4` | Danger Button | 紅色按鈕,用於表示危險或破壞性的操作。 |
| `5` | Link Button | 透明背景帶下劃線的文字按鈕,用開啟 URL 連結。 |
## 步驟 3: 組裝請求的 JSON 資料

最後,需要將 Embeds message 和按鈕組裝成一個 JSON 物件,並透過 API 發送請求。
Expand All @@ -128,8 +129,6 @@ json_data = {
當所有的參數準備好後,我們可以使用 `requests` 模組來發送 POST 請求。

```python
import requests

response = requests.post(url, headers=headers, json=json_data)
if response.status_code == 200:
print("訊息發送成功!")
Expand All @@ -138,7 +137,4 @@ else:
```

## 總結
這篇 blog 教你先用 GET 看看用戶是否存在某伺服器,然後


這樣就完成了!透過這個範例,你已經學會了如何使用 Discord API 發送帶有 Embeds message 和按鈕的 DM 訊息。這種互動性可以大大提升用戶體驗,讓你的機器人更加實用和有趣。
這篇 blog 教你先用 GET 看看用戶是否存在某伺服器,然後傳送一個包含按鈕、embed 的 DM 訊息給對方。你學會了嗎?
7 changes: 6 additions & 1 deletion blog/authors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@ iach526:
name: Each Chen
title: 第3屆資訊組組員
url: https://github.com/iach526526
image_url: https://github.com/iach526526.png
image_url: https://github.com/iach526526.png
SCAICT:
name: SCAICT
title: 中電會
url: https://github.com/SCAICT
image_url: https://github.com/SCAICT.png
10 changes: 9 additions & 1 deletion blog/tags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,12 @@ news:
hello:
label: Hello
permalink: /hello
description: Hello tag description
description: Hello tag description
HITCON 2024:
label: HITCON 2024
permalink: /hitcon-2024
description: 中電會在 HITCON 2024 的相關文章
SCAICT-uwu:
label: 中電喵
permalink: /scaict-uwu
description: 中電喵-一隻住在中電會 Discord 的喵喵

0 comments on commit 9d22666

Please sign in to comment.