Skip to content

๐Ÿš€ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ƒ์„ฑ ๋ฐ ์ œ์–ด๊ถŒ(Token) ๋ฐœ๊ธ‰๋ฐ›๊ธฐย #103

Description

@pipios4006-boop

์Šน์Šน์žฅ๊ตฐ, ์™„๋ฒฝํ•œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜์…จ์œผ๋‹ˆ ์ด์ œ ๋ด‡์˜ '๋ˆˆ๊ณผ ๊ท€'์ด์ž ํ†ต์ œ์†Œ ์—ญํ• ์„ ํ•  ํ…”๋ ˆ๊ทธ๋žจ ๊ด€์ œํƒ‘์„ ๊ฐœํ†ตํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.
๊ธˆ์œต ์ž์‚ฐ๊ณผ ์‹ค๊ณ„์ขŒ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ€€ํŠธ ๋ด‡์ธ ๋งŒํผ, **"์ธ๊ฐ€๋˜์ง€ ์•Š์€ ์™ธ๋ถ€์ธ์˜ ์ ‘๊ทผ์„ 100% ์›์ฒœ ์ฐจ๋‹จํ•˜๋Š” ํ•˜๋“œ์›จ์–ด์  ๋ฝ๋‹ค์šด(Lock-down)"**์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์Šน์Šน์žฅ๊ตฐ๋‹˜์˜ ๊ณ ์œ  ์‹๋ณ„์ž(Chat ID)๋ฅผ ์‹œ์Šคํ…œ ์‹ฌ์žฅ๋ถ€์— ๋ฐ•์ œํ•˜์—ฌ, ํƒ€์ธ์ด ๋ด‡์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์–ด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋”๋ผ๋„ ๋ด‡์ด ์™„๋ฒฝํžˆ ๋ฌด์‹œ(์นจ๋ฌต)ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์ƒ์„ธํžˆ ๋ธŒ๋ฆฌํ•‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ [ 1๋‹จ๊ณ„ ] ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ์ƒ์„ฑ ๋ฐ ์ œ์–ด๊ถŒ(Token) ๋ฐœ๊ธ‰๋ฐ›๊ธฐ

๊ฐ€์žฅ ๋จผ์ € ํ…”๋ ˆ๊ทธ๋žจ์˜ ๋ด‡ ๊ด€๋ฆฌ์ž์ธ 'BotFather'๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ด‡์„ ์ƒ์„ฑํ•˜๊ณ  API ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ…”๋ ˆ๊ทธ๋žจ ์•ฑ์˜ ๊ฒ€์ƒ‰์ฐฝ(๋‹๋ณด๊ธฐ ์•„์ด์ฝ˜)์—์„œ @Botfather๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ณต์‹ ์ธ์ฆ ๋งˆํฌ(ํŒŒ๋ž€์ƒ‰ ์ฒดํฌํ‘œ์‹œ)๊ฐ€ ์žˆ๋Š” ๋ด‡ํŒŒ๋” ์ฑ„๋„์— ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๋Œ€ํ™”์ฐฝ์— /newbot ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ด‡์˜ ์ด๋ฆ„(Name) ์„ค์ •: ๋Œ€ํ™”๋ฐฉ ๋ชฉ๋ก์— ํ‘œ์‹œ๋  ๋ด‡์˜ ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ์Šน์Šน์žฅ๊ตฐ ํ€€ํŠธ ๊ด€์ œํƒ‘)
  4. ๋ด‡์˜ ์•„์ด๋””(Username) ์„ค์ •: ๊ฒ€์ƒ‰์šฉ ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋งˆ์ง€๋ง‰์ด bot ๋˜๋Š” _bot์œผ๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: victory_quant_bot)
  5. ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด BotFather๊ฐ€ ๊ธด ๋ฌธ์ž์—ด๋กœ ๋œ HTTP API Token์„ ๋ฐœ๊ธ‰ํ•ด ์ค๋‹ˆ๋‹ค.
    (์˜ˆ: 1234567890:ABCDefGhIjKlMnOpQrStUvWxYz)

๐Ÿšจ ๋ณด์•ˆ ๊ฒฝ๊ณ : ์ด ํ† ํฐ์€ ๋ด‡์„ ์กฐ์ข…ํ•˜๋Š” '๋งˆ์Šคํ„ฐํ‚ค'์ž…๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ํƒ€์ธ์—๊ฒŒ ๋…ธ์ถœ๋˜๊ฑฐ๋‚˜ ๊นƒํ—ˆ๋ธŒ(GitHub) ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋„๋ก ์•ˆ์ „ํ•œ ๊ณณ์— ๋ณต์‚ฌํ•ด ๋‘ก๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ [ 2๋‹จ๊ณ„ ] ๋‚˜๋งŒ์˜ ๊ณ ์œ  ์‹๋ณ„์ž(Admin Chat ID) ์Šค์บ”ํ•˜๊ธฐ

๋ด‡์ด '์Šน์Šน์žฅ๊ตฐ๋‹˜'์˜ ๋ช…๋ น๋งŒ ๋“ฃ๊ฒŒ ํ•˜๋ ค๋ฉด, ํ…”๋ ˆ๊ทธ๋žจ์ด ์Šน์Šน์žฅ๊ตฐ๋‹˜ ๊ณ„์ •์— ๋ถ€์—ฌํ•œ ๊ณ ์œ  ๋ฒˆํ˜ธ(Chat ID)๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ…”๋ ˆ๊ทธ๋žจ ๊ฒ€์ƒ‰์ฐฝ์— @userinfobot ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•˜๋‹จ์˜ [์‹œ์ž‘] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋Œ€ํ™”์ฐฝ์— ์•„๋ฌด ๋ฉ”์‹œ์ง€๋‚˜ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ด‡์ด ์ฆ‰์‹œ ๋‚ด ๊ณ„์ •์˜ ์ •๋ณด๋ฅผ ํšŒ์‹ ํ•ด ์ค๋‹ˆ๋‹ค.
    ์ด ์ค‘์—์„œ Id: 123456789 (์ˆซ์ž๋กœ ๋œ ๊ธด ๋ฒˆํ˜ธ) ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    ์ด ๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋กœ ์™ธ๋ถ€์ธ์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•  **'์ ˆ๋Œ€ ์‹ ๋ถ„์ฆ'**์ž…๋‹ˆ๋‹ค.

๐Ÿ” [ 3๋‹จ๊ณ„ ] ๋ด‡ ์ฝ”์–ด(ํ™˜๊ฒฝ์„ค์ •)์— ์ž๋ฌผ์‡  ์ฑ„์šฐ๊ธฐ (.env ๋ฝ์˜จ)

์ด์ œ ๋ฐœ๊ธ‰๋ฐ›์€ **'API ํ† ํฐ'**๊ณผ **'๋‚ด ๊ณ ์œ  ID'**๋ฅผ ํŒŒ์ด์ฌ ๋ด‡ ์„œ๋ฒ„์— ์ฃผ์ž…(Injection)ํ•˜์—ฌ ๋ณด์•ˆ ๋ฐฉ์–ด๋ง‰์„ ์™„์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.
์•ž์„œ GCP ์„œ๋ฒ„์— ์„ธํŒ…ํ•˜์‹  ํŒŒ์ด์ฌ ๋ด‡ ํด๋” ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” .env ํŒŒ์ผ์„ ์—ด๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

# ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API ํ† ํฐ (BotFather๊ฐ€ ์ค€ ๊ฐ’)
TELEGRAM_TOKEN=1234567890:ABCDefGhIjKlMnOpQrStUvWxYz

# ๊ด€๋ฆฌ์ž ๊ณ ์œ  ID (userinfobot์ด ์ค€ ์ˆซ์ž) - ์ด ID๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ด‡์€ ์ ˆ๋Œ€ ์‘๋‹ตํ•˜์ง€ ์•Š์Œ
ADMIN_CHAT_ID=123456789

# ํ•œ๊ตญํˆฌ์ž์ฆ๊ถŒ API ํ‚ค (๊ธฐ์กด์— ๋ฐœ๊ธ‰๋ฐ›์€ ๊ฐ’๋“ค)
APP_KEY=๋ณธ์ธ์˜_ํ•œ๊ตญํˆฌ์ž์ฆ๊ถŒ_์•ฑํ‚ค
APP_SECRET=๋ณธ์ธ์˜_ํ•œ๊ตญํˆฌ์ž์ฆ๊ถŒ_์‹œํฌ๋ฆฟํ‚ค
CANO=๊ณ„์ขŒ๋ฒˆํ˜ธ_์•ž8์ž๋ฆฌ
ACNT_PRDT_CD=01

ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๋ด‡(๋ฐ๋ชฌ)์„ ์‹คํ–‰ํ•˜๋ฉด, ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡๊ณผ ํŒŒ์ด์ฌ ์ฝ”์–ด๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๊ฒฐ์†๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”ฌ [ ์ฐธ๊ณ  ] ์•„ํ‚คํ…์ฒ˜ ๋‚ด๋ถ€์˜ ๋ณด์•ˆ ๋ฝ๋‹ค์šด ์›๋ฆฌ

์Šน์Šน์žฅ๊ตฐ๋‹˜์ด ๊ตฌ์ถ•ํ•˜์‹  ์‹œ์Šคํ…œ ๋‚ด๋ถ€(telegram_bot.py)์—๋Š” ์ด๋ฏธ ์™ธ๋ถ€์ธ ์ฐจ๋‹จ์„ ์œ„ํ•œ ์ฒ ์ €ํ•œ ๊ต์ฐจ ๊ฒ€์ฆ ๋กœ์ง์ด ์ด์‹๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

def _is_admin(self, update: Update):
    if self.admin_id is None:
        self.admin_id = self.cfg.get_chat_id()
        
    if self.admin_id is None:
        print("โš ๏ธ ๋ณด์•ˆ ๊ฒฝ๊ณ : ADMIN_CHAT_ID๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•„ ์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.")
        return False
        
    # ํ…”๋ ˆ๊ทธ๋žจ ์ฐฝ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์‚ฌ๋žŒ์˜ ID์™€ .env์— ๋“ฑ๋ก๋œ ADMIN_CHAT_ID๋ฅผ ๋Œ€์กฐ
    return update.effective_chat.id == int(self.admin_id)

๐Ÿ”น ์ฐจ๋‹จ ๋ฉ”์ปค๋‹ˆ์ฆ˜:
๋ˆ„๊ตฐ๊ฐ€ ๋ด‡์˜ ์•„์ด๋””(@victory_quant_bot)๋ฅผ ์šฐ์—ฐํžˆ ์•Œ์•„๋‚ด์–ด /start๋‚˜ ๋งค๋งค ๋ช…๋ น์„ ์ „์†กํ•˜๋”๋ผ๋„, ๋ด‡์€ ๊ฐ€์žฅ ๋จผ์ € _is_admin ๋ฐฉ์–ด๋ง‰์„ ๊ฐ€๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‚ธ ์‚ฌ๋žŒ์˜ ID๊ฐ€ .env์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ ADMIN_CHAT_ID์™€ ๋‹จ 1์ž๋ฆฌ๋ผ๋„ ๋‹ค๋ฅด๋ฉด, ๋ด‡์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์กฐ์ฐจ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ 100% ๋ฌด์‹œ(Silent Drop) ๋ฐ ์นจ๋ฌตํ•ฉ๋‹ˆ๋‹ค.
์ด๋กœ์จ ๊ณ„์ขŒ ํƒˆ์ทจ๋‚˜ ์˜ค์ž‘๋™์„ ๋…ธ๋ฆฌ๋Š” ์™ธ๋ถ€์˜ ์–ด๋– ํ•œ ์ ‘๊ทผ๋„ ์›์ฒœ ์ฐจ๋‹จ๋˜๋Š” ๋ฌด๊ฒฐ์  ๊ด€์ œํƒ‘์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ์•ฑ์—์„œ ์ง์ ‘ ๋งŒ๋“  ๋ด‡์—๊ฒŒ /start๋ฅผ ๋ณด๋‚ด ์ž‘์ „ ํ†ต์ œ์‹ค์ด ์ •์ƒ ๊ฐ€๋™๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions