antiroachlol/cmd/swarm/main.go

105 lines
13 KiB
Go
Raw Normal View History

2019-08-05 16:57:01 -07:00
package main
import (
"context"
"fmt"
"log"
"math/rand"
"os"
"strconv"
"strings"
2019-10-20 13:08:35 -07:00
"time"
2019-08-05 16:57:01 -07:00
2020-08-15 15:59:04 -07:00
"golang.org/x/net/proxy"
2019-08-05 16:57:01 -07:00
irc "gopkg.in/irc.v3"
)
var insults = []string{"Leopard", "SailfinMolly", "NarwhalMan", "BluejayMan", "GiantCaveSwallow", "GreatHornedOwl", "SnappingTurtleMan", "Wolverine", "GiantAardvark", "SeaLamprey", "GrasshopperMan", "WhitebrowedGibbon", "GiantLouse", "RedwingedBlackbird", "Fairy", "LorikeetMan", "GiantSkunk", "GiantAlligator", "CaveFish", "Mosquito", "GiantFox", "SaltwaterCrocodileMan", "GiantOsprey", "Lion", "WeaselMan", "Human", "Swordfish", "ClownLoach", "DragonflyMan", "GiantMosquito", "SpongeMan", "GiantCopperheadSnake", "GiantBeetle", "KestrelMan", "BullShark", "AardvarkMan", "PeachfacedLovebirdMan", "GiantThrips", "Capybara", "Rutherer", "MaskedLovebirdMan", "KnuckleWorm", "OnehumpedCamelMan", "Deer", "Cassowary", "BaskingShark", "Wombat", "GiantSkink", "GiantMongoose", "EchidnaMan", "ParakeetMan", "HareMan", "BlackcrestedGibbon", "VultureMan", "Slug", "BushmasterMan", "GiantBobcat", "GiganticPanda", "CapybaraMan", "MagmaMan", "SquidMan", "GiantCrab", "ChinchillaMan", "GiantOstrich", "GiantWhiteStork", "GiantDeer", "RedPanda", "Siamang", "Dwarf", "GiantLeopard", "Bobcat", "Duck", "TwohumpedCamelMan", "GiantBeaver", "Troglodyte", "GiantRattlesnake", "RoachMan", "Satyr", "Albatross", "CheetahMan", "SpottedRatfish", "AdderMan", "GrayLangur", "CockatielMan", "GiantMuskox", "GiantKea", "CaveBlob", "GiantWren", "SeaNettleJellyfish", "GiantMoth", "GiantDingo", "SpiderMonkeyMan", "Oyster", "GiantMaskedLovebird", "GiantSaltwaterCrocodile", "GiantKoala", "BrownRecluseSpiderMan", "MoonSnailMan", "GiantMagpie", "FoxSquirrel", "GiantLionTamarin", "Halibut", "Clownfish", "BobcatMan", "Groundhog", "DarkGnome", "GiantCapuchin", "GiantPlatypus", "HamsterMan", "BrownRecluseSpider", "Harpy", "BloodGnat", "Molemarian", "GroundhogMan", "GiantGrayLangur", "Beetle", "GiantChinchilla", "Buzzard", "BlackMamba", "BeakDog", "Magpie", "DesertTortoiseMan", "ChameleonMan", "IguanaMan", "TigerMan", "BarkScorpion", "GiantAlbatross", "GiantTiger", "Guppy", "GiantSnappingTurtle", "Mantis", "Raccoon", "Cardinal", "RhesusMacaque", "RatMan", "GiantOcelot", "GiantGrizzlyBear", "MountainGoatMan", "Carp", "Beaver", "Tiger", "GiantOtter", "ToadMan", "GreatBarracuda", "MonarchButterfly", "Thrips", "SlugMan", "GiantCaveToad", "GreenTreeFrog", "Moghopper", "GiantKingsnake", "KingCobraMan", "SpermWhaleMan", "Capuchin", "PondGrabber", "MooseCow", "Vulture", "RhinocerosMan", "BlackMambaMan", "GiantBat", "GiantAxolotl", "WhitetipReefShark", "GiantOrca", "Louse", "GrayLangurMan", "Snail", "Tapir", "Herring", "Nautilus", "SeaOtter", "Anole", "SkunkMan", "TwohumpedCamel", "GiantMooseBull", "RedPandaMan", "Damselfly", "Orca", "FlyingSquirrel", "KoalaMan", "GreenDevourer", "WildBoar", "Ibex", "GiantLion", "SeaSerpent", "ReptileMan", "LizardMan", "GiantNarwhal", "GiantMandrill", "Perch", "Oriole", "Hamster", "GiantRat", "GiantRaven", "Wagon", "GiantLizard", "GiantCougar", "Axolotl", "GiantWeasel", "WrenMan", "Creature", "GiantCardinal", "Kobold", "GiantEarthworm", "Cougar", "SnowyOwl", "BarnOwlMan", "PuffinMan", "GiantCoyote", "Hake", "GiantNautilus", "HornbillMan", "Bilou", "LeopardSealMan", "GreyParrotMan", "Unicorn", "GiantOpossum", "Stingray", "Bat", "Kangaroo", "GiantMooseCow", "PurringMaggot", "Impala", "CaveFloater", "Horse", "SwanMan", "Gazelle", "FoulBlendec", "LouseMan", "Elk", "Llama", "PorcupineMan", "PeregrineFalcon", "Lorikeet", "NakedMoleDog", "CaveSpider", "MagpieMan", "CrabMan", "GiantGilaMonster", "GiantCapybara", "Lizard", "HoaryMarmotMan", "WolfMan", "Kingsnake", "CapuchinMan", "GiantAnaconda", "GiantHornbill", "GiantToad", "NautilusMan", "GiantGraySquirrel", "TapirMan", "GiantSnowyOwl", "Bushtit", "GiantWalrus", "GiantOriole", "GiantParakeet", "HoneyBadger", "Cyclops", "SpinyDogfish", "Coati", "GiantRedSquirrel", "WhitespottedPuffer", "OspreyMan", "MothMan", "Chimpanzee", "Mink", "Walrus", "Tigerfish", "GiantDesertTortoise", "DeerMan", "BlueJay", "Sole", "Cat", "ElkMan", "Cow", "IceWolf", "Fly", "Crow", "BatRay", "MagmaCrab", "Angelshark", "Anchovy", "MonarchButterflyMan", "Bonobo", "BarnOwl", "GiganticTortoise", "Seahorse", "Badger", "GilaMonsterMan", "Hydra",
var s = rand.NewSource(time.Now().UnixNano()) // initialize global pseudo random generator
var r = rand.New(s)
var channel string
var victim string
func HandleRequest(ctx context.Context) (string, error) {
// So i was too lazy to get rid of the boilerplate
// Set up IRC connection
server := os.Getenv("IRC_SERVER")
if server == "" {
log.Fatal("Set IRC_SERVER!")
}
channel = os.Getenv("IRC_CHANNEL")
if channel == "" {
log.Fatal("Set IRC_CHANNEL!")
}
victim = os.Getenv("IRC_VICTIM")
if victim == "" {
log.Fatal("Set IRC_VICTIM!")
}
2020-08-15 15:59:04 -07:00
dialer := proxy.FromEnvironment()
conn, err := dialer.Dial("tcp", server)
2019-08-05 16:57:01 -07:00
if err != nil {
log.Fatal(err)
}
hostname, _ := os.Hostname()
config := irc.ClientConfig{
Nick: insults[r.Intn(len(insults))],
User: hostname,
2019-10-20 13:08:35 -07:00
Name: "dabbing on " + victim,
2019-08-05 16:57:01 -07:00
Handler: irc.HandlerFunc(handleIRCCon), // See below for callback
}
client := irc.NewClient(conn, config)
err = client.Run()
return fmt.Sprintf("i died"), err
}
func handleIRCCon(c *irc.Client, m *irc.Message) {
sent := 0
// Only one reader, prob not necessary
// Handle connection established
if m.Command == "001" {
// 001 is welcome event
c.Write("JOIN " + channel)
} else if m.Command == "PRIVMSG" && c.FromChannel(m) {
// Handle chat message to print stats
text := strings.Split(m.Trailing(), " ")
if text[0] == c.CurrentNick()+":" && text[len(text)-1] == "stats" {
c.WriteMessage(&irc.Message{
Command: "PRIVMSG",
Params: []string{
m.Params[0],
"I've sent " + strconv.FormatInt(int64(sent), 10) + " invites to " + victim + " :)",
},
})
} else if text[len(text)-1] == "name" {
nick := insults[r.Intn(len(insults))]
c.Write("NICK " + nick)
} else if text[len(text)-1] == "invite" {
c.Write("INVITE " + victim + " " + channel)
2019-10-20 13:08:35 -07:00
sent++
} else if strings.Contains(m.Trailing(), "greetings") {
c.WriteMessage(&irc.Message{
Command: "PRIVMSG",
Params: []string{
m.Params[0],
victim + ": hi",
},
})
2019-08-05 16:57:01 -07:00
}
}
}
func main() {
ctx, _ := context.WithCancel(context.Background())
ret, err := HandleRequest(ctx)
if err != nil {
log.Fatalln(err)
}
log.Println(ret)
}