본문 바로가기
텔레그램 봇

텔레그램 봇 (3) : (C#) 사용자 등록

by Half-Dev 2020. 3. 22.

안녕하세요.

이번에는 사용자 등록에 대해서 해보겠습니다.

 

사용자 등록이 필요한 이유?

상대방이 봇으로 메시지를 보낼 경우 봇은 ChatId를 받게 됩니다.

봇에서 상대방으로 매세지를 보낼 경우 또한 상대방에 대한 ChatId가 필요합니다.

 

봇이 다른사람에게 메시지를 보내고 싶을 때가 문제가 될 수 있음으로

이러한 부분을 File을 통해 만들어보도록 하겠습니다.

 

코드는 저번에 배포했던 파일로 이어서 진행하겠습니다.


1. 기본설정 

 

System.IO에 대한 라이브러리를 추가해주도록 합시다.

 

1
2
//file
using System.IO;
cs

 

 

UserInfo.ini 파일이 있는지 없는지 확인 후 없으면 생성해 주도록 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Form1()
{
    InitializeComponent();
    UserInfo_CreateFile();
            
}
private void UserInfo_CreateFile()
{
    string strFile = Application.StartupPath + @"\UserInfo.ini";
    FileInfo fileInfo = new FileInfo(strFile);
 
    //파일 있는지 확인 있을때(true), 없으면(false)
    if (!fileInfo.Exists)
    {
        FileStream UserFile = System.IO.File.Create(strFile);     // 파일생성
        UserFile.Close();
    }
}
cs

 

 

코드를 실행시켰을때 UserInfo.ini가 생성된것을 볼 수 있습니다.

 

 


2. 사용자 등록

 

사용자가 기존에 있었던 사람인지 아닌지를 판별하고 없었던 사용자라면 사용자를 추가하도록 합니다.

봇에게 채팅을 보내게 되면 사용자 등록이 됩니다.

확인은 UserInfo.ini 파일에서 확인하실 수 있습니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
{
    var message = e.Message;
    if (message == null || message.Type != MessageType.Text)
        return;
 
    await CheckUserAsync(message, message.Chat.Id);
    await Bot_SendMessage(message.Chat.Id, message.Text);
}
 
private async Task CheckUserAsync(Telegram.Bot.Types.Message message, long chatId)
{
    string[] lines = System.IO.File.ReadAllLines(Application.StartupPath + @"\UserInfo.ini");
    //파일의 내용을 1줄씩 읽어드림
    foreach (string show in lines)
    {
        if (show == ""break;
        string[] sp = show.Split(new string[] { " : " }, StringSplitOptions.None);
        if (chatId.ToString() == sp[1].Trim())
        {
            await Bot_SendMessage(message.Chat.Id, "사용자가 이미 등록되어 있습니다.");
            //같은 아이디가 있음으로 등록을 하지 않아도 됨
            return;
        }
    }
    //같은 아이디가 없음으로 등록을 해야 함
    await Bot_SendMessage(message.Chat.Id, "사용자 등록이 완료되었습니다.");
    using (StreamWriter outputFile = new StreamWriter(Application.StartupPath + @"\UserInfo.ini"true))
    {   //파일 이어쓰기
        string upload =  message.Chat.FirstName + message.Chat.LastName + " : " + message.Chat.Id;
        outputFile.WriteLine(upload);
    }
}
cs

실행결과

 

UserInfo.ini 파일


 

3. 문자 필터링

아무거나 입력시 등록되는 것보다는 특정 문자를 입력했을 때 등록이 되도록 만들어 보겠습니다.

저는 @등록 을 입력했을 시 등록이 되도록 만들어 보겠습니다.

 

1
2
3
4
5
6
7
8
9
private async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
{
    var message = e.Message;
    if (message == null || message.Type != MessageType.Text)
        return;
 
    if(message.Text == "@등록") CheckUser(message, message.Chat.Id);
    await Bot_SendMessage(message.Chat.Id, message.Text);
}
cs


다음으로는 날씨를 받아오는 코드를 작성해보도록 하겠습니다.

 

프로젝트 파일

텔레그램_사용자_등록.zip
6.22MB

댓글