+ With your bot, we generated you a page, which you can use for promotion: Ticketfrei {{city}} You can change what your users will read there, and adjust it to your
+ needs. You should definitely adjust the Social Media profile links. This is just the default text we
+ suggest:
+
+
+
-
+
Edit your trigger patterns
These words have to be contained in a report.
If none of these expressions is in the report, it will be ignored by the bot.
@@ -74,13 +90,13 @@
-
+
Edit the blacklist
These words are not allowed in reports.
If you encounter spam, you can add more here - the bot will ignore reports which use such words.
@@ -88,7 +104,7 @@
Hat jemand vor kurzem etwas über Kontrolleur*innen gepostet?
-
-
- Wenn ja, dann kauf dir vllt lieber ein Ticket. In Nürnberg haben wir
- die Erfahrung gemacht, dass Kontis normalerweile ungefähr ne Woche
- aktiv sind, ein paar Stunden am Tag. Wenn es also in den letzten
- Stunden einen Bericht gab, pass lieber auf.
-
-
- Wenn nicht, ist es wahrscheinlich kein Problem :)
-
-
-
- Also, wenn du weniger Glück hast, und der erste bist, der einen Kontrolleur
- sieht:
-
-
Was mache ich, wenn ich Kontis sehe?
-
Ganz einfach, du schreibst es den anderen. Das geht entweder
-
-
- mit Mastodon
-
-
- über Twitter
-
-
- oder per Mail, falls ihr kein Social Media habt.
-
-
-
- Schreibe einfach einen Toot oder einen Tweet, der den Bot mentioned, und
- gib an
-
-
-
- Wo du die Kontis gesehen hast
-
-
- Welche Linie sie benutzen und in welche Richtung sie fahren.
-
-
-
Zum Beispiel so:
-
-
-
-
-
- Der Bot wird die Nachricht dann weiterverbreiten, auch zu den anderen
- Netzwerken. Dann können andere Leute das lesen und sicher vor Kontis sein.
-
-
-
Danke, dass du mithilfst, öffentlichen Verkehr für alle sicherzustellen!
-
-
- Kann ich darauf vertrauen, was random stranger from the Internet mir da
- erzählen?
-
-
Aber natürlich! Wir haben Katzenbilder!
-
-
- Glaubt besser nicht, wenn jemand postet, dass die Luft da und da gerade
- rein ist. Das ist vielleicht sogar gut gemeint - aber klar könnte die VAG
- sich hinsetzen und einfach lauter Falschmeldungen posten.
-
-
- Aber Falschmeldungen darüber, dass gerade Kontis i-wo unterwegs sind?
- Das macht keinen Sinn. Im schlimmsten Fall kauft jmd mal eine Fahrkarte
- mehr - aber kann sonst immer schwarz fahren.
-
- Also ja - es macht Sinn, uns zu vertrauen, wenn wir sagen, wo gerade Kontis
- sind.
-
-
Was ist Mastodon und warum sollte ich es benutzen?
-
- Mastodon ist ein dezentrales soziales Netzwerk - so wie Twitter, nur ohne
- Monopol und Zentralismus. Ihr könnt Kurznachrichten (Toots) über alles
- mögliche schreiben, und euch mit anderen austauschen.
-
-
- Mastodon ist Open Source, Privatsphäre-freundlich und relativ sicher vor
- Zensur.
-
-
- Um Mastodon zu benutzen, könnt ihr euch einen Account zB bei einer dieser
- Websiten besorgen:
-
diff --git a/user.py b/user.py
index b28a370..b96cbb9 100644
--- a/user.py
+++ b/user.py
@@ -28,7 +28,7 @@ class User(object):
@property
def enabled(self):
- db.execute("SELECT enabled FROM user WHERE user_id=?;", (self.uid,))
+ db.execute("SELECT enabled FROM user WHERE id=?;", (self.uid, ))
return bool(db.cur.fetchone()[0])
@enabled.setter
@@ -59,17 +59,35 @@ class User(object):
def is_appropriate(self, report):
db.execute("SELECT pattern FROM triggerpatterns WHERE user_id=?;",
- (self.uid,))
- for pattern, in db.cur.fetchall():
+ (self.uid, ))
+ patterns = db.cur.fetchone()
+ for pattern in patterns.splitlines():
if pattern.search(report.text) is not None:
break
else:
# no pattern matched
return False
+ default_badwords = """
+bitch
+whore
+hitler
+slut
+hure
+jude
+schwuchtel
+fag
+faggot
+nigger
+neger
+schlitz
+ """
db.execute("SELECT word FROM badwords WHERE user_id=?;",
- (self.uid,))
- badwords = [word.lower() for word, in db.cur.fetchall()]
- for word in report.text.lower().split():
+ (self.uid, ))
+ badwords = db.cur.fetchone()
+ for word in report.text.lower().splitlines():
+ if word in badwords:
+ return False
+ for word in default_badwords.splitlines():
if word in badwords:
return False
return True
@@ -174,13 +192,39 @@ class User(object):
db.execute("UPDATE seen_mail SET mail_date = ? WHERE user_id = ?;",
(mail_date, self.uid))
- def get_trigger_words(self, table):
- db.execute("""SELECT words
- FROM ? WHERE user_id = ?;""", (table, self.uid,))
+ def set_trigger_words(self, patterns):
+ db.execute("UPDATE triggerpatterns SET patterns = ? WHERE user_id = ?;",
+ (patterns, self.uid))
+
+ def get_trigger_words(self):
+ db.execute("SELECT patterns FROM triggerpatterns WHERE user_id = ?;",
+ (self.uid,))
+ return db.cur.fetchone()[0]
+
+ def set_badwords(self, words):
+ db.execute("UPDATE badwords SET words = ? WHERE user_id = ?;",
+ (words, self.uid))
+
+ def get_badwords(self):
+ db.execute("SELECT words FROM badwords WHERE user_id = ?;",
+ (self.uid,))
return db.cur.fetchone()[0]
def state(self):
- return dict(foo='bar')
+ # necessary:
+ # - city
+ # - markdown
+ # - goodlist
+ # - blacklist
+ # - logged in with twitter?
+ # - logged in with mastodon?
+ # - enabled?
+ citydict = db.user_facing_properties(self.get_city())
+ return dict(city=citydict['city'],
+ markdown=citydict['markdown'],
+ triggerwords=self.get_trigger_words(),
+ badwords=self.get_badwords(),
+ enabled=self.enabled)
def save_request_token(self, token):
db.execute("""INSERT INTO
@@ -244,6 +288,105 @@ class User(object):
"VALUES(?, ?, ?, ?);", (self.uid, access_token, instance_id, 1))
db.commit()
+ def set_markdown(self, markdown):
+ db.execute("UPDATE cities SET markdown = ? WHERE user_id = ?;",
+ (markdown, self.uid))
+
def get_city(self):
- db.execute("SELECT city FROM user WHERE id == ?;", (self.uid,))
+ db.execute("SELECT city FROM cities WHERE user_id == ?;", (self.uid, ))
return db.cur.fetchone()[0]
+
+ def set_city(self, city):
+ masto_link = "https://example.mastodon.social/@" + city # get masto_link
+ twit_link = "https://example.twitter.com/" + city # get twit_link
+ mailinglist = city + "@" + config['web']['host']
+ markdown = """# Wie funktioniert Ticketfrei?
+
+Willst du mithelfen, Ticketkontrolleur\*innen zu überwachen?
+Willst du einen Fahrscheinfreien ÖPNV erkämpfen?
+
+## Ist es gerade sicher, schwarz zu fahren?
+
+Schau einfach auf das Profil unseres Bots: """ + twit_link + """
+
+Hat jemand vor kurzem etwas über Kontrolleur\*innen gepostet?
+* Wenn ja, dann kauf dir vllt lieber ein Ticket. In Nürnberg
+ haben wir die Erfahrung gemacht, dass Kontis normalerweile
+ ungefähr ne Woche aktiv sind, ein paar Stunden am Tag. Wenn es
+ also in den letzten Stunden einen Bericht gab, pass lieber
+ auf.
+* Wenn nicht, ist es wahrscheinlich kein Problem :)
+
+Wir können natürlich nicht garantieren, dass es sicher ist,
+also pass trotzdem auf, wer auf dem Bahnsteig steht.
+Aber je mehr Leute mitmachen, desto eher kannst du dir sicher
+sein, dass wir sie finden, bevor sie uns finden.
+
+Also, wenn du weniger Glück hast, und der erste bist, der einen
+Kontrolleur sieht:
+
+## Was mache ich, wenn ich Kontis sehe?
+
+Ganz einfach, du schreibst es den anderen. Das geht entweder
+
+* mit Mastodon [Link zu unserem Profil](""" + masto_link + """)
+* über Twitter: [Link zu unserem Profil](""" + twit_link + """)
+* Oder per Mail an [""" + mailinglist + "](mailto:" + mailinglist + """), wenn
+ ihr kein Social Media benutzen wollt.
+
+Schreibe einfach einen Toot oder einen Tweet, der den Bot
+mentioned, und gib an
+
+* Wo du die Kontis gesehen hast
+* Welche Linie sie benutzen und in welche Richtung sie fahren.
+
+Zum Beispiel so:
+
+![Screenshot of writing a Toot](https://github.com/b3yond/ticketfrei/raw/master/guides/tooting_screenshot.png)
+
+![A toot ready to be shared](https://github.com/b3yond/ticketfrei/raw/master/guides/toot_screenshot.png)
+
+Der Bot wird die Nachricht dann weiterverbreiten, auch zu den
+anderen Netzwerken.
+Dann können andere Leute das lesen und sicher vor Kontis sein.
+
+Danke, dass du mithilfst, öffentlichen Verkehr für alle
+sicherzustellen!
+
+## Kann ich darauf vertrauen, was random stranger from the Internet mir da erzählen?
+
+Aber natürlich! Wir haben Katzenbilder!
+
+![Katzenbilder!](https://lorempixel.com/550/300/cats)
+
+Glaubt besser nicht, wenn jemand postet, dass die Luft da und
+da gerade rein ist.
+Das ist vielleicht sogar gut gemeint - aber klar könnte die
+VAG sich hinsetzen und einfach lauter Falschmeldungen posten.
+
+Aber Falschmeldungen darüber, dass gerade Kontis i-wo unterwegs
+sind?
+Das macht keinen Sinn.
+Im schlimmsten Fall kauft jmd mal eine Fahrkarte mehr - aber
+kann sonst immer schwarz fahren.
+
+Also ja - es macht Sinn, uns zu vertrauen, wenn wir sagen, wo
+gerade Kontis sind.
+
+## Was ist Mastodon und warum sollte ich es benutzen?
+
+Mastodon ist ein dezentrales soziales Netzwerk - so wie
+Twitter, nur ohne Monopol und Zentralismus.
+Ihr könnt Kurznachrichten (Toots) über alles mögliche
+schreiben, und euch mit anderen austauschen.
+
+Mastodon ist Open Source, Privatsphäre-freundlich und relativ
+sicher vor Zensur.
+
+Um Mastodon zu benutzen, besucht diese Seite:
+[https://joinmastodon.org/](https://joinmastodon.org/)
+ """
+ db.execute("""INSERT INTO cities(user_id, city, markdown, masto_link,
+ twit_link) VALUES(?,?,?,?,?)""",
+ (self.uid, city, markdown, masto_link, twit_link))
+ db.commit()