ilr.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. * irc log recorder
  3. * irc bot to Watching Everything that happens in the irc channel and record it in log and its have web server To enable users to access the logs from Web Browser and telnet
  4. * Copyright (c) 2016 ali abdul ghani <blade.vp2020@gmail.com>
  5. * This Program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. * This Program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. * You should have received a copy of the GNU General Public License
  14. * along with this library. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. package main
  17. import (
  18. "encoding/json"
  19. "github.com/thoj/go-ircevent"
  20. "fmt"
  21. "time"
  22. "os"
  23. "net/http"
  24. "io"
  25. "io/ioutil"
  26. "log"
  27. )
  28. type CONFIG struct {
  29. Title string
  30. Url string
  31. Port string
  32. Server string
  33. Name string
  34. User string
  35. Password string
  36. RoomName string
  37. }
  38. func copy(src, dst string) (err error) {
  39. in, err := os.Open(src)
  40. if err != nil {
  41. return
  42. }
  43. defer in.Close()
  44. out, err := os.Create(dst)
  45. if err != nil {
  46. log.Fatal(err)
  47. }
  48. defer func() {
  49. cerr := out.Close()
  50. if err == nil {
  51. err = cerr
  52. }
  53. }()
  54. if _, err = io.Copy(out, in); err != nil {
  55. return
  56. }
  57. err = out.Sync()
  58. return
  59. }
  60. func handler(w http.ResponseWriter, r *http.Request) {
  61. copy("/var/log/irclog.txt", "temp.txt")
  62. file, err := os.Open("temp.txt")
  63. if err != nil {
  64. log.Fatal(err)
  65. }
  66. data, err := ioutil.ReadAll(file)
  67. if err != nil {
  68. log.Fatal(err)
  69. }
  70. s := string(data)
  71. fmt.Fprintf(w,s)
  72. file.Close()
  73. os.Remove("temp.txt")
  74. }
  75. func server(Url, Port string) {
  76. http.HandleFunc(Url, handler)
  77. http.ListenAndServe(Port, nil)
  78. }
  79. func main() {
  80. file, err := os.Open("/etc/ircconfig.txt")
  81. if err != nil {
  82. log.Fatal(err)
  83. }
  84. var all CONFIG
  85. data, err := ioutil.ReadAll(file)
  86. if err != nil {
  87. log.Fatal(err)
  88. }
  89. rede := json.Unmarshal(data, &all)
  90. if rede != nil {
  91. log.Fatal(rede)
  92. }
  93. f, err := os.Create("/var/log/irclog.txt")
  94. if err != nil {
  95. log.Fatal(err)
  96. }
  97. f.WriteString("<html>\n")
  98. f.WriteString("<title> ")
  99. f.WriteString(all.Title)
  100. f.WriteString(" </title>\n")
  101. go server(all.Url, all.Port)
  102. con := irc.IRC(all.Name, all.User)
  103. con.Password = all.Password
  104. er := con.Connect(all.Server)
  105. if er != nil {
  106. log.Fatal(er)
  107. }
  108. con.AddCallback("001", func (e *irc.Event) {
  109. con.Join(all.RoomName)
  110. })
  111. con.AddCallback("JOIN", func (e *irc.Event) {
  112. f.WriteString("<p> ")
  113. f.WriteString(e.Nick)
  114. f.WriteString(" is joined in ")
  115. f.WriteString(all.RoomName)
  116. f.WriteString(" </p>")
  117. f.WriteString("\n")
  118. })
  119. con.AddCallback("QUIT", func (e *irc.Event) {
  120. f.WriteString("<p> ")
  121. f.WriteString(e.Nick)
  122. f.WriteString(" is Quit in ")
  123. t := time.Now()
  124. f.WriteString(" ")
  125. f.WriteString(t.String())
  126. f.WriteString(" ")
  127. f.WriteString(e.Message())
  128. f.WriteString(" </p>")
  129. f.WriteString("\n")
  130. })
  131. con.AddCallback("QUIT", func (e *irc.Event) {
  132. f.WriteString("<p> ")
  133. f.WriteString(e.Nick)
  134. f.WriteString(" is Quit in ")
  135. t := time.Now()
  136. f.WriteString(" ")
  137. f.WriteString(t.String())
  138. f.WriteString(" ")
  139. f.WriteString(e.Message())
  140. f.WriteString(" </p>")
  141. f.WriteString("\n")
  142. })
  143. con.AddCallback("PRIVMSG", func (e *irc.Event) {
  144. f.WriteString("<p> ")
  145. f.WriteString(e.Nick)
  146. t := time.Now()
  147. f.WriteString(" ")
  148. f.WriteString(t.String())
  149. f.WriteString(" ")
  150. f.WriteString(e.Message())
  151. f.WriteString(" </p>")
  152. f.WriteString("\n")
  153. })
  154. con.Loop()
  155. }