Telegram 을 이용하여 CLI 에서 메세지를 보내자

최근에 많은 솔루션들이 자체적으로 텔레그램 메세지 발송도 지원하곤 하지만 필요에 의해 CLI 상에서 혹은 타 어플이 콜을 하여 메세지를 보내야 할 경우가 관리자 측면에선 필요할 때가 있습니다.

또한 콜을 중앙에서 실행하지 못하고 부득이하게 서버내에서 메세지 발송이 필요한 상황에서 사용하기 위해 간단히 코딩해 두었습니다.

  1. 텔레그램에서 API사용을 위해 토큰을 얻어야 합니다.
  2. 기본적으로 golang이 설치된 환경에서 컴파일을 하시면 됩니다.
  3. go get github.com/go-telegram-bot-api/telegram-bot-api를 통해서 라이브러리를 받아주셔야 합니다.
  4. go build filename.go로 컴파일을 해주시면 filename binary가 생성되며 해당 바이너리만 가지고 실행가능합니다.
  5. filename -r 수신아이디 -m “메세지” 로 실행을 하면 발송이 진행되게 됩니다.
package main

import (
    "flag"
    "os"
    "log"
    "fmt"
    "github.com/go-telegram-bot-api/telegram-bot-api"
)

const (  // 수정필수
    tgmToken = ""                            // 텔레그램 토큰
    logPath = "./".                          // 로그가 기록될 경로
    logFileName = "telegram_sendlog.log"     // 로그파일명
)

type MsgFormat struct {
    targetID   int64
    sendMSG    string
    tgCursor   *tgbotapi.BotAPI
}

func (msg *MsgFormat) tgConnect() {
    tgCursor, err := tgbotapi.NewBotAPI(tgmToken)

    if err != nil {
        log.Panic(err)
    }

    msg.tgCursor = tgCursor
    msg.tgCursor.Debug = false


    if err != nil {
        log.Panic(err)
    }
}

func (msg *MsgFormat) msgSender() {

    sendResult := tgbotapi.NewMessage(msg.targetID, msg.sendMSG)
    msg.tgCursor.Send(sendResult)

}


func main() {

    fpLog, err := os.OpenFile(logPath+logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("Error : make "+logPath+logFileName)
        log.Panic(err)
    }
    defer fpLog.Close()

    myLogger := log.New(fpLog, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)

    reciever := flag.Int64("r", 0, "SET msg reciever")
    message := flag.String("m", "", "SET message")

    flag.Parse()

    if *reciever == 0 || *message == "" {
        fmt.Println("- 옵션이 부족함")
        os.Exit(0)
    }

    var mf MsgFormat

    mf.targetID = *reciever
    mf.sendMSG = *message
    mf.tgConnect()
    mf.msgSender()

    myLogger.Println(*message, "발송완료")
}

 

0 0 votes
Article Rating
Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 Comments
Inline Feedbacks
View all comments
Scroll to top
0
Would love your thoughts, please comment.x
()
x