Kako izgraditi prijavnu bocu za zastoj s Pythonom (1. dio)

Izgradio sam Slack bot koji automatizira proces obavještavanja članova o zadacima koji su im dodijeljeni u grupi ili timu. Ti bi se zadaci trebali navesti u Google proračunskoj tablici.

Slack bot dobiva podatke iz Googleove proračunske tablice, analizira ih i obavješćuje o kanalu zadataka u grupi na koje se treba prijaviti ili predati određenog datuma. Dodao sam značajku koja omogućuje članu tima korištenje naredbi Slack Slash (npr. Danas / ranti show-zadatak) da zatraži zadatak za određeni dan ili svoje osobne zadatke.

Postoji dosta razumijevanja za sve dijelove koji se sastaju, pa sam mislio da ću dokumentirati postupak i podijeliti svoje iskustvo kako bih pomogao ostalim slakerima i programerima, posebno onima koji žele stvoriti prilagođene Slack botove s gore spomenutim značajkama.

Botovi su zgodni mali pomoćnici koji se druže u vašoj aplikaciji, čekaju naredbe i pronalaze ili stvaraju potrebne stvari. Oni su još jedan način korištenja vaših omiljenih aplikacija bez potrebe za otvaranjem i pokretanje automatiziranih zadataka za vas. Oni su velika nova stvar, temeljni dio najnovijih značajki Slack-a, Facebooka Messengera i Telegrama, a često su previše komplicirani za izgradnju i upotrebu. - Matthew Guay

Na kraju ovog vodiča stvorili bismo zakrpuljeni bot webhook i slijepu naredbu / ranti, koja korisnicima omogućuje primanje obavijesti o zadacima na kanalu i traženje zadataka za sebe odnosno određene dane. Ovaj će vas članak također naučiti osnovama interakcije s Google proračunskom tablicom koristeći gspread python paket.

zahtjevi

Da biste slijedili, potrebno je ispuniti sljedeće zahtjeve:

Alati / Packages

  • Slack tim (za razvoj / testiranje)
  • Slaba API konzola (Bit će vam od velike pomoći pročitati ovdje dokumentaciju o zapuštenom api)
  • Python 3.x (Možda neće raditi ispravno na Python 2.x)
  • VirtualEnv (lokalno instalirati python pakete za projekt bez sukoba s globalnim paketima)
  • Flask (mikrookvir za Python temeljen na Werkzeug-u, Jinja 2 i dobrim namjerama)
  • Uređivač teksta (koristio sam Visual Studio Code, ali počinjem voljeti svoj PyCharm)
  • Heroku (za testiranje naše aplikacije)
  • Google proračunska tablica (možete napraviti kopiju ove proračunske tablice)
  • Google API konzola (za dobivanje računa Google usluge i OAuth2 vjerodajnice)

vještine

  • Upoznavanje s CLI naredbama
  • Osnovne vještine pytona (instalacija paketa i osnovna sintaksa)

Postavljanje našeg spremišta aplikacija.

Počnimo naš radni tijek stvaranjem naše strukture datoteka i postavljanjem osnova za pisanje našeg bot. Slijedite korake navedene u ovom Github Gistu.

Naša struktura datoteka

Stvorit ćemo četiri mape u našoj projektnoj mapi ranije stvorene. Oni uključuju app, config, statički, predloške. U našoj mapi aplikacije napravimo mapu uslužnih programa. Ovo će sadržavati sve naše uslužne programe.

,
├──project
│ ├── app
│ │ ├── __init__.py
│ │ ├── Actions.py
│ │ └── alate
│ │ ├── gappshelper.py
│ │ └── slackhelper.py
│ ├── client_secret.json
│ ├── config
│ │ ├── __init__.py
│ │ └── env.py
│ ├── ranti.py
│ ├── zahtjevi.txt
│ ├── statički
│ ├── predlošci
│ ├── Procfile
│ ├── PROČITAJ.md
│ └── radnik.py
│
└──renv

Izrada fleš aplikacije

Sljedeći korak stvorit ćemo jednostavnu aplikaciju za tikvice koja će služiti našem projektu kako bismo ga mogli ugostiti. U korijenu mape projekta stvorite datoteku koja se zove ranti.py. Ovo će biti naša prijava za prijavu. U njega umetnite sljedeći kôd:

Stvorili ste kompletnu aplikaciju za tikvicu. Naša će aplikacija prema zadanom biti poslužena na luci 5000. Da biste pogledali našu aplikaciju, pokrenite je aplikacijom s pokrenutim tikvicama, a zatim idite na svoj web preglednik http: // localhost: 5000 i trebali biste vidjeti Hello World.

Konfiguracije aplikacija

Postavimo konfiguracije naše aplikacije za različita okruženja. Unutar konfiguracijske mape stvorite dvije datoteke zvane _init_.py i env.py.

Inicijaliziraćemo našu konfiguraciju u _init_.py. Kopirajte i zalijepite sljedeći isječak u datoteku __init__.py.

Iz navedenog nam je potreban naš env.py koji sadrži reference i konfiguracije za različita okruženja za našu aplikaciju. Ti se podaci pohranjuju u našu varijablu okruženja sustava i mogu se pronaći pozivom metode get_env i unošenjem željenog ključa, u ovom slučaju naše app_env.

Kopirajte i zalijepite isječak koda dolje u env.py.

Slaba konfiguracija "Bot User" i konfiguracija API-ja (Auth Key)

Napravimo novu slack aplikaciju kako bismo mogli dobiti slabi API token i testirati svog bot nakon što završimo. Postavite željeno ime za aplikaciju i odaberite željeni razvojni radni prostor - labav tim kojem već pripadate i imate administratorski pristup. Koristit ću „Ranti Bot“ za svoje i izabrati radni prostor Proton slack tima.

labav obrazac za stvaranje aplikacija. NB: Držite nadzornu ploču s otvorenim api-jevima otvorenom za narednih nekoliko koraka.

Zatim biramo "Korisnici Bota" u odjeljku "Značajke". Postavite, zaslonsko ime i zadano korisničko ime za našeg korisnika bota. To omogućava našem botu da razgovara u kanalima, grupama i ima izravne poruke s korisnicima u radnom prostoru. Kliknite na "Add Bot User" (Dodavanje korisnika Bota) da biste spremili promjene. Trebali bismo vidjeti ekran na sljedeći način:

stranica za postavljanje bot korisnika.

Sada odaberite izbornik "Instaliraj aplikaciju" u odjeljku "Postavke". Kliknite na gumb kako biste instalirali aplikaciju u naš radni prostor za razvoj tima. Jednom kada je aplikacija instalirana, trebali bismo vidjeti sljedeći ekran:

Stranica postavki instaliranih aplikacija - Pojedinosti o autentičnosti možete pronaći ovdje.

Kopirajte i spremite i „OAuth Access Token“ i „Bot User OAuth Access Token“. Koristit ćemo ih dalje niz liniju udžbenika.

Postavljanje i konfiguracija Googleova „Sheet” API-ja (Auth Key)

Svi dupliciramo ovaj list, tako da možemo slijediti ovaj vodič. Za programsko čitanje s Googleovog lista potreban je račun usluge i OAuth2 vjerodajnice s Google API konzole.

Stvorit ćemo svoj račun usluge i pribaviti potrebne vjerodajnice slijedeći ove korake u nastavku:

  1. Posjetite Google API konzolu.
  2. Napravite novi projekt. Nazovite ga „Zadatak grupe Proton“
  3. Kliknite Omogući API. Potražite i omogućite API za Google disk.
  4. Stvorite vjerodajnice za web poslužitelj za pristup aplikacijskim podacima.
  5. Dodijelite naziv uslužnom računu i dodijelite mu Projektnu ulogu „Urednika“.
  6. Preuzmite datoteku JSON na svoj sustav.
  7. Kopirajte preuzetu JSON datoteku u direktorij projekta i dodijelite je na client_secret.json
Stvaranje računa usluge. koraci u GIF-u.

Zatim podijelite dokument proračunske tablice s client_email unutar datoteke client_secret.json.

dijeljenje dokumenta proračunske tablice s client_email u datoteci client_secret.json. koraci u GIF-u.

Sada smo ovlašteni za upotrebu slabe API-ja i Google Spreadsheet API-ja.

Sljedeće Python pakete koristit ćemo za sučelje s našim API-jevima,

  1. slackclient - za interakciju s slack API-ima
  2. gspread - za interakciju s API-jevima Google Spreadsheets
  3. oauth2client - za autorizaciju API-ja Google diska pomoću oAuth2.0

Vrijeme je za napraviti još malo kodiranja ...
Započnimo sa stvaranjem našeg pomoćnog klijenta - slackhelper.py i Googleova pomoćnika za proračunske tablice - gappshelper.py. Te će datoteke sadržavati veze s našim API-jem i metodama koje će koristiti naše akcije.

Izradite datoteku gappshelper.py u mapi naše aplikacije / utils. Unutar ove datoteke kopirajte u nju sljedeći isječak.

uvoz gspread
s os uvoznog puta
from config import get_env
iz oauth2client.service_account uvozi ServiceAccountCredentials

Sada kada smo uveli sve potrebne pakete i ovisnosti za ovu datoteku, tada možemo stvoriti našu klasu GappsHelper koja će sadržavati svojstva i metode potrebne za interakciju s našom Google proračunskom tablicom.

U gornjem kôdu stvorili smo __init__ metodu za inicijalizaciju instancije GappsHelperclass-a kad god nam zatreba, sa svojstvima koja su potrebna da instanca klase funkcionira dobro kao što je navedeno u dokumentaciji API-ja google pogona.
Također smo stvorili metodu koja se zove open_sheet koja bi se koristila za otvaranje lista i vraćanje svih zapisa na tom određenom listu. To služi kao zahtjev za dobijanje naše proračunske tablice-google baze podataka.

Sada imamo pristup našem Google listu i možemo dohvatiti podatke s njega. Kako ćemo te podatke proslijediti korisnicima koji su oslabljeni i koji su zatražili za njih pomoću naših narednih naredbi?
Pa ne mislite dalje, mi ćemo kreirati slackhelper.py datoteku u mapi app / utils da zadržimo sva naša svojstva i metode potrebne za interakciju sa Slackom. U datoteci će nam biti potreban paket poznat kao SlackClien, koji je piton omotač za Slack API i našu get_env metodu unutar našeg config modula.

iz slackclient uvoza SlackClient
from config import get_env

Sada napravimo klasu SlackHelper i započnite s stvaranjem naših pomoćnih metoda.

klasa SlackHelper:

   def __init __ (samo):
      self.slack_token = get_env ('SLACK_TOKEN')
      self.slack_client = SlackClient (self.slack_token)
      self.slack_channel = get_env ('SLACK_CHANNEL')

Stvaramo naš konstruktor i definiramo svojstva kao što su slack_token, slack_channel iz naše varijable okoline i slack_client - instanca SlackClient.

Zatim stvaramo ostale metode potrebne za interakciju sa Slackom iz naše aplikacije. Kopirajte i zalijepite isječak koda dolje u datoteku SlackHelper.

Stvorili smo metode post_message, post_message_to_channel, file_upload i user_info metode. Ovdje možemo imati mnogo drugih metoda koje se koriste za interakciju sa Slackom, od dijaloške metode, itd.

Izvedimo malu izmjenu u ulaznoj točki naše aplikacije ranti.py. Sažet ćemo neke funkcionalnosti ovdje u mapu aplikacija.

Zamijenite sadržaj ranti.py gornjim isječkom koda. Uvozimo našu metodu create_app iz mape theapp u __init__.py, a zatim prosljeđujemo u app_env. Tada pozivamo metodu pokretanja u našoj aplikaciji da pokrenemo svoj flaster poslužitelj.

U našoj mapi aplikacija stvorimo __init__.py datoteku. Ovdje ćemo stvoriti našu aplikaciju i upisati našu glavnu rutu za ulazak u aplikaciju. Kopirajte i zalijepite isječak koda ispod.

Ura, sada možemo pokrenuti naš poslužitelj i trebali bismo vidjeti Hello World kad posjetimo URL u pregledniku.

Nastavit ćemo s implementacijom našeg webhook-a i interakcijom naše aplikacije s našim nagnutim naredbama u 2. dijelu ovog vodiča.

Imate li kakvih pitanja? Možete me kontaktirati na Twitteru @jattorize. Također sam na GitHubu s korisničkim imenom jattoabdul.

Vidite nešto pogrešno u ovom postu? Odvojite izvor ovog vodiča na GitHub-u i podnesite zahtjev za povlačenje.

Dio 2 ovog vodiča možete pronaći ovdje

Trebate angažirati vrhunske programere? Pričaj s Andelom da ti pomogne u tome.