Mercurial > lbo > hg > goe_bot
changeset 29:70822d7d17c5
Implement fortunes
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 10 Dec 2016 13:33:40 +0100 |
parents | be37dbe1c05d |
children | e0ff0aaa6531 |
files | data.sql handlers.go queries.sql scripts/read_csv.sh sql/storage.go sql/todo.go |
diffstat | 6 files changed, 28 insertions(+), 155 deletions(-) [+] |
line wrap: on
line diff
--- a/data.sql Sat Dec 10 12:54:29 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ --- --- PostgreSQL database dump --- - --- Dumped from database version 9.5.5 --- Dumped by pg_dump version 9.5.5 - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET row_security = off; - -SET search_path = public, pg_catalog; - --- --- Data for Name: fortunes; Type: TABLE DATA; Schema: public; Owner: goe_bot --- - -COPY fortunes (id, fortune, used, lang) FROM stdin; -1 Mami, Mami, ich bin jetzt fünfzehn. Wann darf ich mir Tangas und BHs kaufen?' - 'Sei ruhig, Dieter!' 0 de -2 Mami, Mami, da ist eine Frau im Aquarium und schwimmt mit den Haien! ... Mami?' 0 de -3 Mami, Mami, darf ich noch etwas mit Opa schaukeln?' - 'Nein, der bleibt so hängen bis die Polizei kommt.' 0 de -4 Mami, Mami, Opa ist die Treppe runtergefallen!' - 'Ist ja gut, jetzt binde ihm bitte die Schnürsenkel wieder auseinander.' 0 de -5 Mami, Mami, mein Kopf tut weh!' - 'Halt die Klappe und geh weg von der Dartscheibe.' 0 de -6 Mami, Mami, ich hab heute wieder mit Opa gespielt!' – 'Aber Kind, du sollst doch nicht so tief im Sandkasten buddeln!' 0 de -7 Mami, Mami, wie lange muss ich noch unter dem Küchentisch stehen?' - 'Bis nächste Woche, wenn der Schreiner das Tischbein fertig hat.' 0 de -8 ‘Mami, Mami, ich möchte wieder einmal Murmeln spielen.' - 'Kommt nicht in Frage. Opas Glasaugen bleiben im Schrank.' 0 de -9 Mami, Mami, alle sagen, dass ich so große Zähne habe!' – 'Aber Kind, dass stimmt nicht. Mach jetzt schnell den Mund zu, sonst verkratzt du den Boden!' 0 de -10 Mami, Mami, ich will nicht immer im Kreis laufen.' - 'Sei still, sonst nagle ich dir den anderen Fuß auch noch fest!' 0 de -47 Worin liegt der Unterschied zwischen einem Mann und einem Schwein? - Ein Schwein wird nicht nicht zu einem Mann, wenn es betrunken ist. 4 de -48 Warum kann die Hälfte aller Männer nach dem Geschlechtsverkehr nicht einschlafen? Ist doch klar: Weil sie noch nach Hause fahren müssen! 4 de -49 Was ist ein Mann, der 80 % seines IQ verloren hat? Ein Witwer. 4 de -50 Welchen Titel trägt das dünnste Buch der Welt? - Was Männer über Frauen wissen. 4 de -51 Männer haben einen Schwanz und ein Gehirn. Sie haben leider zu wenig Blut, um beides gleichzeitig zu versorgen! 4 de -52 Was ist der unsensibelste Teil am Penis? - Der Mann. 4 de -53 Kind fragt seine Mutter: 'Mama, wo ist denn der Waschlappen?' - Mama: 'Der ist nur mal kurz Zigaretten kaufen!' 4 de -46 Was sagt ein Mann, der bis über die Gürtellinie im Wasser steht? - 'Das geht über meinen Verstand!' 5 de -11 Auch wenn sie unmusikalisch sind, pfeifen Sie drauf. 1 de -12 Was in der Jugend ein Abenteuer war, wird in den späteren Jahren nur noch ein teurer Abend. 1 de -13 Wer den Kern essen will, muss die Nuss knacken. 1 de -14 Einige Menschen träumen von dem grossen Glück, andere von Keksen. 1 de -15 Wenn du glaubst, dass Du eine wertvolle Lebensweisheit auf einem kleinen Zettel in einem 5 Cent Glückskeks findest, hast Du einen an der Waffel. 1 de -16 Glück gleicht durch Höhe aus, was ihm an Länge fehlt. 1 de -17 Es gibt Besserwisser, die niemals begreifen, dass man Recht haben und ein Idiot sein kann. 1 de -18 Abenteuer werden meistens abends teuer. 1 de -19 Wer sich zum Schaf macht, wundert sich, wenn ihn die Wölfe fressen. 1 de -20 Diese Nachricht zerstört sich in 10 Sekunden von selbst! 1 de -21 Geld allein macht nicht unglücklich. 2 de -22 An den Scheidewegen des Lebens stehen keine Wegweiser. 2 de -23 Ein Tag ohne Dich ist wie ein Glückskeks ohne Zettel. 2 de -24 Wer seine Nase hoch trägt, wird leicht daran herum geführt. 2 de -25 Du bist nicht dumm, du denkst nur anders. 2 de -26 Du bildungsresistenter Intelligenzallergiker. 2 de -27 Du hast die Suppe der Weisheit mit einer Gabel gegessen. 2 de -28 Du bist so dünn, bewerb dich doch als Maskottchen für die Welthungerhilfe. 2 de -29 Du bist genau so sinnvoll wie ein Sandkasten in der Sahara. 2 de -30 Du bist zu allem fähig, bist aber für nichts zu gebrauchen. 2 de -31 Du Evolutionsbremse. 3 de -32 Ich habe ein Foto von dir an der Kellertür - So kommen mir keine Ratten ins Haus! 3 de -33 Ich würde mich ja geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet. 3 de -34 Ein Tag ohne dich gleicht einem Monat Urlaub. 3 de -35 Es gibt fast 6 Milliarden Menschen, und ich muss ausgerechnet dir begegnen. 3 de -36 Wenn Blödheit bremsen würde, könntest du dich den ganzen Tag nicht von der Stelle bewegen! 3 de -37 Trau nie den leuchtenden Augen eines Mannes! Es könnte auch die Sonne sein, die durch seinen hohlen Kopf scheint! 3 de -38 Wie nennt man einen gut aussehenden, intelligenten und sensiblen Mann? - Ein Gerücht. 3 de -39 Vier Worte, die das Ego jedes Mannes zerstören: 'Bist du schon drin?' 3 de -40 Der ideale Mann raucht nicht, trinkt nicht, flirtet nicht und: Existiert nicht! 3 de -41 Ein Mann zu seiner Frau: 'Schatzi, ich werde dich zur glücklichsten Frau der Welt machen!' - Daraufhin antwortet sie: 'Ich werde dich vermissen.' 4 de -42 Warum ist ein Mann wie ein Schneesturm? - Keiner weiss wann er kommt, wie viel Zentimeter er mitbringt und wie lange es dauert. 4 de -43 Hey! Hast du schon gehört, dass man vom Masturbieren schwerhörig wird?' - 'Wie bitte?' 4 de -44 Was macht eine Frau morgens mit ihren Arsch? - Sie macht ihm Frühstück und schickt ihn dann zur Arbeit. 4 de -45 Was ist der Unterschied zwischen einer Tomate und einem Mann? - Die Tomate wird reif! 4 de -\. - - --- --- Name: fortunes_id_seq; Type: SEQUENCE SET; Schema: public; Owner: goe_bot --- - -SELECT pg_catalog.setval('fortunes_id_seq', 53, true); - - --- --- Data for Name: quotes; Type: TABLE DATA; Schema: public; Owner: goe_bot --- - -COPY quotes (id, ts, quote, owner, quoted, chat_id) FROM stdin; -1 2016-12-09 21:33:10.528252 Broccolinudeln! Martina Goerlich 0 12345 -2 2016-12-09 21:35:02.72149 Das wäre eine Überlegung wert Bert Bormann 0 12345 -\. - - --- --- Name: quotes_id_seq; Type: SEQUENCE SET; Schema: public; Owner: goe_bot --- - -SELECT pg_catalog.setval('quotes_id_seq', 2, true); - - --- --- Data for Name: reminders; Type: TABLE DATA; Schema: public; Owner: goe_bot --- - -COPY reminders (id, created, due, description, done, chat_id) FROM stdin; -\. - - --- --- Name: reminders_id_seq; Type: SEQUENCE SET; Schema: public; Owner: goe_bot --- - -SELECT pg_catalog.setval('reminders_id_seq', 1, false); - - --- --- Data for Name: todo; Type: TABLE DATA; Schema: public; Owner: goe_bot --- - -COPY todo (id, ts, text, owner, done, chat_id, list) FROM stdin; -1 2016-12-09 21:54:34.988359 todo 1 Lewin Bormann f 12345 -\. - - --- --- Name: todo_id_seq; Type: SEQUENCE SET; Schema: public; Owner: goe_bot --- - -SELECT pg_catalog.setval('todo_id_seq', 1, true); - - --- --- PostgreSQL database dump complete --- -
--- a/handlers.go Sat Dec 10 12:54:29 2016 +0100 +++ b/handlers.go Sat Dec 10 13:33:40 2016 +0100 @@ -32,7 +32,7 @@ var ( handlers = map[string]handler{ echoCmd: {echoHandler, "Anfrage zurücksenden"}, - fortuneCmd: {missingHandler, "Glückskeks"}, + fortuneCmd: {fortuneHandler, "Glückskeks"}, quoteCmd: {missingHandler, "Zitat speichern/abfragen"}, remindCmd: {missingHandler, "Wecker"}, statusCmd: {statusHandler, "Status anfragen"},
--- a/queries.sql Sat Dec 10 12:54:29 2016 +0100 +++ b/queries.sql Sat Dec 10 13:33:40 2016 +0100 @@ -21,5 +21,5 @@ INSERT INTO todos (text, owner, chat_id) VALUES ($0, $1, $2) RETURNING id; -- Select open todo items SELECT id, text, owner FROM todo WHERE NOT done AND chat_id = $0 AND list = '' ORDER BY ts; --- Mark item as done -UPDATE todo SET done = true WHERE id = $0; +-- Mark item as done. Returns '0 rows affected' if marking an already finished list item. +UPDATE todo SET done = true WHERE id = $0 AND NOT done;
--- a/scripts/read_csv.sh Sat Dec 10 12:54:29 2016 +0100 +++ b/scripts/read_csv.sh Sat Dec 10 13:33:40 2016 +0100 @@ -1,3 +1,3 @@ #!/bin/bash -psql -U goe_bot -c "COPY fortunes (fortune) FROM STDIN (FORMAT csv)" +psql -U goe_bot -c "COPY fortunes (fortune) FROM STDIN (FORMAT csv, QUOTE '/', DELIMITER '\\')"
--- a/sql/storage.go Sat Dec 10 12:54:29 2016 +0100 +++ b/sql/storage.go Sat Dec 10 13:33:40 2016 +0100 @@ -38,3 +38,25 @@ func (s *Storage) Todo(chatID uint64) (Todo, error) { return newTodo(s, chatID) } + +func (s *Storage) Fortunes() (Fortunes, error) { + return newFortunes(s) +} + +// Prepare the given queries. Most objects (Todo, Fortunes, ...) require that their queries +// be prepared. +func (s *Storage) prewarm(queries []string) error { + for _, q := range queries { + if _, ok := s.prepared[q]; !ok { + stmt, err := s.db.Prepare(q) + + if err == nil { + s.prepared[q] = stmt + } else { + log.Println("Couldn't prepare:", err) + return err + } + } + } + return nil +}
--- a/sql/todo.go Sat Dec 10 12:54:29 2016 +0100 +++ b/sql/todo.go Sat Dec 10 13:33:40 2016 +0100 @@ -33,23 +33,11 @@ // prepare statements. MUST be called before any further use (usually by the Storage object // that creates the todo object) func (td Todo) prewarm() error { - for _, q := range []string{ + return td.db.prewarm([]string{ insertTodo, selectOpenTodos, markTodoDone, - } { - if _, ok := td.db.prepared[q]; !ok { - stmt, err := td.db.db.Prepare(q) - - if err == nil { - td.db.prepared[q] = stmt - } else { - log.Println("Couldn't prepare:", err) - return err - } - } - } - return nil + }) } func (td Todo) AddTodo(text, owner string) (uint, error) {