· 8 years ago · Mar 06, 2018, 09:22 PM
1import asyncio
2import json
3
4import codecs
5import os
6import random
7import re
8
9from cloudbot import hook
10from cloudbot.util import textgen
11
12nick_re = re.compile("^[A-Za-z0-9_|.\-\]\[\{\}]*$", re.I)
13
14#
15# https://github.com/CloudBotIRC/CloudBot/tree/master/plugins
16# https://pastebin.com/u/Hack5190
17#
18# Hack5190 (at) gmail.com
19#
20# v1.0 - 6-Mar-2018 - Initial release
21#
22
23locations = ['Cartagena, Colombia', 'Stratford-Upon-Avon, England', 'Frankfurt, Germany', ',Bordeaux, France',
24 'Mantua, Italy', 'Margaret River, Australia', 'Siem Reap, Cambodia', 'Nashville, USA',
25 'Salar de Uyuni, Bolivia', 'Sydney, Australia', 'Warsaw, Poland', 'Whistler (British Columbia), Canada',
26 'Chiloé, Chile', 'Shanghai, China', 'Burgundy, France', 'Rome, Italy', 'Mexico City, Mexico',
27 'Havana, Cuba', 'Stellenbosch, South Africa', 'Indianapolis, USA', 'Miami, USA',
28 'Galapagos, Ecuador', 'Hokkaido, Japan', 'Crete, Greece', 'Playa del Carmen, Mexico',
29 'Azores, Portugal', 'Auckland, New Zealand', 'Hanoi, Vietnam', 'Juneau Alaska, USA',
30 'San Sebastian, Spain', 'Busan, South Korea', 'Athens, Greece', 'Paris, France', 'St. Louis, USA'
31 'London, United Kingdom', 'Stockholm, Sweden', 'Berlin, Germany', 'Antwerp, Belgium,'
32 'Chamonix, France', 'Paris, France', 'St. Moritz, Switzerland', 'Amsterdam, Netherlands',
33 'Lake Placid, USA', 'Los Angeles, USA', 'Berlin, Germany', 'Tokyo, Japan', 'St. Moritz, Switzerland',
34 'London, United Kingdom', 'Oslo, Norway', 'Helsinki, Finland', 'Melbourne, Australia',
35 'Squaw Valley, USA', 'Rome, Italy', 'Innsbruck, Austria', 'Grenoble, France', 'Mexico City, Mexico',
36 'Sapporo, Japan', 'Munich, West Germany', 'Innsbruck, Austria', 'Montreal, Canada']
37
38doings = ['Betting on', 'Watching', 'Learning']
39
40days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
41
42items = ['Aircraft Spotting', 'Cat Painting', 'Airsofting', 'Acting', 'Aeromodeling', 'Animals', 'Archery',
43 'Backgammon', 'Badminton', 'Baseball', 'Base Jumping', 'Basketball', 'Bell Ringing',
44 'Beachcombing', 'Beadwork', 'Beatboxing', 'Belly Dancing', 'World Record Breaking',
45 'Bicycling', 'Bicycle Polo', 'Bird watching', 'Blacksmithing', 'Blogging', 'Boating',
46 'Body Building', 'Bookbinding', 'Bowling', 'Brewing Beer', 'Bridge Building', 'Bringing Food To The Disabled',
47 'Building A House For Habitat For Humanity', 'Building Dollhouses', 'Butterfly Watching',
48 'Button Collecting', 'Cake Decorating', 'Calligraphy', 'Camping', 'Candle Making', 'Canoeing',
49 'Car Racing', 'Casino Gambling', 'Cave Diving', 'Ceramics', 'Cheerleading', 'Chess',
50 'Cigar Smoking', 'Cloud Watching', 'Coin Collecting', 'Washing dildos', 'Collecting Antiques',
51 'Collecting Artwork', 'Collecting Hats', 'Collecting Music Albums', 'Collecting RPM Records',
52 'Collecting Sports Cards', 'Collecting Swords', 'Coloring', 'Computer activities', 'Cooking',
53 'Crochet', 'Cross-Stitch', 'Crossword Puzzles', 'Dancing', 'Darts', 'Dodgeball', 'Dominoes',
54 'Drawing', 'Dumpster Diving', 'Eating out', 'Educational Courses', 'Electronics', 'Embroidery',
55 'Falconry', 'Fencing', 'Fishing', 'Fly Tying', 'Football', 'Four Wheeling', 'Frisbee Golf',
56 'Gardening', 'Garage Saleing', 'Geocaching', 'Ghost Hunting', 'Going to movies', 'Golf',
57 'Go Kart Racing', 'Gunsmithing', 'Gun Collecting', 'Gymnastics', 'Handwriting Analysis',
58 'Hang gliding', 'Hiking', 'Home Brewing', 'Home Repair', 'Horse riding', 'Hot air ballooning',
59 'Hula Hooping', 'Hunting', 'Iceskating', 'Inventing', 'Jewelry Making', 'Jigsaw Puzzles', 'Juggling',
60 'Jump Roping', 'Kayaking', 'Kitchen Chemistry', 'Kite Boarding', 'Knitting', 'Knotting',
61 'Lawn Darts', 'Poker', 'Leathercrafting', 'Legos', 'Letterboxing', 'Lacrosse', 'Macramé', 'Magic',
62 'Martial Arts', 'Matchstick Modeling', 'Meditation', 'Metal Detecting', 'Model Railroading',
63 'Model Rockets', 'Modeling Ships', 'Motorcycles', 'Mountain Biking', 'Mountain Climbing',
64 'Nail Art', 'Needlepoint', 'Origami', 'Painting', 'Paintball', 'Papermaking', 'Papermache',
65 'Parachuting', 'Paragliding', 'Parkour', 'People Watching', 'Photography', 'Piano', 'Pinochle',
66 'Pipe Smoking', 'Pole Dancing', 'Pottery', 'Powerboking', 'Protesting', 'Puppetry', 'Pyrotechnics',
67 'Quilting', 'Racing Pigeons', 'Rafting', 'Rapping', 'R/C Boats', 'R/C Cars', 'R/C Helicopters',
68 'R/C Planes', 'Elderly Porn', 'Relaxing', 'Renaissance Faire', 'Renting movies',
69 'Robotics', 'Rock Balancing', 'Rock Collecting', 'Roleplaying', 'Running', 'Sand Castles',
70 'Scrapbooking', 'Scuba Diving', 'Sewing', 'Shark Fishing', 'Skeet Shooting', 'Skiing',
71 'Shopping', 'Singing In Choir', 'Skateboarding', 'Sketching', 'Sky Diving', 'Sleeping',
72 'Slot Car Racing', 'Snorkeling', 'Snowboarding', 'Soap Making', 'Spelunkering',
73 'Stamp Collecting', 'Storm Chasing', 'Storytelling', 'Surfing', 'Swimming', 'Taxidermy',
74 'Tea Tasting', 'Tennis', 'Tesla Coils', 'Tetris', 'Texting', 'Textiles', 'Tombstone Rubbing',
75 'Train Collecting', 'Train Spotting', 'Traveling', 'Treasure Hunting', 'Trekkie', 'Tutoring Children',
76 'Ultimate Frisbee', 'Urban Exploration', 'Video Games', 'Violin', 'Walking', 'Weightlifting',
77 'Windsurfing', 'Wine Making', 'Woodworking', 'Working In A Food Pantry', 'Working on cars',
78 'Wrestling', 'Writing Music', 'Writing Songs', 'Yoga', 'YoYo', 'Ziplining', 'Zumba']
79
80def is_valid(target):
81 """ Checks if a string is a valid IRC nick. """
82 if nick_re.match(target):
83 return True
84 else:
85 return False
86
87@asyncio.coroutine
88@hook.command
89def where(text, action):
90 """<user> - returns where <user> is located and what they are doing"""
91 user = text.strip()
92
93 if not is_valid(user):
94 return "I can't locate where that user is at."
95
96 location = random.choices(locations)
97 doing = random.choice(doings)
98 item = random.choice(items)
99 day = random.choice(days)
100
101 action("{} was last seen on {} in {} {} {}."
102 .format(user, day, location, doing, item))