· 8 years ago · Apr 26, 2018, 02:54 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# v1.1 - 21-Apr-2018 - Fixed code mistake
22# v1.2 - 21-Apr-2018 - Syntax Improvments
23#
24
25locations = ['Cartagena, Colombia', 'Stratford-Upon-Avon, England', 'Frankfurt, Germany', ',Bordeaux, France',
26 'Mantua, Italy', 'Margaret River, Australia', 'Siem Reap, Cambodia', 'Nashville, USA',
27 'Salar de Uyuni, Bolivia', 'Sydney, Australia', 'Warsaw, Poland', 'Whistler, Canada',
28 'Chiloé, Chile', 'Shanghai, China', 'Burgundy, France', 'Rome, Italy', 'Mexico City, Mexico',
29 'Havana, Cuba', 'Stellenbosch, South Africa', 'Indianapolis, USA', 'Miami, USA',
30 'Galapagos, Ecuador', 'Hokkaido, Japan', 'Crete, Greece', 'Playa del Carmen, Mexico',
31 'Azores, Portugal', 'Auckland, New Zealand', 'Hanoi, Vietnam', 'Juneau Alaska, USA',
32 'San Sebastian, Spain', 'Busan, South Korea', 'Athens, Greece', 'Paris, France', 'St. Louis, USA'
33 'London, United Kingdom', 'Stockholm, Sweden', 'Berlin, Germany', 'Antwerp, Belgium,'
34 'Chamonix, France', 'Paris, France', 'St. Moritz, Switzerland', 'Amsterdam, Netherlands',
35 'Lake Placid, USA', 'Los Angeles, USA', 'Berlin, Germany', 'Tokyo, Japan', 'St. Moritz, Switzerland',
36 'London, United Kingdom', 'Oslo, Norway', 'Helsinki, Finland', 'Melbourne, Australia',
37 'Squaw Valley, USA', 'Rome, Italy', 'Innsbruck, Austria', 'Grenoble, France', 'Sapporo, Japan',
38 'Munich, Germany', 'Montreal, Canada', 'Edmonton, Canada']
39
40days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
41
42doings = ['Betting on', 'Watching', 'Studying']
43
44items = ['Aircraft Spotting', 'Cat Painting', 'Airsofting', 'Acting', 'Aeromodeling', 'Animals',
45 'Backgammon', 'Badminton', 'Baseball', 'Base Jumping', 'Basketball', 'Bell Ringing',
46 'Beachcombing', 'Beadwork', 'Beatboxing', 'Belly Dancing', 'Bull Riding', 'YoYo',
47 'Bicycling', 'Bicycle Polo', 'Bird Watching', 'Blacksmithing', 'Blogging', 'Boating',
48 'Body Building', 'Bookbinding', 'Bowling', 'Beer Brewing', 'Bridge Building',
49 'House Building', 'Dollhouse Building', 'Butterfly Watching', 'Disabled Food Delivery',
50 'Button Collecting', 'Cake Decorating', 'Calligraphy', 'Camping', 'Candle Making', 'Canoeing',
51 'Car Racing', 'Casino Gambling', 'Cave Diving', 'Ceramics', 'Cheerleading', 'Chess',
52 'Cigar Smoking', 'Cloud Watching', 'Coin Collecting', 'Dildo Washing', 'Antique Collecting',
53 'Art Collecting', 'Hat Collecting', 'Vinyl Record Collecting', 'Pyrotechnics', 'Yoga',
54 'Sports Card Collecting', 'Sword Collecting', 'Coloring', 'Computer Hacking', 'Cooking',
55 'Crochet', 'Cross-Stitch', 'Crossword Puzzles', 'Dancing', 'Darts', 'Dodgeball', 'Dominoes',
56 'Drawing', 'Dumpster Diving', 'Eating out', 'Electronic Football', 'Embroidery',
57 'Falconry', 'Fencing', 'Fishing', 'Fly Tying', 'Football', 'Four Wheeling', 'Frisbee Golf',
58 'Gardening', 'Garage Sales', 'Geocaching', 'Ghost Hunting', 'Golf', 'Juggling',
59 'Go Kart Racing', 'Gunsmithing', 'Gun Collecting', 'Gymnastics', 'Handwriting Analysis',
60 'Hang gliding', 'Hiking', 'Home Repair', 'Horse riding', 'Hot air ballooning',
61 'Hula Hooping', 'Hunting', 'Ice Skating', 'Inventing', 'Jewelry Making', 'Jigsaw Puzzles',
62 'Jump Roping', 'Kayaking', 'Kitchen Chemistry', 'Kite Boarding', 'Knitting', 'Knotting',
63 'Lawn Darts', 'Poker', 'Leather Crafting', 'Legos', 'Lacrosse', 'Macramé', 'Magic',
64 'Martial Arts', 'Matchstick Modeling', 'Meditation', 'Metal Detecting', 'Model Railroading',
65 'Model Rockets', 'Model Ships', 'Motorcycles', 'Mountain Biking', 'Mountain Climbing',
66 'Needlepoint', 'Origami', 'Painting', 'Paintball', 'Papermaking', 'Papermache',
67 'Parachuting', 'Paragliding', 'Parkour', 'People Watching', 'Photography', 'Piano', 'Pinochle',
68 'Pipe Smoking', 'Pole Dancing', 'Pottery', 'Powerboking', 'Protesting', 'Puppetry',
69 'Quilting', 'Pigeon Racing', 'Rafting', 'Rapping', 'R/C Boats', 'R/C Cars', 'R/C Helicopters',
70 'R/C Planes', 'Elderly Porn', 'Relaxing', 'Renaissance Faire', 'Ziplining', 'Zumba',
71 'Robotics', 'Rock Balancing', 'Rock Collecting', 'Role playing', 'Running', 'Sand Castles',
72 'Scrapbooking', 'Scuba Diving', 'Sewing', 'Shark Fishing', 'Skeet Shooting', 'Skiing',
73 'Shopping', 'Chior Singing', 'Skateboarding', 'Sketching', 'Sky Diving', 'Sleeping',
74 'Slot Car Racing', 'Snorkeling', 'Snowboarding', 'Soap Making', 'Spelunkering',
75 'Stamp Collecting', 'Storm Chasing', 'Story telling', 'Surfing', 'Swimming', 'Taxidermy',
76 'Tea Tasting', 'Tennis', 'Tesla Coils', 'Tetris', 'Texting', 'Textiles', 'Tombstone Rubbing',
77 'Train Collecting', 'Train Spotting', 'Traveling', 'Treasure Hunting', 'Trekkie',
78 'Ultimate Frisbee', 'Urban Exploration', 'Video Games', 'Violin', 'Walking', 'Weightlifting',
79 'Windsurfing', 'Wine Making', 'Woodworking', 'Car Repairs', 'Archery', 'Children Tutoring',
80 'Wrestling', 'Music Writing', 'Snong Writing']
81
82def is_valid(target):
83 """ Checks if a string is a valid IRC nick. """
84 if nick_re.match(target):
85 return True
86 else:
87 return False
88
89@asyncio.coroutine
90@hook.command
91def where(text, action):
92 """<user> - returns when and where <user> was last seen and what they were doing"""
93 user = text.strip()
94
95 if not is_valid(user):
96 return "I can't locate that user."
97
98 location = random.choice(locations)
99 doing = random.choice(doings)
100 item = random.choice(items)
101 day = random.choice(days)
102
103 action("{} was last seen in {} on {} {} {}.".format(user, location, day, doing, item))