그다음 봇아버지에게 /newBot이라고 말은 걸면 아버지가 물어볼꺼에요 봇이름은 무엇으로 할거니?
라고..
거기에 Bot 이름을 입력해주시면 되는데
이름_Bot 이름 뒤에 꼭 _Bot이라고 붙여 주셔야 합니다
그렇게 Bot이 생성이 되면 HTTP API 라는 키를 알려줍니다
여기까지 되셧으면 사전 준비는 완료
다음은 비쥬얼 스튜디오로 가서 프로젝트를 하나 생성해 줍니다
그 다음 Nuget을 통해 TelegramBot을 참조 추가 해줍니다
저는 이미 설치가 되어 있으서 업데이트라고 나오는데
여러분은 아마 설치라고 나오실겁니다
설치하게 되면 Telegram.Bot이라는 참조가 생성이 됩니다
그다음 텔레그램을 제어하기 위한 Class를 생성할겁니다
저는 src라는 폴더 아래 TelegramBot.cs라는 파일을 생성했습니다
[SourceCode]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Cache;
using System.IO;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
Telegram.Bot을 화면에 삽입 시켜 줍니다
private void Telegram_Send()
{
string text = Messge;
string errorMessage = null;
bool ret = TelegramBot.SendMessage(text, out errorMessage);
switch (TelegramBot._chatId)
{
case "chatId1":
Who = "사용자1";
break;
case "chatId2":
Who = "사용자2";
break;
case "chatId3":
Who = "사용자3";
break;
case "chatId4":
Who = "사용자4";
break;
case "chatId5":
Who = "사용자5";
break;
}
//Log 기록.
TelegramBot._chatId = "chatId_Bot";
text = "[" + Who + "] 전송시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
bool ret2 = TelegramBot.SendMessage(text, out errorMessage);
}
이렇게 하면 전송하게 됩니다
여기서 chatId라는게 나오는데요
상대방의 고유 계정 ID라고 보시면 될거 같은데요 나의 ID를 보는 방법은 다음과 같습니다
친구 검색하기에서 "get id"라고 검색을 하면 아래 그림과 같은 Bot이 나오는데 추가해줍니다
응용 부분은 사내 알림, 시스템 관리자 알림, 등 카카오톡을 활용해서 시스템 알림 기능을 만들기 위해 시도해 봤는데요
결론은 실패 입니다ㅎㅎ
카카오 챗봇에서 연속 메세지가 다중 발생하면 계정에 Block을 걸어 계정을 사용하지 못하게 정책이 잡혀 있더라구요
아마 악성 이용을 방지 하지 위함인거 같습니다
그래도 응용하면 나중에 다른 다른 어플리케이션을 제어할수도 있기에
방법을 공유해볼께요
[Source Code]
using System.Runtime.InteropServices;
윈도우에 실행 중인 창에 대한 핸들러를 사용하기 위한 DllImport 함수를 사용하기 위한 선언문
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
//FindWindow (최상위 창 핸들값 가져오는 API)
[DllImport("user32.dll")]
public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
//FindWindowEX (인자로 받아온 핸들의 자식의 핸들값 가져오는 API)
[DllImport("user32.dll")]
public static extern int SendMessage(int hwnd, int wMsg, int wParam, string lParam);
//SendMessage
[DllImport("user32.dll")]
public static extern uint PostMessage(int hwnd, int wMsg, int wParam, int lParam);
//윈도우를 포커스를 지정하여 최상위로 오도록 한다
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(int hWnd);
//최소화된 윈도우를 활성화 시킴
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(int hWnd, int nCmdShow);
DllImport를 사용해 다음과 같이 핸들러 추가
// user create.
string Title = string.Empty;
string massage = string.Empty;
const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;
const Int32 VK_RETURN = 0x0D;
const int VK_ENTER = 0x0D;
제목과 보낼 메세지를 담을 변수와 키보드 코드를 이미 지정합니다
public void sendKatalk(string title, string msg)
{
int hd01 = FindWindow(null, title);
int hd03 = FindWindowEx(hd01, 0, "RichEdit20W", "");
//ShowWindowAsync(hd01, 1);
SetForegroundWindow(hd01);
//maessage send.
SendMessage(hd03, 0x000c, 0, msg);
//sleep Time 3sec.
Thread.Sleep(3000);
PostMessage(hd03, 0x0100, 0xD, 0x1C001);
//sleep Time 3sec.
Thread.Sleep(3000);
}
FindWindow를 통해 title의 이름을 가진 활성화 창을 찾습니다
그 다음 SetForegroundWindow를 통해 title이름을 가진 창을 최상위로 활성화 시킵니다
그 뒤에 SendMessage를 이용해서 hd03에서 RichEdit20W 부분 위치에 msg라는 값을 넣어줍니다
마지막으로 PostMessage를 통해 RichEdit20W에 엔터 명령어를 보내주면 메세지 보내기 성공!!
저는 Theread를 사용해서 사용자이름을 불러와 자동으로 대화창을 활성화 시키고 그 활성화 된