vivimbob/ft_irc

๐Ÿ’ก irc bot ์กฐ์‚ฌ ๋ฐ ๊ธฐ๋ณธ ํ‹€ ์„ค๊ณ„ ๊ตฌํ˜„ํ•˜๊ธฐ

Yudongwoo opened this issue ยท 4 comments

๐Ÿ”‘ How

  • irc bot ์กฐ์‚ฌํ•˜๊ธฐ

    • irc bot์˜ ์ •์˜
    • irc bot์˜ ํŠน์ง•, ๊ธฐ๋Šฅ
    • irc bot ์ข…๋ฅ˜
  • irc bot ์„ค๊ณ„ํ•˜๊ธฐ

    • ์œ„ ์กฐ์‚ฌํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„ํ•  ์˜ˆ์ •
    • bot์˜ ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋งŒ ์„ค๊ณ„ํ•  ์˜ˆ์ •
      • bot์˜ ๊ธฐ๋Šฅ๋“ค ์ค‘ ํ•„์ˆ˜์ ์ธ ๊ฒƒ๋งŒ ์ถ”๋ ค์„œ ์„ค๊ณ„

โœ” To-dos

  • irc bot ์กฐ์‚ฌํ•˜๊ธฐ
    • irc bot ์ •์˜
    • irc bot ํŠน์ง•
    • irc bot์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ
    • irc bot์˜ ์ข…๋ฅ˜
  • irc bot ์„ค๊ณ„ํ•˜๊ธฐ
  • irc bot ๊ตฌํ˜„ํ•˜๊ธฐ

๐Ÿ“ ETC

irc bot ์กฐ์‚ฌ

  • irc bot์˜ ์ •์˜

    • ํด๋ผ์ด์–ธํŠธ๋กœ irc์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋‹ค๋ฅธ irc ์‚ฌ์šฉ์ž์—๊ฒŒ
      ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๋…๋ฆฝ ํ”„๋กœ๊ทธ๋žจ์˜ ์ง‘ํ•ฉ
    • IRC ๋ด‡์€ ์ธ๊ฐ„ ์‚ฌ์šฉ์ž์—๊ฒŒ IRC์— ๋Œ€ํ•œ ๋Œ€ํ™”ํ˜• ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹ 
      ์ž๋™ํ™”๋œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ์™€ ๋‹ค๋ฆ„
  • irc bot์˜ ํŠน์ง•

    • ์ฑ„๋„ ๋“ฑ๋ก ์„œ๋น„์Šค๊ฐ€ ์—†๋Š” EFnet ๋ฐ IRCnet๊ณผ ๊ฐ™์€ IRC ๋„คํŠธ์›Œํฌ์™€
      ์ฑ„๋„์„ ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ์ถฉ์กฑ๋˜์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด(์ตœ์†Œ ์‚ฌ์šฉ์ž ์ˆ˜ ๋“ฑ)์ด
      ํ•„์š”ํ•œ Undernet ๋˜๋Š” QuakeNet๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์—์„œ ํŠนํžˆ ์œ ์šฉํ•จ
    • ๋ด‡์ด ์ด์™€ ๊ฐ™์€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ
      • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์—์„œ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ
      • irc์˜ ์ผ๋ถ€ ๋ฒ„์ „์—๋Š” ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” "์„œ๋น„์Šค" ํ”„๋กœํ† ์ฝœ์ด ์žˆ์Œ
      • ์ด๋Ÿฌํ•œ ์„œ๋ฒ„ ์Šน์ธ ๋ด‡์„ irc service๋ผ๊ณ  ํ•จ
    • ์ผ๋ถ€ irc ๋„คํŠธ์›Œํฌ๋Š” ๋ด‡ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•จ
      • ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ๊ฐ ๋‹‰๋„ค์ž„์ด ๋ชจ๋“  ์„œ๋ฒ„์—์„œ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š”
        ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ
      • ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ์—์„œ ๋ด‡์„ ํ—ˆ์šฉํ•˜๋ฉด ์ž๊ธˆ์„ ์กฐ๋‹ฌํ•ด์•ผ ํ•˜๋Š”
        ์ƒ๋‹นํ•œ ์–‘์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ netsplit์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Œ
  • irc bot์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ

    • ์ฑ„๋„ ๊ถŒํ•œ ๊ด€๋ฆฌ
    • ์ฑ„๋„์— ๊ฒŒ์‹œ๋œ ๋‚ด์šฉ ๋กœ๊น…
    • ์š”์ฒญ ์‹œ ์ •๋ณด ์ œ๊ณต
      • ์˜ค๋Š˜์˜ ๋‚ ์”จ
      • ํ˜„์žฌ ์‹œ๊ฐ„
      • ์ˆ˜์‹ ๊ณ„์‚ฐ
      • ๊ตฌ๊ธ€๋ง ๊ฒฐ๊ณผ ํ‘œ์‹œ ๋“ฑ
    • ์ฑ„๋„์˜ ์ƒ์œ„ ํฌ์Šคํ„ฐ์™€ ๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ด์•„์žˆ๋Š” lurkers๋ฅผ ์ถ”์ ํ•˜๋Š” ํ†ต๊ณ„ ์ƒ์„ฑ
    • ํ€ด์ฆˆ, Uno ๋ฐ ๊ธฐํƒ€ ๊ฒŒ์ž„ ํ˜ธ์ŠคํŒ…
    • ํŒŒ์ผ ๋ฐฐํฌ
  • irc bot ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜

    • eggdrop, sopel, irccd, cardinal ๋“ฑ
  • ์ฐธ๊ณ 

๊ตฌํ˜„ ์‚ฌํ•ญ

  • Bot ํด๋ž˜์Šค
    • bot๋„ ํด๋ผ์ด์–ธํŠธ์˜ ํ•œ ์ข…๋ฅ˜์ด๋ฏ€๋กœ
      client ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” Bot ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌ
    • client ํด๋ž˜์Šค ๋ฉค๋ฒ„ ์ค‘ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์€ protected
  • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ์ฒ˜๋Ÿผ ์†Œ์ผ“์— ์ ‘์†ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ 
    irc ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค ์˜ˆ์ •
  • bot ๋ช…๋ น์–ด ์—ญ์‹œ map์—๋‹ค string๊ณผ ๋ฌถ์–ด ์ €์žฅ.
    • bot ๋ช…๋ น์–ด(์ƒ์‹œ ์ถ”๊ฐ€)
      • help
        • bot ์‚ฌ์šฉ๋ฒ• ์†Œ๊ฐœ
        • bot์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ๋ฆฌ์ŠคํŠธ
      • time
        • ํ˜„์žฌ ์‹œ๊ฐ ์ถœ๋ ฅ
      • date
        • ํ˜„์žฌ ๋‚ ์งœ ์ถœ๋ ฅ
      • coin
        • ๋™์ „ ๋˜์ง€๊ธฐ

์„ค๊ณ„

  • server.run while๋ฌธ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ bot ๊ฐ์ฒด ์ƒ์„ฑ
    • ์—ฌ๊ธฐ์„œ ๋ฐ”๋กœ nickname์„ ์ง€์ •
    • rpl_welcome ๋ฉ”์‹œ์ง€ ๋ณด๋‚ผ ๋•Œ bot ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๋„ ๋ณด๋ƒ„.
  • server.run kqueue ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ for๋ฌธ ๋ฐ–์—์„œ bot ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ
    • bot์˜ m_send_buffer๋ฅผ \r\n ๊ธฐ์ค€์œผ๋กœ ํ•œ ์ค„์”ฉ ์ฝ์–ด๋“ค์—ฌ ์ฒ˜๋ฆฌ
      • server ํด๋ž˜์Šค์˜ m_handle_message ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌ
        • ํ•ด๋‹น ๋ด‡์˜ m_send_buffer๋ฅผ \r\n ๊ธฐ์ค€์œผ๋กœ ์ฝ์–ด
          get_commands()์—๋‹ค Message ๊ฐ์ฒด๋ฅผ pushํ•ด์„œ ๋„ฃ์–ด์คŒ.
      • message ํด๋ž˜์Šค์˜ parse_message ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํŒŒ์‹ฑ
        • prefix, command, parameter
      • parameter๋กœ ๋“ค์–ด์˜จ ๋ช…๋ น์–ด์— ๋งž๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ
        • bot ๋ช…๋ น์–ด ๋ฌธ์ž์—ด๊ณผ ํ•ด๋‹น ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋กœ ๋ฌถ์ธ map ์‚ฌ์šฉ
      • ๊ฐ ๋ช…๋ น์–ด ํ•จ์ˆ˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„
        • ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ผ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด push_message๋กœ ๋ณด๋ƒ„.
        • help, date, time, coin

development ๋ธŒ๋žœ์น˜์—์„œ ํ•ด๋‹น ์ด์Šˆ(#204) ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
๋ธŒ๋žœ์น˜ ์ด๋ฆ„ : 204/dyu/enhancement/Implement_bot_frame

image
https://github.com/ergochat/ergo/blob/2cace0b5a24e7c222374f2cf7412e50460e103b8/docs/MANUAL.md

ergo ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์œ ์ € ๋ชจ๋“œ ํ”Œ๋ž˜๊ทธ ์ค‘์— B๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๊ฑธ๋กœ ๋ด‡์ธ์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.