-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfoad.py
executable file
·3760 lines (3452 loc) · 157 KB
/
foad.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, division, print_function
import argparse
import locale
import random
import sys
import textwrap
del unicode_literals, division, print_function
##
# FOAD: Fucked Off Adversarial Degenerates (Fuck Off And Die)
#
# Copyright © Benjamin D. McGinnes, 2013-2020
# Copyright (C) Ben McGinnes, 2013-2020
# OpenPGP/GPG key: 0x321E4E2373590E5D
#
# https://github.com/adversary-org/foad
#
# Version: 0.8.1.26
#
# BTC: 1NpzDJg2pXjSqCL3XHTcyYaehiBN3kG3Lz
# Licenses: Apache 2.0
#
#
# Requirements:
#
# * Python 3.2 or later (developed with Python 3.4.x)
# * Python modules: argparse, locale, random, sys, textwrap
# * Python 2.7 supported from version 0.8 onward.
#
# Versions up to 0.4.x developed with Python 2.7.x. Conversion to
# Python 3 made from version 0.4.2. Support for any Python 2 series
# was removed from version 0.4.2 through to the end of the 0.7
# releases. Support was restored for Python 2.7 with version 0.8, but
# only checked against 2.7.9 and requires manually editing the first
# line on *nix systems to point to python or python2. It cannot work
# with Python 2.6 or earlier due to the use of argparse (and possibly
# other things).
#
# Previous versions might have worked with Python 3.0 and 3.1 (I don't
# know for sure, I never checked), but with the inclusion of the
# argparse module this is now no longer possible (if it ever was).
#
# If there is any future conflict between the Python 3 requirements
# and Python 2, the development will *always* favour Python 3.
#
#
# Options and notes:
#
# Based on Fuck Off As A Service (FOAAS)
# https://foaas.herokuapp.com/
#
# Includes the same options and many more beyond those.
#
# As the name suggests, most of the output involves the many uses of
# the word "fuck", but some options do not use it. Running the
# unittest will display the output for all options and show which
# options do not use the word "fuck".
#
# The unittest will display the correct output for almost everything.
#
# The "sherlock" option if it is run with "Sherlock" or "Sherlock
# Holmes" as the target will only produce one result normally, but the
# unittest won't pick that up properly. The "random" option, however,
# will give the correct output if it happens to hit that option with
# that target.
#
# The acronyms options also does not behave like the main options,
# instead it uses the the target parameter to look up different
# definitions.
#
# Using the acronym option without a target displays an introduction.
# Using the acronym option with a target not specifically addressed
# displays the list of target parameters which can be used with that
# option. Using any of the listed target parameters will display the
# relevant definition.
#
# There are four options in Latin. The "priapus" options include
# translation in each option and accessed via the --extra flag. The
# "custode", "omnia" and "vvv" options include translations in comments
# in the source code.
#
# There are at least three options which depend on the encoding being
# UTF-8 (those being "custode", "omnia" and "linus"). If the
# copyright symbols peppered throughout the script don't display
# properly then there's a good chance that those options won't either.
#
#
# The script now uses argparse to handle input, which means the order
# of the input types can be switched around since it is the flag which
# determines how the input is initially handled and not the order of
# the arguments. However, it is now essential when using arguments
# with two or more words (e.g. names) to place them in quotation marks
# as in the examples.
#
# Usage: foad.py -f donut -n foo
# foad.py -f outside --name "FirstName LastName"
# foad.py --fuck king --name "FirstName LastName"
# foad.py -n Veronica --fuck chainsaw
# foad.py -f field3 -n Bob -s Kate -e "Some stuff."
#
# The old method of calling the script will still work, but only for
# the argument types available at this point (i.e. --fuck and --name).
# Newer argument types (e.g. --extra and --sender) will not be
# available through the old method. When using this old method the
# order in which the options are specified is important.
#
# Old Usage: foad.py donut foo
# foad.py outside "FirstName LastName"
# foad.py king FirstName LastName
#
# Old X-Chat/IRC usage: /exec -o foad.py donut foo
# /exec -o foad.py outside "FirstName LastName"
# /exec -o foad.py king FirstName LastName
#
# Calling foad.py in other Python scripts (e.g. Twython for Twitter)
# should be performed with the subprocess module. Methods for doing
# so are left as an exercise to the reader.
#
# If foad.py is added to site-packages, further help can be obtained
# with pydoc3 (or by running that command in the same directory as the
# script).
#
# Python Documentation help command: pydoc3 foad
# Command line help and hints: foad.py -h
#
##
__author__ = "Ben McGinnes <[email protected]>"
__copyrightu__ = "Copyright © Benjamin D. McGinnes, 2013-2020"
__copyrighta__ = "Copyright (C) Benjamin D. McGinnes, 2013-2020"
__title__ = "FOAD: Fucked Off Adversarial Degenerates (Fuck Off And Die)"
__stitle__ = "FOAD"
__license__ = "Apache 2.0"
__version__ = "0.8.1.26"
__bitcoin__ = "1NpzDJg2pXjSqCL3XHTcyYaehiBN3kG3Lz"
__openpgp__ = "0x321E4E2373590E5D"
__openpgp_fpr__ = "DB4724E6FA4286C92B4E55C4321E4E2373590E5D"
__openpgp_key__ = "0x321E4E2373590E5D"
if locale.getlocale()[1] == "UTF-8":
__copyright__ = __copyrightu__
elif locale.getdefaultlocale()[1] == "UTF-8":
__copyright__ = __copyrightu__
elif locale.getpreferredencoding() == "UTF-8":
__copyright__ = __copyrightu__
else:
try:
__copyright__ = __copyrightu__
except locale.Error:
__copyright__ = __copyrighta__
about = """
{0}
Version {1}
{2}
License: {3}
For instructions run: {4} -h
To list all options run: {4} -O .
To display the version and exit run: {4} -V .
Contact: {5} {6}
OpenPGP: {7}
Bitcoin: {8}
""".format(__title__, __version__, __copyright__, __license__, sys.argv[0],
__author__, __openpgp__, __openpgp_fpr__, __bitcoin__)
version = "{0} ({1}) version {2}".format(__stitle__, sys.argv[0], __version__)
lx = len(sys.argv)
if lx == 2 and sys.argv[1].startswith("-") is False:
sys.argv.insert(1, "-f")
elif lx == 3 and sys.argv[1].startswith(
"-") is False and sys.argv[2].startswith("-") is False:
sax = []
sax.append(sys.argv[0])
sax.append("-f")
sax.append(sys.argv[1])
sax.append("-n")
sax.append(sys.argv[2])
sys.argv = sax
elif lx >= 4 and sys.argv[1].startswith(
"-") is False and sys.argv[2].startswith("-") is False:
sax = []
sax.append(sys.argv[0])
sax.append("-f")
sax.append(sys.argv[1])
sax.append("-n")
sax.append(" ".join(sys.argv[2:lx]))
sys.argv = sax
parser = argparse.ArgumentParser(
prog="foad.py",
formatter_class=argparse.RawDescriptionHelpFormatter,
description=__title__,
epilog=textwrap.dedent("""\
You MUST place any parameter of more than one word in
quotation marks.
Can only be used with the old calling method with the
equivalent of -f and -n. If additional parameters are used
(e.g. --extra or --sender), then the current method MUST be
used.
For more help run: pydoc3 foad
https://github.com/adversary-org/foad
Bitcoin: {0}
{1}
{2}
""".format(__bitcoin__, version, __copyright__)))
parser.add_argument(
"-f",
"--fuck",
help=
"One word, indicates type of fuck to give, run foad.py -f list_options to see possible flags.",
action="store",
required=False)
parser.add_argument(
"-n",
"--name",
help="Name of target, more than one word must be in quotation marks.",
action="store",
required=False)
parser.add_argument(
"-s",
"--sender",
help=
"Used to specify the sender, usually within the context of some particular phrase, more than one word must be in quotation marks.",
action="store",
required=False)
parser.add_argument(
"-r",
"--relay",
help=
"Used to specify a third party to whom a message is to be delivered to in order to pass message to the target.",
action="store",
required=False)
parser.add_argument(
"-e",
"--extra",
help=
"Additional comment to insert into output, more than one word must be in quotation marks. Used to enhance an existing response rather than append text (use -a/--append for that).",
action="store",
required=False)
parser.add_argument(
"-a",
"--append",
help="Additional comment to append to output. Now works with all options.",
action="store",
required=False)
parser.add_argument(
"-p",
"--prepend",
help=
"Additional comment to prepend before the output. Now works with all options.",
action="store",
required=False)
# parser.add_argument("-o", "--output", help="Writes output to the specified file instead of stdout.", action="store", required=False)
parser.add_argument(
"-O",
"--options",
help=
"Lists the explicit variations (the same as: -f list_options), will accept any argument to activate.",
action="store",
required=False)
parser.add_argument(
"-V",
"--version",
help="Print the version number.",
action="store",
required=False)
# This, in conjunction with lx above is what allows the old style
# usage to continue working:
if len(sys.argv) > lx:
la = len(sys.argv)
else:
la = lx
sa = []
for a in sys.argv:
if a.startswith("-") is False: # input can't begin with a hyphen anyway.
sa.append(a)
l = len(sa)
args = parser.parse_args()
if args.fuck is None:
wtf = ""
else:
wtf = args.fuck.lower()
wtfz = args.fuck
if args.name is None:
target = ""
else:
target = args.name
if args.sender is None:
sender = ""
else:
sender = args.sender
if args.extra is None:
extra = ""
else:
extra = args.extra
if args.relay is None:
relay = ""
else:
relay = args.relay
if args.append is None:
append = ""
else:
append = args.append
if args.prepend is None:
prepend = ""
else:
prepend = args.prepend
if args.options is None:
options = ""
#elif sys.argv[1] == "\-O" or "\--options" and args.options is None:
# options = "opt"
else:
options = args.options
if args.version is None:
version = ""
#elif sys.argv[1] == "-V" or "--version" and args.version is None:
# version = "ver"
else:
version = args.version
lt = len(target)
ls = len(sender)
le = len(extra)
lR = len(relay) # lr is already used for part of the random calls.
lA = len(append) # la is already used for all of sys.argv.
lP = len(prepend) # I think lp is used for something else as well.
lO = len(options)
lV = len(version)
class fuck:
def a(self):
if lt == 0 and le == 0:
msg = "Fuckin' A!"
elif lt > 0 and le == 0:
msg = "{0}, fuckin' A!".format(target)
return msg
def abortion(self):
if lt == 0 and le == 0 and ls == 0:
msg = "You should have been aborted!"
elif lt > 0 and le == 0 and ls == 0:
msg = "{0}, you should have been aborted!".format(target)
elif lt == 0 and le > 0 and ls == 0:
msg = "{0} should've been aborted!".format(extra)
elif lt > 0 and le > 0 and ls == 0:
msg = "{0}, you and {1} should've been aborted!".format(
target, extra)
elif lt == 0 and le == 0 and ls > 0 and sender == "retro":
msg = "You should be retroactively aborted!"
elif lt > 0 and le == 0 and ls > 0 and sender == "retro":
msg = "{0}, you should be retroactively aborted!".format(target)
elif lt == 0 and le > 0 and ls > 0 and sender == "retro":
msg = "{0} should be retroactively aborted!".format(extra)
elif lt > 1 and le > 0 and ls > 0 and sender == "retro":
msg = "{0}, you and {1} should be retroactively aborted!".format(
target, extra)
elif lt == 0 and le == 0 and ls > 0 and sender == "candid":
msg = "Not only should you have been aborted, but you're a candidate for retroactive abortion!"
elif lt > 0 and le == 0 and ls > 0 and sender == "candid":
msg = "Not only should you have been aborted, {0}, but you're a candidate for retroactive abortion!".format(target)
elif lt == 0 and le > 0 and ls > 0 and sender == "candid":
msg = "Not only should {0} have been aborted, but they're a candidate for retroactive abortion!".format(extra)
elif lt > 0 and le > 0 and ls > 0 and sender == "candid":
msg = "{0}, not only should you and {1} have been aborted, you're candidates for retroactive abortion!".format(target, extra)
return msg
def about(self):
if lt == 0:
msg = textwrap.fill("Messages and other information to be displayed interactively. As with the acronym option, the target parameters are used to call each message. A non-existent target parameter will produce a list of available options.", 72)
elif target.lower() == "adversary":
msg = "Organised Adversary"
elif target.lower() == "atitle":
msg = __title__
elif target.lower() == "author":
msg = __author__
elif target.lower() == "bitcoin":
msg = __bitcoin__
elif target.lower() == "contact":
msg = "See the following 'foad.py about' parameters: email, gpg key, irc and domain."
elif target.lower() == "copyright":
msg = __copyright__
elif target.lower() == "domain":
msg = "http://www.adversary.org/"
elif target.lower() == "donations":
msg = "If you find this script useful, please donate to the Bitcoin address included."
elif target.lower() == "email":
msg = "[email protected]"
elif target.lower() == "encryption":
msg = "My GPG key is included for a reason, we should all be encrypting everything all the time."
elif target.lower() in "gpg key":
msg = __openpgp_key__
elif target.lower() in "fpr":
msg = __openpgp_fpr__
elif target.lower() in "fingerprint":
msg = __openpgp_fpr__
elif target.lower() == "irc":
msg = "Hasimir on freenode.net"
elif target.lower() == "options":
msg = "Number of defined options: {0}".format(lc)
elif target.lower() == "pirate":
msg = "http://www.pirateparty.org.au/"
elif target.lower() == "twitter":
msg = "Use this script with the Twython Tools scripts or anything which can call it and post the output."
elif target.lower() in "twython tools":
msg = "https://github.com/adversary-org/twython-tools"
elif target.lower() == "version":
msg = __version__
elif target.lower() == "website":
msg = "https://github.com/adversary-org/foad"
else:
msg = textwrap.fill("Target parameters: adversary, atitle, author, bitcoin, contact, copyright, domain, donations, email, encryption, gpg key, irc, options, pirate, twitter, twython, version, website.", 72)
return msg
def acronym(self):
if lt == 0:
msg = textwrap.fill(
"Acronyms and backronyms; use the target parameter to choose which one. To view the target parameters run: foad.py -f acronym -n x",
72)
elif target.lower() == "fubar":
msg = "FUBAR: Fucked Up Beyond All Recognition"
elif target.lower() == "carnal":
msg = """FUCK: For Unlawful Carnal Knowledge
Actually a backronym and urban myth on the origin of the word fuck."""
elif target.lower() == "bond":
msg = """FUCK: Freddy Uncle Charlie Katie
A backronym used by Ian Fleming to avoid censors in one of the James Bond novels."""
elif target.lower() == "die":
msg = "FOAD: Fuck Off And Die"
elif target.lower() == "right":
msg = "FROAD: Fuck Right Off And Die"
elif target.lower() == "title":
msg = "FOAD: Fucked Off Adversarial Degenerates" # Also a backronym.
elif target.lower() == "figjam":
msg = "FIGJAM: Fuck I'm Good, Just Ask Me"
elif target.lower() == "cunt":
msg = """CUNT: Caring Understanding Nineties Type
A response to SNAG."""
elif target.lower() == "foaas":
msg = """FOAAS: Fuck Off As A Service
The API which led to this script since that API is not consistently
maintained."""
elif target.lower() == "lmfao":
msg = "LMFAO: Laughing My Fucking Arse Off"
elif target.lower() == "snag":
msg = """SNAG: Sensitive New Age Guy
See also: CUNT"""
elif target.lower() == "snafu":
msg = "SNAFU: Situation Normal: All Fucked Up"
else:
msg = textwrap.fill("Target parameters: bond, carnal, cunt, die, figjam, foaas, fubar, lmfao, right, snafu, snag, title.", 72)
return msg
def agree(self):
if lt == 0:
msg = "Abso-fucking-lutely!"
elif lt > 0:
msg = "Abso-fucking-lutely {0}!".format(target)
else:
msg = "Abso-fucking-lutely {0}!".format(target)
return msg
def amaze(self):
if lt == 0:
msg = "That was fucking amazing!"
elif lt > 0 and le == 0:
msg = "{0}, that was fucking amazing!".format(target)
else:
msg = "{0}, that was fucking amazing!".format(target)
return msg
# All the amber options are taken or adapted from _The Chronicles of
# Amber_ by Roger Zelazny. More than one is simply inevitable.
def amber1(self):
if lt == 0 and lR == 0:
msg = "Of all my relations I like sex the best and you the least."
elif lt > 0 and lR == 0:
msg = "Of all my relations I like sex the best and {0} the least.".format(target)
elif lt > 0 and lR > 0:
msg = "{0}, of all my relations I like sex the best and {1} the least.".format(relay, target)
else:
msg = "Of all my relations I like sex the best and {0} the least.".format(target)
return msg
def amber2(self):
# The original quote: "I walked among Shadows, and found a race of furry creatures, dark and clawed and fanged, reasonably manlike, and about as intelligent as a freshman in the high school of your choice—sorry, kids, but what I mean is they were loyal, devoted, honest, and too easily screwed by bastards like me and my brother. I felt like the dee-jay of your choice."
if lt == 0 and ls == 0:
msg = "You're about as intelligent as a freshman in the high school of your choice; sorry, but what I mean is you're loyal, devoted, honest, and too easily screwed over by bastards."
elif lt > 0 and ls == 0: # include is/are in target/name.
msg = "{0} about as intelligent as a freshman in the high school of your choice; loyal, devoted, honest, and too easily screwed over by bastards.".format(target)
elif lt > 0 and ls > 0: # include is/are in target/name.
msg = "{0} about as intelligent as a freshman in the high school of your choice; loyal, devoted, honest, and too easily screwed over by bastards like {1}.".format(target, sender)
return msg
def amber3(self):
if lt == 0 and le == 0:
msg = "Talk is cheap, whiskey costs money."
elif lt > 0 and le == 0:
msg = "Talk is cheap, {0}, whiskey costs money.".format(target)
elif lt == 0 and le > 0:
msg = "Talk is fucking cheap, whiskey costs money."
elif lt > 0 and le > 0:
msg = "Talk is fucking cheap, {0}, whiskey costs money.".format(
target)
return msg
def apple(self):
if lt == 0 and ls == 0:
msg = "No you fucking can't do it your way! We don't give a fuck if it's better, you do it our fucking way or you fuck off!"
elif lt > 0 and ls == 0:
msg = "No {0}, you fucking can't do it your way! We don't give a fuck if it's better, you do it our fucking way or you fuck off!".format(
target)
elif lt > 0 and ls > 0:
msg = "No {0}, you fucking can't do it your way! We don't give a fuck if it's better, you do it our fucking way or you fuck off! -- {1}".format(
target, sender)
else:
msg = "No {0}, you fucking can't do it your way! We don't give a fuck if it's better, you do it our fucking way or you fuck off!".format(
target)
return msg
# From _Drive Angry_ (2011):
def badge(self):
if lt == 0 and le == 0:
msg = "You know what this badge means? Federal Bureau of get the fuck outta my way!"
if lt > 0 and le == 0:
msg = "You know what this badge means, {0}? Federal Bureau of get the fuck outta my way!".format(
target)
if lt > 0 and le > 0:
msg = "You know what this badge means, {0}? {1} of get the fuck outta my way!".format(
target, extra)
else:
msg = "You know what this badge means? Federal Bureau of get the fuck outta my way!"
return msg
def ballmer(self):
if lt == 0 and le == 0 and ls == 0:
msg = "Ballmer Notes: This option requires the first target specified with --name and the second (usually a company or organisation) with --extra (sender optional). For a gender neutral version use ballmerc on --fuck, for a plural version use ballmers on --fuck."
elif lt > 0 and le == 0 and ls == 0:
msg = "Fucking {0} is a fucking pussy. I'm going to bury that guy, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, target)
elif lt > 0 and le > 0 and ls == 0:
msg = "Fucking {0} is a fucking pussy. I'm going to bury that guy, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, extra)
elif lt > 0 and le == 0 and ls > 0:
msg = "Fucking {0} is a fucking pussy. I'm going to bury that guy, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, target, sender)
elif lt > 0 and le > 0 and ls > 0:
msg = "Fucking {0} is a fucking pussy. I'm going to bury that guy, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, extra, sender)
return msg
def ballmerc(self):
if lt == 0 and le == 0 and ls == 0:
msg = "Ballmer Notes: This option requires the first target specified with --name and the second (usually a company or organisation) with --extra (sender optional). This is the gender neutral (and harsher) version, for a plural version on --name use ballmers on --fuck."
elif lt > 0 and le == 0 and ls == 0:
msg = "Fucking {0} is a little fucking bitch. I'm going to bury that cunt, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, target)
elif lt > 0 and le > 0 and ls == 0:
msg = "Fucking {0} is a little fucking bitch. I'm going to bury that cunt, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, extra)
elif lt > 0 and le == 0 and ls > 0:
msg = "Fucking {0} is a little fucking bitch. I'm going to bury that cunt, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, target, sender)
elif lt > 0 and le > 0 and ls > 0:
msg = "Fucking {0} is a little fucking bitch. I'm going to bury that cunt, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, extra, sender)
return msg
def ballmers(self):
if lt == 0 and le == 0 and ls == 0:
msg = "Plural Ballmer Notes: This option requires the first targets specified with --name in quotation marks (e.g. 'name1 and name2' or 'name1, name2 and name3') and the second (usually a company or organisation) with --extra (sender optional)."
elif lt > 0 and le == 0 and ls == 0:
msg = "Fucking {0} are fucking pussies. I'm going to bury those guys, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, target)
elif lt > 0 and le > 0 and ls == 0:
msg = "Fucking {0} are fucking pussies. I'm going to bury those guys, I have done it before and I will do it again. I'm going to fucking kill {1}.".format(
target, extra)
elif lt > 0 and le == 0 and ls > 0:
msg = "Fucking {0} are fucking pussies. I'm going to bury those guys, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, target, sender)
elif lt > 0 and le > 0 and ls > 0:
msg = "Fucking {0} are fucking pussies. I'm going to bury those guys, I have done it before and I will do it again. I'm going to fucking kill {1}. -- {2}".format(
target, extra, sender)
return msg
def bbm(self):
if lt == 0:
msg = "Big bad motherfucker."
elif lt == 0 and ls > 0:
msg = "{0} is a big bad motherfucker.".format(sender)
elif lt > 0 and ls > 0:
msg = "{0}, {1} is a big bad motherfucker.".format(target, sender)
else:
msg = "{0}, {1} is a big bad motherfucker.".format(target, sender)
return msg
def because(self): # wbfu option uses full stops, otherwise the same.
if lt == 0:
msg = "Because fuck you, that's why!"
elif lt > 0:
msg = "Because fuck you, {0}, that's why!".format(target)
return msg
def boomer(self):
if lt == 0 and ls == 0:
msg = "Shut the fuck up, boomer!"
elif lt > 0 and ls == 0:
msg = "{0}, shut the fuck up boomer!".format(target)
elif lt == 0 and ls > 0:
msg = "Shut the fuck up, you fucking boomer!"
elif lt > 0 and ls > 0:
msg = "Shut the fuck up {0}, you fucking boomer!".format(target)
else:
msg = "Shut the fuck up, you fucking boomer!"
return msg
def bus(self):
if lt == 0:
msg = "Christ on a bendy-bus, don't be such a fucking faff-arse."
elif lt > 0:
msg = "Christ on a bendy-bus, {0}, don't be such a fucking faff-arse.".format(
target)
return msg
def bye(self):
if lt == 0:
msg = "Fuckity bye!"
elif lt > 0:
msg = "Fuckity bye {0}!".format(target)
return msg
def caniuse(self):
if lt == 0 and ls == 0 and le == 0:
msg = "Can I Use Notes: This option requires the tool/object be specified with --extra and is a two-parter rolled into one command. Currently requires --name, --extra and --sender."
elif lt > 0 and ls > 0 and le > 0:
msg = """{0}, it's {1} here, can I use {2}? ... Can you use {3}? Fuck no, {4}! You cannot fucking use {5}!""".format(
sender, target, extra, extra, target, extra)
return msg
def cango1(self):
if lt == 0 and ls == 0 and lR == 0:
msg = "They can go and fuck themselves."
elif lt > 0 and ls > 0 and lR == 0:
msg = "Tell {0} that {1} said they can go and fuck themselves.".format(
target, sender)
elif lt > 0 and ls == 0 and lR > 0:
msg = "{0}, tell {1} that they can go and fuck themselves.".format(
relay, target)
elif lt > 0 and ls > 0 and lR > 0:
msg = "{0}, tell {1} that {2} said they can go and fuck themselves.".format(
relay, target, sender)
else:
msg = "{0} can go and fuck themselves.".format(target)
return msg
def cango2(self):
if lt == 0 and ls == 0 and lR == 0:
msg = "He can go and fuck himself."
elif lt > 0 and ls > 0 and lR == 0:
msg = "Tell {0} that {1} said he can go and fuck himself.".format(
target, sender)
elif lt > 0 and ls == 0 and lR > 0:
msg = "{0}, tell {1} that he can go and fuck himself.".format(
relay, target)
elif lt > 0 and ls > 0 and lR > 0:
msg = "{0}, tell {1} that {2} said he can go and fuck himself.".format(
relay, target, sender)
else:
msg = "{0} can go and fuck himself.".format(target)
return msg
def cango3(self):
if lt == 0 and ls == 0 and lR == 0:
msg = "She can go and fuck herself."
elif lt > 0 and ls > 0 and lR == 0:
msg = "Tell {0} that {1} said she can go and fuck herself.".format(
target, sender)
elif lt > 0 and ls == 0 and lR > 0:
msg = "{0}, tell {1} that she can go and fuck herself.".format(
relay, target)
elif lt > 0 and ls > 0 and lR > 0:
msg = "{0}, tell {1} that {2} said she can go and fuck herself.".format(
relay, target, sender)
else:
msg = "{0} can go and fuck herself.".format(target)
return msg
def cbf(self):
if lt == 0:
msg = "I can't be fucked!"
else:
msg = "{0}, I can't be fucked!".format(target)
return msg
def chainsaw(self):
if lt == 0:
msg = "Fuck me gently with a chainsaw. Do I look like Mother Teresa?"
else:
msg = "Fuck me gently with a chainsaw, {0}. Do I look like Mother Teresa?".format(
target)
return msg
def chainsawe(self):
if lt == 0:
msg = "Fuck me gently with a chainsaw! Do I look like Mother Teresa?!"
else:
msg = "Fuck me gently with a chainsaw, {0}! Do I look like Mother Teresa?!".format(
target)
return msg
def chainsaws(self):
if lt == 0:
msg = "Fuck me gently with a chainsaw!"
else:
msg = "Fuck me gently with a chainsaw, {0}!".format(target)
return msg
def cfm(self):
if lt == 0:
msg = "Come fuck me."
else:
msg = "{0}, come fuck me.".format(target)
return msg
def cluster(self):
if lt == 0:
msg = "It's a total cluster-fuck!"
else:
msg = "{0}, it's a total cluster-fuck!".format(target)
return msg
def clustera(self):
if lt == 0:
msg = "It's an almighty cluster-fuck!"
else:
msg = "{0}, it's an almighty cluster-fuck!".format(target)
return msg
def cocksuck(self):
if lt == 0:
msg = "Fuck you, you fucking cocksucker!"
else:
msg = "Fuck you {0}, you fucking cocksucker!".format(target)
return msg
def compleat(self):
if lt == 0 and le == 0:
msg = "I might be a cunt, but I'm not a complete and utter fucking cunt."
elif lt > 0 and le == 0:
msg = "I might be a cunt, {0}, but I'm not a complete and utter fucking cunt.".format(
target)
elif lt == 0 and le > 0:
msg = "I might be a {0}, but I'm not a complete and utter fucking {1}!".format(
extra, extra)
elif lt > 0 and le > 0:
msg = "I might be a {0}, {1}, but I'm not a complete and utter fucking {2}!".format(
extra, target, extra)
return msg
def cracked(self):
if lt == 0:
msg = "You are fucking cracked!"
else:
msg = "{0}, you are fucking cracked!".format(target)
return msg
def cthulhu(self):
if lt == 0 and le == 0:
msg = "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!"
elif lt >= 0 and le > 0 and extra.lower() == "campus":
msg = "Campus crusade for Cthulhu; if your god is dead, blame ours."
elif lt == 0 and le > 0 and extra.lower() == "vote":
msg = "Vote for Cthulhu! Why vote for the lesser of two evils?"
elif lt > 0 and le > 0 and extra.lower() == "vote":
msg = "Cthulhu for {0}! Why vote for the lesser of two evils?".format(
target)
else:
msg = "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!"
return msg
def cunt(self):
if lt == 0:
msg = "Fuck you, you complete and utter fucking cunt!"
else:
msg = "Fuck you {0}, you complete and utter fucking cunt!".format(
target)
return msg
def cunts(self):
if lt == 0:
msg = "Fuck you, you complete and utter fucking cunts!"
else:
msg = "Fuck you {0}, you complete and utter fucking cunts!".format(
target)
return msg
def cuntz(self):
if lt == 0 and le == 0:
msg = "Fuck all those complete and utter fucking cocksuckers and cunts!"
elif lt == 0 and le > 0:
msg = "Fuck them, they're all complete and utter fucking cocksuckers and cunts!".format(
target)
elif lt > 0 and le == 0:
msg = "Fuck {0}, they're all complete and utter fucking cunts!".format(
target)
else:
msg = "Fuck {0}, they're all complete and utter fucking cocksuckers and cunts!".format(
target)
return msg
def custode(self):
if lt == 0 and le == 0:
msg = "Sed quis custodiet ipsos futūtor?"
elif lt > 0 and le == 0:
msg = "Sed quis custodiet ipsos futūtor, {0}?".format(target)
elif lt == 0 and le > 0:
msg = "Who will guard the fuckers?"
elif lt > 0 and le > 0:
msg = "Who will guard the fuckers, {0}?".format(target)
else:
msg = "Sed quis custodiet ipsos futūtor?!"
return msg
def damage(self):
if lt == 0 and le == 0 and lR == 0:
msg = "What is your fucking damage?"
elif lt == 0 and le > 0 and lR == 0:
msg = "What is {0} fucking damage?".format(extra)
elif lt > 0 and le == 0 and lR == 0:
msg = "{0}, what is your fucking damage?".format(target)
elif lt > 0 and le > 0 and lR == 0:
msg = "{0}, what is {1} fucking damage?".format(target, extra)
elif lt > 0 and le == 0 and lR > 0:
msg = "{0}, with {1}, what is their fucking damage?".format(
relay, target)
elif lt > 0 and le > 0 and lR > 0:
msg = "{0}, with {1}, what is {2} fucking damage?".format(
relay, target, extra)
else:
msg = "What is your fucking damage?"
return msg
def deadwood(self):
if lt == 0:
msg = "You fucking cocksucker!"
else:
msg = "{0}, you're a fucking cocksucker!".format(target)
return msg
def denial(self):
if lt == 0:
msg = "I didn't fucking do it!"
else:
msg = "{0}, I didn't fucking do it!".format(target)
return msg
def diabetes(self):
if lt == 0:
msg = "I'd love to stop and chat to you but I'd rather have type 2 diabetes."
elif lt > 0:
msg = "I'd love to stop and chat to you, {0}, but I'd rather have type 2 diabetes.".format(
target)
return msg
def dilligaf(self):
if lt == 0 and le == 0:
msg = "Do I look like I give a fuck?"
elif lt > 0 and le == 0:
msg = "Do I look like I give a fuck, {0}?".format(target)
elif lt == 0 and le > 0:
msg = "Do I look like I give a fuck?!"
elif lt > 0 and le > 0:
msg = "Do I look like I give a fuck, {0}?!".format(target)
else:
msg = "Do I look like I give a fuck?!"
return msg
def disbelief(self):
if lt == 0:
msg = "Un-fucking-believable!"
else:
msg = "Un-fucking-believable {0}!".format(target)
return msg
def does(self):
if lt == 0 and le == 0:
msg = "Does it look like I give a fuck?"
elif lt > 0 and le ==0:
msg = "{0}, does it look like I give a fuck?".format(target)
elif lt == 0 and le > 0:
msg = "Does it look like I give a fuck?!"
elif lt > 0 and le > 0:
msg = "{0}, does it look like I give a fuck?!".format(target)
else:
msg = "Does it look like I give a fuck?!"
return msg
def donut(self):
if lt == 0:
msg = "Go and take a flying fuck at a rolling donut."
else:
msg = "{0}, go and take a flying fuck at a rolling donut.".format(
target)
return msg
def doodle(self):
msg = "Fuck-a-doodle-doo!"
return msg
def dorothy(self):
if lt == 0:
msg = "Too fucking busy and vice versa." # Dorothy Parker
else:
msg = "{0}, I'm too fucking busy and vice versa.".format(target)
return msg
def duck(self):
if lt == 0:
msg = "Fuck a duck!"
else:
msg = "{0}, fuck a duck!".format(target)
return msg
def english(self):
if lt == 0:
msg = "English motherfucker! Do you speak it?!"
else:
msg = "English motherfucker! Do you speak it, {0}?!".format(
target)
return msg
def every1(self):
if lt == 0:
msg = "Everyone's fucked!"
else:
msg = "{0}, everyone's fucked!".format(target)
return msg
def every2(self):
if lt == 0:
msg = "Everything's fucked!"
else:
msg = "{0}, everything's fucked!".format(target)
return msg
def exorcist(self):
if lt == 0:
msg = "Your mother sucks cocks in Hell!"
else:
msg = "Your mother sucks cocks in Hell, {0}!".format(target)
return msg
def fascinating(self):
if lt == 0:
msg = "Fascinating story, in what chapter do you shut the fuck up?"
else:
msg = "Fascinating story, {0}, in what chapter do you shut the fuck up?".format(
target)
return msg
def fascist(self): # sender and relay used in non-standard ways.
if lt == 0 and ls == 0 and lR == 0 and le == 0:
msg = "Fuck off, I don't speak fascist."
elif lt > 0 and ls == 0 and lR == 0 and le == 0:
msg = "Fuck off {0}, I don't speak fascist.".format(target)
elif lt == 0 and ls > 0 and lR == 0 and le == 0:
msg = "I'm sorry, I don't speak fascist."