resolve conflicts

This commit is contained in:
sp3nx0r 2019-10-03 06:57:55 -05:00
commit 6f4eccb317
37 changed files with 1733 additions and 1456 deletions

10
.DEREK.yml Normal file

@ -0,0 +1,10 @@
maintainers:
- evilsocket
- caquino
- dadav
- justin-p
features:
- comments
- pr_description_required

@ -1,23 +1,52 @@
dist: bionic
language: generic
language: go
go:
- 1.x
env:
global:
- LANG=C
- LC_ALL=C
before_cache:
- mountpoint -q $TRAVIS_BUILD_DIR/tmp/mnt && sudo umount -R $TRAVIS_BUILD_DIR/tmp/mnt
- sudo find $TRAVIS_BUILD_DIR/tmp/ -name '*.img' -delete
- LANG=C
- LC_ALL=C
deploy:
provider: releases
api_key:
secure: "vBUokTv94n8s65STUgTiD6I0Iy8KXbBRvQUrAof8XG+U4ZMsH5PmDTpS+wz+SaxI6o0PRkfyOiPVdARhiKAFnfatG3q9EHllMQwqRR2YIju51A3aCxgEJ5uWDoybwQdipERUMMYwUO/8XZaRRpwFD2bdQBFWkBtQyMcAkrEL8BXckwQQ531oDN2hK5gAiTllqsOswV2idwUlBRU9jOtStzff+UgUYsp/ZebsRodyOYkEB2Ev15yARo2HTXbyZ2icwHPtMbx5zmNUSRtxs9a4hfzaK3m6ctK8qLYYUdQvXub/ruuACapdw4Ez88LY1agTecbZhFYmJzv8oANH1e4VUI4owuHnZCpU6LRutS4wOhglrkOrGo6lSUlJeA+RtQjyjBugjej9DDtDyyIlRU1ZaBF3qWR9N5EXKuquf0olOfmUR67ap1NykE9VUpzkYjkoVRTiPs/e2onM/nRNOvAQcIt75FD13u+Y/DcYQ8r7KpMIu1HNdtbVx8gMeq76bRhP1YdDg2jm+DdJ21KWjf5QHsbyoXDfJzdKlCloLIlAU3EPJhMoXsnNzre0/FXeUl6dfteR1axNS6U7e/vKsQ9rlUFZWIQaeVPjfXmFKblNNVQ5uFrrsB/EGHcJl7IUx5fvcRT5hMMNwC660YxVkBXDbRb5fxMW5/+K0BOi9cP6en8="
skip_cleanup: true
file_glob: true
file: pwnagotchi-*.zip
on:
tags: true
repo: evilsocket/pwnagotchi
branches:
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+[A-Za-z0-9]+?$/
cache:
apt: true
directories:
- tmp/
before_script:
- sudo apt-get -y update
- sudo apt-get -y install qemu-user-static binfmt-support qemu bmap-tools
- sudo update-binfmts --display
- unset GOROOT
script:
- sudo ./scripts/create_sibling.sh -n pwnagotchi -o pwnagotchi.img
- zip -s 2g pwnagotchi.zip pwnagotchi.img
# TODO: deploy!
before_script:
- wget https://download.qemu.org/qemu-4.1.0.tar.xz
- tar xvJf qemu-4.1.0.tar.xz
- cd qemu-4.1.0
- ./configure --target-list=arm-softmmu
- make -j$(nproc)
- sudo make install
- cd $TRAVIS_BUILD_DIR
- sudo apt-get -y update
- sudo apt-get -y install qemu-user-static binfmt-support bmap-tools kpartx
- sudo update-binfmts --display
script:
- sudo make clean
- sudo -E env "PATH=$PATH" make install
- sudo make image -e PWN_HOSTNAME=pwnagotchi VERSION=$TRAVIS_TAG
before_deploy:
# Set up git user name and tag this commit
- git config --local user.name "evilsocket"
- git config --local user.email "evilsocket@gmail.com"
- export TRAVIS_TAG=${TRAVIS_TAG:-$(date +'%Y%m%d%H%M%S')-$(git log --format=%h -1)}
- git tag $TRAVIS_TAG

22
Makefile Normal file

@ -0,0 +1,22 @@
PWN_HOSTNAME=pwnagotchi
PWN_VERSION=master
all: install image clean
install:
curl https://releases.hashicorp.com/packer/1.3.5/packer_1.3.5_linux_amd64.zip -o /tmp/packer.zip
unzip /tmp/packer.zip -d /tmp
mv /tmp/packer /usr/bin/packer
git clone https://github.com/solo-io/packer-builder-arm-image /tmp/packer-builder-arm-image
cd /tmp/packer-builder-arm-image && go get -d ./... && go build
cp /tmp/packer-builder-arm-image/packer-builder-arm-image /usr/bin
image:
cd builder && sudo /usr/bin/packer build pwnagotchi.json
mv builder/output-pwnagotchi/image pwnagotchi-raspbian-lite-$(PWN_VERSION).img
zip pwnagotchi-raspbian-lite-$(PWN_VERSION).zip pwnagotchi-raspbian-lite-$(PWN_VERSION).img
clean:
rm -rf /tmp/packer-builder-arm-image
rm -f pwnagotchi-raspbian-lite.img
rm -rf builder/output-pwnagotchi builder/packer_cache

@ -52,6 +52,24 @@ The supported models are:
- [Pimoroni Inky pHAT](https://shop.pimoroni.com/products/inky-phat)
- [PaPiRus eInk Screen](https://uk.pi-supply.com/products/papirus-zero-epaper-screen-phat-pi-zero)
The only kind of displays supported are the ones listed above, but we are always happy to receive pull requests supporting new displays.
You need to configure the display type in `config.yml` where you can find `ui.display.type`.
One thing to note, not all displays are created equaly, TFT displays for example work similar to an HDMI display, and they are not supported, currently all the displays supported are I2C displays.
### Color and Black & White displays
Some of the supported displays support Black & White and Coloured versions, one common question is regarding refresh speed of said displays.
Color displays have a much slower refresh rate, in some cases it can take up to 15 seconds, if slow refresh rates is something that you want to avoid we advise you to use Black & White displays
### FPS
You can configure the refresh interval of the display on config.yml, we advise to use a slow refresh to not shorten the lifetime of your display.
Another option is to change fps to 0, which will only refresh when changes are made to the screen.
### Software
- Raspbian + [nexmon patches](https://re4son-kernel.com/re4son-pi-kernel/) for monitor mode, or any Linux with a monitor mode enabled interface (if you tune config.yml).
@ -119,6 +137,7 @@ Pwnagotchi is able to speak multiple languages!! Currently supported are:
* greek
* macedonian
* italian
* french
If you want to add a language use the `language.sh` script. If you want to add for example the language **italian** you would type:
@ -151,9 +170,61 @@ Now you can use the `preview.py`-script to preview the changes:
### Plugins
Pwnagotchi has a simple plugins system that you can use to customize your unit and its behaviour. You can place your plugins anywhere
as python files and then edit the `config.yml` file (`main.plugins` value) to point to their containing folder. Check the [plugins folder](https://github.com/evilsocket/pwnagotchi/tree/master/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/) for a list of default
as python files and then edit the `config.yml` file (`main.plugins` value) to point to their containing folder. Check the [plugins folder](https://github.com/evilsocket/pwnagotchi/tree/master/sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/plugins/default/) for a list of default
plugins and all the callbacks that you can define for your own customizations.
Here's as an example the GPS plugin:
```python
__author__ = 'evilsocket@gmail.com'
__version__ = '1.0.0'
__name__ = 'gps'
__license__ = 'GPL3'
__description__ = 'Save GPS coordinates whenever an handshake is captured.'
__enabled__ = True # set to false if you just don't use GPS
import core
import json
import os
device = '/dev/ttyUSB0'
speed = 19200
running = False
def on_loaded():
core.log("GPS plugin loaded for %s" % device)
def on_ready(agent):
global running
if os.path.exists(device):
core.log("enabling GPS bettercap's module for %s" % device)
try:
agent.run('gps off')
except:
pass
agent.run('set gps.device %s' % device)
agent.run('set gps.speed %d' % speed)
agent.run('gps on')
running = True
else:
core.log("no GPS detected")
def on_handshake(agent, filename, access_point, client_station):
if running:
info = agent.session()
gps = info['gps']
gps_filename = filename.replace('.pcap', '.gps.json')
core.log("saving GPS to %s (%s)" % (gps_filename, gps))
with open(gps_filename, 'w+t') as fp:
json.dump(gps, fp)
```
### Random Info
- `hostname` sets the unit name.
@ -167,7 +238,7 @@ the `PARTUUID`s for `rootfs` and `boot` partitions are the same in `/etc/fstab`.
## License
`pwnagotchi` is made with ♥ by [@evilsocket](https://twitter.com/evilsocket) and it's released under the GPL3 license.
`pwnagotchi` is made with ♥ by [@evilsocket](https://twitter.com/evilsocket) and the [amazing dev team](https://github.com/evilsocket/pwnagotchi/graphs/contributors). It's released under the GPL3 license.

33
builder/pwnagotchi.json Normal file

@ -0,0 +1,33 @@
{
"variables": {
"home": "{{env `HOME`}}"
},
"builders": [{
"name": "pwnagotchi",
"type": "arm-image",
"iso_url" : "https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-07-12/2019-07-10-raspbian-buster-lite.zip",
"iso_checksum_type":"sha256",
"iso_checksum":"9e5cf24ce483bb96e7736ea75ca422e3560e7b455eee63dd28f66fa1825db70e",
"last_partition_extra_size" : 3221225472
}],
"provisioners": [
{
"type": "shell",
"inline": [
"sed -i 's/^\\([^#]\\)/#\\1/g' /etc/ld.so.preload",
"apt-get -y update",
"apt-get install -y ansible"
]
},
{
"type":"ansible-local",
"playbook_file": "pwnagotchi.yml"
},
{
"type": "shell",
"inline": [
"sed -i 's/^#\\(.+\\)/\\1/g' /etc/ld.so.preload"
]
}
]
}

306
builder/pwnagotchi.yml Normal file

@ -0,0 +1,306 @@
---
- hosts:
- 127.0.0.1
become: yes
vars:
pwn_hostname: "pwnagotchi"
pwn_version: "master"
tasks:
- name: selected hostname
debug:
msg: "{{ pwn_hostname }}"
- name: build version
debug:
msg: "{{ pwn_version }}"
- name: change hostname
hostname:
name: "{{pwn_hostname}}"
- name: add hostname to /etc/hosts
lineinfile:
dest: /etc/hosts
regexp: '^127\.0\.0\.1[ \t]+localhost'
line: '127.0.0.1 localhost {{pwn_hostname}} {{pwn_hostname}}.local'
state: present
- name: Add re4son-kernel repo key
apt_key:
url: https://re4son-kernel.com/keys/http/archive-key.asc
state: present
- name: Add re4son-kernel repository
apt_repository:
repo: deb http://http.re4son-kernel.com/re4son/ kali-pi main
state: present
- name: update apt package cache
apt:
update_cache: yes
- name: upgrade apt distro
apt:
upgrade: dist
- name: install packages
apt:
name: "{{ packages }}"
state: present
vars:
packages:
- vim
- screen
- golang
- git
- build-essential
- python3-pip
- gawk
- libopenmpi-dev
- libatlas-base-dev
- libjasper-dev
- libqtgui4
- libqt4-test
- libopenjp2-7
- tcpdump
- lsof
- libilmbase23
- libopenexr23
- libgstreamer1.0-0
- libavcodec58
- libavformat58
- libswscale5
- libpcap-dev
- libusb-1.0-0-dev
- libnetfilter-queue-dev
- dphys-swapfile
- kalipi-kernel
- kalipi-bootloader
- kalipi-re4son-firmware
- kalipi-kernel-headers
- libraspberrypi0
- libraspberrypi-dev
- libraspberrypi-doc
- libraspberrypi-bin
- fonts-dejavu
- fonts-dejavu-core
- fonts-dejavu-extra
- name: configure dphys-swapfile
file:
path: /etc/dphys-swapfile
content: "CONF_SWAPSIZE=1024"
- name: disable unecessary services
systemd:
name: "{{services}}"
state: stopped
enabled: no
vars:
services:
- apt-daily.timer
- apt-daily.service
- apt-daily-upgrade.timer
- apt-daily-upgrade.service
- bluetooth.service
- triggerhappy.service
- name: enable dphys-swapfile service
systemd:
name: dphys-swapfile.service
state: started
enabled: yes
- name: build bettercap
command: go get -u github.com/bettercap/bettercap
environment:
GOPATH: /root/go
GOROOT: /usr/lib/go
- name: install bettercap
copy:
src: /root/go/bin/bettercap
dest: /usr/bin/bettercap
mode: 0755
- name: clone bettercap caplets
git:
repo: https://github.com/bettercap/caplets.git
dest: /tmp/caplets
- name: install bettercap caplets
make:
chdir: /tmp/caplets
target: install
- name: clone pwnagotchi repository
git:
repo: https://github.com/evilsocket/pwnagotchi.git
dest: /tmp/pwnagotchi
- name: copy pwnagotchi files to final destination
copy:
src: /tmp/pwnagotchi/sdcard/rootfs/root/pwnagotchi/
dest: /root/pwnagotchi/
mode: preserve
- name: remove pwnagotchi files from temporary repository
file:
path: /tmp/pwnagotchi
state: absent
- name: install python modules
pip:
requirements: /root/pwnagotchi/scripts/requirements.txt
- name: create cpuusage script
copy:
dest: /usr/bin/cpuusage
mode: 0755
content: |
#!/usr/bin/env bash
while true
do
top -b -n1 | awk '/Cpu\(s\)/ { printf("%d %", $2 + $4 + 0.5) }'
sleep 3
done
- name: create memusage script
copy:
dest: /usr/bin/memusage
mode: 0755
content: |
#!/usr/bin/env
free -m | awk '/Mem/ { printf( "%d %", $3 / $2 * 100 + 0.5 ) }'
- name: create monstart script
copy:
dest: /usr/bin/monstart
mode: 0755
content: |
#!/usr/bin/env bash
iw phy phy0 interface add mon0 type monitor && ifconfig mon0 up
- name: create monstop script
copy:
dest: /usr/bin/monstop
mode: 0755
content: |
#!/usr/bin/env bash
ifconfig mon0 down && iw dev mon0 del
- name: configure rc.local
blockinfile:
path: /etc/rc.local
insertbefore: "exit 0"
block: |
if ! /opt/vc/bin/tvservice -s | grep HDMI; then
/opt/vc/bin/tvservice -o
fi
/root/pwnagotchi/scripts/startup.sh &
- name: configure lo interface
blockinfile:
path: /etc/network/interfaces.d/lo-cfg
create: yes
block: |
auto lo
iface lo inet loopback
- name: configure wlan interface
blockinfile:
path: /etc/network/interfaces.d/wlan0-cfg
create: yes
block: |
allow-hotplug wlan0
iface wlan0 inet static
- name: configure usb interface
blockinfile:
path: /etc/network/interfaces.d/usb0-cfg
create: yes
block: |
allow-hotplug usb0
iface usb0 inet static
address 10.0.0.2
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.1
- name: configure eth0 interface (pi2/3/4)
blockinfile:
path: /etc/network/interfaces.d/eth0-cfg
create: yes
block: |
allow-hotplug eth0
iface eth0 inet dhcp
- name: enable ssh on boot
file:
path: /boot/ssh
state: touch
- name: adjust /boot/config.txt
lineinfile:
dest: /boot/config.txt
insertafter: EOF
line: '{{ item }}'
with_items:
- "dtoverlay=dwc2"
- "dtparam=spi=on"
- "dtoverlay=spi1-3cs"
- "dtoverlay=pi3-disable-bt"
- "dtparam=audio=off"
- name: change root partition
replace:
dest: /boot/cmdline.txt
backup: no
regexp: "root=PARTUUID=[a-zA-Z0-9\\-]+"
replace: "root=/dev/mmcblk0p2"
- name: configure /boot/cmdline.txt
lineinfile:
path: /boot/cmdline.txt
backrefs: True
state: present
backup: no
regexp: '(.*)$'
line: '\1 modules-load=dwc2,g_ether'
- name: configure ssh
lineinfile:
dest: /etc/ssh/sshd_config
backup: no
regexp: '#?PermitRootLogin (.*)$'
line: 'PermitRootLogin yes'
- name: configure motd
copy:
dest: /etc/motd
content: "(◕‿‿◕) {{pwn_hostname}} (pwnagotchi-{{pwn_version}})"
- name: clean apt cache
apt:
autoclean: yes
- name: remove dependencies that are no longer required
apt:
autoremove: yes
- name: remove ssh keys
file:
state: absent
path: "{{item}}"
with_items:
- /etc/ssh/ssh_host_rsa_key
- /etc/ssh/ssh_host_rsa_key.pub
- /etc/ssh/ssh_host_dsa_key
- /etc/ssh/ssh_host_dsa_key.pub
- /etc/ssh/ssh_host/ecdsa_key
- /etc/ssh/ssh_host/ecdsa_key.pub
- /etc/ssh/ssh_host_ed25519_key
- /etc/ssh/ssh_host_ed25519_key.pub

57
scripts/changelog.sh Executable file

@ -0,0 +1,57 @@
#!/bin/bash
NEW=()
FIXES=()
MISC=()
echo "@ Fetching remote tags ..."
git fetch --tags >/dev/null
printf "\n\n"
CURTAG=$(git describe --tags --abbrev=0)
OUTPUT=$(git log $CURTAG..HEAD --oneline)
IFS=$'\n' LINES=($OUTPUT)
for LINE in "${LINES[@]}"; do
LINE=$(echo "$LINE" | sed -E "s/^[[:xdigit:]]+\s+//")
if [[ $LINE == *"new:"* ]]; then
LINE=$(echo "$LINE" | sed -E "s/^new: //")
NEW+=("$LINE")
elif [[ $LINE == *"fix:"* ]]; then
LINE=$(echo "$LINE" | sed -E "s/^fix: //")
FIXES+=("$LINE")
elif [[ $LINE != *"i did not bother commenting"* ]] && [[ $LINE != *"Merge "* ]]; then
echo " MISC LINE =$LINE"
LINE=$(echo "$LINE" | sed -E "s/^[a-z]+: //")
MISC+=("$LINE")
fi
done
if [ -n "$NEW" ]; then
echo
echo "**New Features**"
echo
for l in "${NEW[@]}"; do
echo "* $l"
done
fi
if [ -n "$FIXES" ]; then
echo
echo "**Fixes**"
echo
for l in "${FIXES[@]}"; do
echo "* $l"
done
fi
if [ -n "$MISC" ]; then
echo
echo "**Misc**"
echo
for l in "${MISC[@]}"; do
echo "* $l"
done
fi
echo

28
scripts/release.sh Executable file

@ -0,0 +1,28 @@
#!/bin/bash
# nothing to see here, just a utility i use to create new releases ^_^
VERSION_FILE=$(dirname "${BASH_SOURCE[0]}")/../sdcard/rootfs/root/pwnagotchi/scripts/pwnagotchi/version.py
echo "version file is $VERSION_FILE"
CURRENT_VERSION=$(cat $VERSION_FILE | grep version | cut -d"'" -f2)
TO_UPDATE=(
$VERSION_FILE
)
echo -n "current version is $CURRENT_VERSION, select new version: "
read NEW_VERSION
echo "creating version $NEW_VERSION ...\n"
for file in "${TO_UPDATE[@]}"; do
echo "patching $file ..."
sed -i.bak "s/$CURRENT_VERSION/$NEW_VERSION/g" "$file"
rm -rf "$file.bak"
git add $file
done
git commit -m "releasing v$NEW_VERSION"
git push
git tag -a v$NEW_VERSION -m "release v$NEW_VERSION"
git push origin v$NEW_VERSION
echo
echo "All done, v$NEW_VERSION released ^_^"

@ -11,6 +11,9 @@
#
# By default this script does nothing.
# Powersave (Disable HDMI) ~30ma
/opt/vc/bin/tvservice -o
sleep 10
if ! /opt/vc/bin/tvservice -s | grep HDMI; then
/opt/vc/bin/tvservice -o
fi
/root/pwnagotchi/scripts/startup.sh &
exit 0

@ -91,7 +91,10 @@ personality:
# ui configuration
ui:
# ePaper display can update every 3 secs anyway
# ePaper display can update every 3 secs anyway, set to 0 to only refresh for major data changes
# IMPORTANT: The lifespan of an eINK display depends on the cumulative amount of refreshes. If you want to
# preserve your display over time, you should set this value to 0.0 so that the display will be refreshed only
# if any of the important data fields changed (the uptime and blinking cursor won't trigger a refresh).
fps: 0.3
display:
enabled: true

@ -9,4 +9,4 @@ do
done
echo 0 >/sys/class/leds/led0/brightness
sleep 0.3
sleep 0.3

@ -1,7 +1,5 @@
import subprocess
version = '1.0.0a'
_name = None

@ -347,13 +347,13 @@ class Agent(Client, AsyncAdvertiser, AsyncTrainer):
if key not in self._handshakes:
self._handshakes[key] = h
new_shakes += 1
apsta = self._find_ap_sta_in(sta_mac, ap_mac, s)
if apsta is None:
ap_and_station = self._find_ap_sta_in(sta_mac, ap_mac, s)
if ap_and_station is None:
core.log("!!! captured new handshake: %s !!!" % key)
self._last_pwnd = ap_mac
plugins.on('handshake', self, filename, ap_mac, sta_mac)
else:
(ap, sta) = apsta
(ap, sta) = ap_and_station
self._last_pwnd = ap['hostname'] if ap['hostname'] != '' and ap[
'hostname'] != '<hidden>' else ap_mac
core.log("!!! captured new handshake on channel %d: %s (%s) -> %s [%s (%s)] !!!" % ( \

@ -1,14 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# German language
# Copyright (C) 2019
# This file is distributed under the same license as the pwnagotchi package.
# dadav <33197631+dadav@users.noreply.github.com>, 2019.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-29 13:34+0200\n"
"POT-Creation-Date: 2019-10-03 12:22+0200\n"
"PO-Revision-Date: 2019-09-29 14:00+0200\n"
"Last-Translator: dadav <33197631+dadav@users.noreply.github.com>\n"
"Language-Team: DE <33197631+dadav@users.noreply.github.com>\n"
@ -17,28 +16,19 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:16
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:21
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
"Hi, ich bin\n"
"ein Pwnagotchi!\n"
"Starte ..."
#: voice.py:22
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgstr ""
"Neuer Tag, neue Jagd,\n"
"neue Pwns!"
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "Hi, ich bin ein Pwnagotchi! Starte ..."
#: voice.py:23
msgid "New day, new hunt, new pwns!"
msgstr "Neuer Tag, neue Jagd, neue Pwns!"
#: voice.py:24
msgid "Hack the Planet!"
msgstr "Hack den Planet!"
@ -47,298 +37,202 @@ msgid "AI ready."
msgstr "KI bereit."
#: voice.py:29
msgid ""
"The neural network\n"
"is ready."
msgstr ""
"Das neurale Netz\n"
"ist bereit."
msgid "The neural network is ready."
msgstr "Das neurale Netz ist bereit."
#: voice.py:39
#: voice.py:37
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgstr ""
"Hey, Channel {channel} ist\n"
"frei! Dein AP wird\n"
"es dir danken."
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr "Hey, Channel {channel} ist frei! Dein AP wir des dir danken."
#: voice.py:44
#: voice.py:41
msgid "I'm bored ..."
msgstr "Mir ist langweilig..."
#: voice.py:45
#: voice.py:42
msgid "Let's go for a walk!"
msgstr "Lass uns laufen gehen!"
#: voice.py:49
msgid ""
"This is the best\n"
"day of my life!"
msgstr ""
"Das ist der beste\n"
"Tag meines Lebens."
#: voice.py:45
msgid "This is the best day of my life!"
msgstr "Das ist der beste Tag meines Lebens."
#: voice.py:53
#: voice.py:48
msgid "Shitty day :/"
msgstr "Scheis Tag :/"
#: voice.py:58
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr "Mir ist sau langweilig..."
#: voice.py:59
#: voice.py:53
msgid "I'm very sad ..."
msgstr "Ich bin sehr traurig..."
#: voice.py:60
#: voice.py:54
msgid "I'm sad"
msgstr "Ich bin traurig"
#: voice.py:66
#: voice.py:59
msgid "I'm living the life!"
msgstr "Ich lebe das Leben!"
#: voice.py:67
#: voice.py:60
msgid "I pwn therefore I am."
msgstr "Ich pwne, also bin ich."
#: voice.py:68
#: voice.py:61
msgid "So many networks!!!"
msgstr "So viele Netwerke!!!"
#: voice.py:69
msgid ""
"I'm having so much\n"
"fun!"
msgstr ""
"Ich habe sooo viel\n"
"Spaß!"
#: voice.py:62
msgid "I'm having so much fun!"
msgstr "Ich habe sooo viel Spaß!"
#: voice.py:70
msgid ""
"My crime is that of\n"
"curiosity ..."
msgstr ""
"Mein Verbrechen ist\n"
"das der Neugier ..."
#: voice.py:63
msgid "My crime is that of curiosity ..."
msgstr "Mein Verbrechen ist das der Neugier ..."
#: voice.py:75
#: voice.py:67
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgstr ""
"Hallo {name},\n"
"Nett Dich\n"
"kennenzulernen."
msgid "Hello {name}! Nice to meet you. {name}"
msgstr "Hallo {name}, nett Dich kennenzulernen."
#: voice.py:76
#: voice.py:68
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgstr ""
"Gerät {name}\n"
"ist in der\n"
"nähe!!"
msgid "Unit {name} is nearby! {name}"
msgstr "Gerät {name} ist in der nähe!!"
#: voice.py:81
#: voice.py:72
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgstr ""
"Uhm ...\n"
"tschüß\n"
"{name}"
msgid "Uhm ... goodbye {name}"
msgstr "Uhm ...tschüß {name}"
#: voice.py:82
#: voice.py:73
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgstr ""
"{name}\n"
"ist weg ..."
msgid "{name} is gone ..."
msgstr "{name} ist weg ..."
#: voice.py:87
#: voice.py:77
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgstr ""
"Whoops ...\n"
"{name}\n"
"ist weg."
msgid "Whoops ... {name} is gone."
msgstr "Whoops ...{name} ist weg."
#: voice.py:88
#: voice.py:78
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgstr ""
"{name}\n"
"verpasst!"
msgid "{name} missed!"
msgstr "{name} verpasst!"
#: voice.py:89
#: voice.py:79
msgid "Missed!"
msgstr "Verpasst!"
#: voice.py:94
msgid ""
"Nobody wants to\n"
"play with me ..."
msgstr ""
"Niemand will mit\n"
"mir spielen ..."
#: voice.py:83
msgid "Nobody wants to play with me ..."
msgstr "Niemand will mit mir spielen ..."
#: voice.py:95
#: voice.py:84
msgid "I feel so alone ..."
msgstr ""
"Ich fühl mich\n"
"so alleine ..."
msgstr "Ich fühl michso alleine ..."
#: voice.py:96
#: voice.py:85
msgid "Where's everybody?!"
msgstr "Wo sind denn alle?"
#: voice.py:101
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr "Schlafe für {secs}s"
#: voice.py:102
#: voice.py:90
msgid "Zzzzz"
msgstr ""
#: voice.py:103
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:112
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Warte für {secs}s ..."
#: voice.py:114
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr "Schaue mich um ({secs}s)"
#: voice.py:106
#, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr "Hey {what}, lass uns Freunde sein!"
#: voice.py:107
#, python-brace-format
msgid "Associating to {what}"
msgstr "Verbinde mit {what}"
#: voice.py:108
#, python-brace-format
msgid "Yo {what}!"
msgstr ""
#: voice.py:112
#, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr "Ich denke, dass {mac} kein WiFi brauch!"
#: voice.py:113
#, python-brace-format
msgid "Deauthenticating {mac}"
msgstr "Deauthentifiziere {mac}"
#: voice.py:114
#, python-brace-format
msgid "Kickbanning {mac}!"
msgstr "Kicke {mac}!"
#: voice.py:118
#, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr "Cool, wir haben {num} neue Handshake{plural}!"
#: voice.py:121
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgstr ""
"Hey\n"
"{what}\n"
"lass uns Freunde sein!"
msgid "Ops, something went wrong ... Rebooting ..."
msgstr "Ops, da ist etwas schief gelaufen ...Starte neu ..."
#: voice.py:122
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
"Verbinde mit\n"
"{what}"
#: voice.py:123
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
#: voice.py:128
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr ""
"Ich denke,\n"
"dass {mac}\n"
"kein WiFi brauch!"
#: voice.py:129
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
"Deauthentifiziere\n"
"{mac}"
#: voice.py:130
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
"Kicke\n"
"{mac}!"
#: voice.py:135
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
"Cool, wir haben {num}\n"
"neue Handshake{plural}!"
#: voice.py:139
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
"Ops, da ist etwas\n"
"schief gelaufen ...\n"
"Starte neu ..."
#: voice.py:143
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "{num} Stationen gekicked\n"
#: voice.py:144
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "{num} Freunde gefunden\n"
#: voice.py:145
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "{num} Handshakes aufgez.\n"
#: voice.py:147
#: voice.py:128
msgid "Met 1 peer"
msgstr "1 Peer getroffen."
#: voice.py:149
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr "{num} Peers getroffen"
#: voice.py:154
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"
msgstr ""
"Ich war {duration} am Pwnen und habe {deauthed} Clients gekickt! Außerdem habe ich "
"{associated} neue Freunde getroffen und {handshakes} Handshakes gefressen! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"
"Ich war {duration} am Pwnen und habe {deauthed} Clients gekickt! Außerdem "
"habe ich {associated} neue Freunde getroffen und {handshakes} Handshakes "
"gefressen! #pwnagotchi #pwnlog #pwnlife #hacktheplanet #skynet"

@ -0,0 +1,247 @@
# pwnigotchi voice data
# Copyright (C) 2019
# This file is distributed under the same license as the pwnagotchi package.
# FIRST AUTHOR Periklis Fregkos <fregkos@gmail.com>, 2019.
# CO AUTHOR Panos Vasilopoulos <hello@alwayslivid.com>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-10-03 12:22+0200\n"
"PO-Revision-Date: 2019-10-03 08:00+0000\n"
"Last-Translator: Periklis Fregkos <fregkos@gmail.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:22
#, fuzzy
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "Γειά, είμαι το Pwnagotchi!Εκκινούμαι ..."
#: voice.py:23
#, fuzzy
msgid "New day, new hunt, new pwns!"
msgstr "Νέα μέρα, νέο κυνήγι,νέα pwns!"
#: voice.py:24
msgid "Hack the Planet!"
msgstr "Hackαρε τον πλανήτη!"
#: voice.py:28
msgid "AI ready."
msgstr "ΤΝ έτοιμη."
#: voice.py:29
#, fuzzy
msgid "The neural network is ready."
msgstr "Το νευρωνικό δίκτυοείναι έτοιμο."
#: voice.py:37
#, fuzzy, python-brace-format
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr "Ε, το κανάλι {channel} είναιελεύθερο! Το AP σου θαείναι ευγνώμων."
#: voice.py:41
msgid "I'm bored ..."
msgstr "Βαριέμαι ..."
#: voice.py:42
msgid "Let's go for a walk!"
msgstr "Ας πάμε μια βόλτα!"
#: voice.py:45
#, fuzzy
msgid "This is the best day of my life!"
msgstr "Είναι η καλύτερημέρα της ζωής μου!"
#: voice.py:48
msgid "Shitty day :/"
msgstr "Σκατένια μέρα :/"
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr "Βαριέμαι πάρα πολύ ..."
#: voice.py:53
msgid "I'm very sad ..."
msgstr "Είμαι πολύ λυπημένο ..."
#: voice.py:54
msgid "I'm sad"
msgstr "Είμαι λυπημένο"
#: voice.py:59
msgid "I'm living the life!"
msgstr "Ζω την ζωή μου!"
#: voice.py:60
msgid "I pwn therefore I am."
msgstr "Pwnάρω, άρα υπάρχω."
#: voice.py:61
msgid "So many networks!!!"
msgstr "Τόσα πολλά δίκτυα!!!"
#: voice.py:62
#, fuzzy
msgid "I'm having so much fun!"
msgstr "Περνάω τέλεια!"
#: voice.py:63
#, fuzzy
msgid "My crime is that of curiosity ..."
msgstr "Η περιέργεια είναιτο μόνο έγκλημά μου ..."
#: voice.py:67
#, fuzzy, python-brace-format
msgid "Hello {name}! Nice to meet you. {name}"
msgstr "Γειά {name}!Χάρηκα για τη γνωριμία. {name}"
#: voice.py:68
#, fuzzy, python-brace-format
msgid "Unit {name} is nearby! {name}"
msgstr "Η μονάδα{name}είναι κοντά! {name}"
#: voice.py:72
#, fuzzy, python-brace-format
msgid "Uhm ... goodbye {name}"
msgstr "Εμμ ...αντίο{name}"
#: voice.py:73
#, fuzzy, python-brace-format
msgid "{name} is gone ..."
msgstr "Το {name}έφυγε ..."
#: voice.py:77
#, fuzzy, python-brace-format
msgid "Whoops ... {name} is gone."
msgstr "Ουπς ... Εξαφανίστηκε το{name}."
#: voice.py:78
#, fuzzy, python-brace-format
msgid "{name} missed!"
msgstr "Έχασα το{name}!"
#: voice.py:79
msgid "Missed!"
msgstr "Το έχασα!"
#: voice.py:83
#, fuzzy
msgid "Nobody wants to play with me ..."
msgstr "Κανείς δε θέλει ναπαίξει μαζί μου ..."
#: voice.py:84
msgid "I feel so alone ..."
msgstr "Νιώθω μοναχός μου ..."
#: voice.py:85
msgid "Where's everybody?!"
msgstr "Μα, πού πήγαν όλοι;!"
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr "Ξεκουράζομαι για {secs}s ..."
#: voice.py:90
msgid "Zzzzz"
msgstr ""
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Περιμένω για {secs}s ..."
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr "Ψάχνω τριγύρω ({secs})"
#: voice.py:106
#, fuzzy, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr "Εε!{what},ας γίνουμε φίλοι!"
#: voice.py:107
#, fuzzy, python-brace-format
msgid "Associating to {what}"
msgstr "Συνδέομαι με το{what}"
#: voice.py:108
#, fuzzy, python-brace-format
msgid "Yo {what}!"
msgstr "Που'σαι ρε τρελέ{what}!"
#: voice.py:112
#, fuzzy, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr "Μόλις αποφάσισα ότι η{mac}δε χρείαζεται WiFi!"
#: voice.py:113
#, fuzzy, python-brace-format
msgid "Deauthenticating {mac}"
msgstr "Πετάω έξω την{mac}"
#: voice.py:114
#, fuzzy, python-brace-format
msgid "Kickbanning {mac}!"
msgstr "Μπανάρω την{mac}!"
#: voice.py:118
#, fuzzy, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr "Τέλεια δικέ μου, πήραμε {num}νέες χειραψίες!"
#: voice.py:121
#, fuzzy
msgid "Ops, something went wrong ... Rebooting ..."
msgstr "Ουπς, κάτιπήγε λάθος ...Επανεκκινούμαι ..."
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "Έριξα {num} σταθμούς\n"
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "Έκανα {num} νέους φίλους\n"
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "Πήρα {num} χειραψίες\n"
#: voice.py:128
msgid "Met 1 peer"
msgstr "Γνώρισα 1 φίλο"
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr "Γνώρισα {num} φίλους"
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"
msgstr ""
"Pwnαρα για {duration} και έριξα {deauthed} πελάτες! Επίσης γνώρισα "
"{associated} νέους φίλους και καταβρόχθισα {handshakes} χειραψίες! "
"#pwnagotchi #pwnlog #pwnlife #hacktheplanet #skynet"

@ -0,0 +1,237 @@
# pwnigotchi voice data
# Copyright (C) 2019
# This file is distributed under the same license as the pwnagotchi package.
# FIRST AUTHOR <7271496+quantumsheep@users.noreply.github.com>, 2019.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-10-03 12:22+0200\n"
"PO-Revision-Date: 2019-10-03 10:34+0200\n"
"Last-Translator: quantumsheep <7271496+quantumsheep@users.noreply.github."
"com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: french\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:22
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr ""
#: voice.py:23
msgid "New day, new hunt, new pwns!"
msgstr ""
#: voice.py:24
msgid "Hack the Planet!"
msgstr ""
#: voice.py:28
msgid "AI ready."
msgstr ""
#: voice.py:29
msgid "The neural network is ready."
msgstr ""
#: voice.py:37
#, python-brace-format
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr ""
#: voice.py:41
msgid "I'm bored ..."
msgstr ""
#: voice.py:42
msgid "Let's go for a walk!"
msgstr ""
#: voice.py:45
msgid "This is the best day of my life!"
msgstr ""
#: voice.py:48
msgid "Shitty day :/"
msgstr ""
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr ""
#: voice.py:53
msgid "I'm very sad ..."
msgstr ""
#: voice.py:54
msgid "I'm sad"
msgstr ""
#: voice.py:59
msgid "I'm living the life!"
msgstr ""
#: voice.py:60
msgid "I pwn therefore I am."
msgstr ""
#: voice.py:61
msgid "So many networks!!!"
msgstr ""
#: voice.py:62
msgid "I'm having so much fun!"
msgstr ""
#: voice.py:63
msgid "My crime is that of curiosity ..."
msgstr ""
#: voice.py:67
#, python-brace-format
msgid "Hello {name}! Nice to meet you. {name}"
msgstr ""
#: voice.py:68
#, python-brace-format
msgid "Unit {name} is nearby! {name}"
msgstr ""
#: voice.py:72
#, python-brace-format
msgid "Uhm ... goodbye {name}"
msgstr ""
#: voice.py:73
#, python-brace-format
msgid "{name} is gone ..."
msgstr ""
#: voice.py:77
#, python-brace-format
msgid "Whoops ... {name} is gone."
msgstr ""
#: voice.py:78
#, python-brace-format
msgid "{name} missed!"
msgstr ""
#: voice.py:79
msgid "Missed!"
msgstr ""
#: voice.py:83
msgid "Nobody wants to play with me ..."
msgstr ""
#: voice.py:84
msgid "I feel so alone ..."
msgstr ""
#: voice.py:85
msgid "Where's everybody?!"
msgstr ""
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr ""
#: voice.py:90
msgid "Zzzzz"
msgstr ""
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr ""
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr ""
#: voice.py:106
#, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr ""
#: voice.py:107
#, python-brace-format
msgid "Associating to {what}"
msgstr ""
#: voice.py:108
#, python-brace-format
msgid "Yo {what}!"
msgstr ""
#: voice.py:112
#, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr ""
#: voice.py:113
#, python-brace-format
msgid "Deauthenticating {mac}"
msgstr ""
#: voice.py:114
#, python-brace-format
msgid "Kickbanning {mac}!"
msgstr ""
#: voice.py:118
#, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr ""
#: voice.py:121
msgid "Ops, something went wrong ... Rebooting ..."
msgstr ""
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr ""
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr ""
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr ""
#: voice.py:128
msgid "Met 1 peer"
msgstr ""
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr ""
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"
msgstr ""

@ -1,339 +0,0 @@
# pwnigotchi voice data
# Copyright (C) 2019
# This file is distributed under the same license as the pwnagotchi package.
# FIRST AUTHOR Perilis Fregkos <fregkos@gmail.com>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-29 13:42+0200\n"
"PO-Revision-Date: 2019-10-01 16:22+0000\n"
"Last-Translator: Panos Vasilopoulos <hello@alwayslivid.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:16
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:21
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
"Γεία, είμαι το Pwnagotchi!\n"
"Εκκινούμαι ..."
#: voice.py:22
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgstr ""
"Νέα μέρα, νέο κυνήγι,\n"
"νέα pwns!"
#: voice.py:23
msgid "Hack the Planet!"
msgstr "Hackαρε τον πλανήτη!"
#: voice.py:28
msgid "AI ready."
msgstr "ΤΝ έτοιμη."
#: voice.py:29
msgid ""
"The neural network\n"
"is ready."
msgstr ""
"Το νευρωνικό δίκτυο\n"
"είναι έτοιμο."
#: voice.py:39
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgstr ""
"Ε, το κανάλι {channel} είναι\n"
"ελεύθερο! Το AP σου θα\n"
"είναι ευγνώμων."
#: voice.py:44
msgid "I'm bored ..."
msgstr "Βαριέμαι ..."
#: voice.py:45
msgid "Let's go for a walk!"
msgstr "Ας πάμε μια βόλτα!"
#: voice.py:49
msgid ""
"This is the best\n"
"day of my life!"
msgstr ""
"Είναι η καλύτερη\n"
"μέρα της ζωής μου!"
#: voice.py:53
msgid "Shitty day :/"
msgstr "Σκατένια μέρα :/"
#: voice.py:58
msgid "I'm extremely bored ..."
msgstr "Βαριέμαι πάρα πολύ ..."
#: voice.py:59
msgid "I'm very sad ..."
msgstr "Είμαι πολύ λυπημένο ..."
#: voice.py:60
msgid "I'm sad"
msgstr "Είμαι λυπημένο"
#: voice.py:66
msgid "I'm living the life!"
msgstr "Ζω την ζωή μου!"
#: voice.py:67
msgid "I pwn therefore I am."
msgstr "Pwnάρω, άρα υπάρχω."
#: voice.py:68
msgid "So many networks!!!"
msgstr "Τόσα πολλά δίκτυα!!!"
#: voice.py:69
msgid ""
"I'm having so much\n"
"fun!"
msgstr "Περνάω τέλεια!"
#: voice.py:70
msgid ""
"My crime is that of\n"
"curiosity ..."
msgstr ""
"Η περιέργεια είναι\n"
"το μόνο έγκλημά μου ..."
#: voice.py:75
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgstr ""
"Γειά {name}!\n"
"Χάρηκα για τη γνωριμία. {name}"
#: voice.py:76
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgstr ""
"Η μονάδα\n"
"{name}\n"
"είναι κοντά! {name}"
#: voice.py:81
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgstr ""
"Εμμ ...\n"
"αντίο\n"
"{name}"
#: voice.py:82
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgstr ""
"Το {name}\n"
"έφυγε ..."
#: voice.py:87
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgstr ""
"Ουπς ... \n"
"Εξαφανίστηκε το\n"
"{name}."
#: voice.py:88
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgstr ""
"Έχασα το\n"
"{name}!"
#: voice.py:89
msgid "Missed!"
msgstr "Το έχασα!"
#: voice.py:94
msgid ""
"Nobody wants to\n"
"play with me ..."
msgstr ""
"Κανείς δε θέλει να\n"
"παίξει μαζί μου ..."
#: voice.py:95
msgid "I feel so alone ..."
msgstr "Νιώθω μοναχός μου ..."
#: voice.py:96
msgid "Where's everybody?!"
msgstr "Μα, πού πήγαν όλοi;!"
#: voice.py:101
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr "Ξεκουράζομαι για {secs}s ..."
#: voice.py:102
msgid "Zzzzz"
msgstr ""
#: voice.py:103
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:112
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Περιμένω για {secs}s ..."
#: voice.py:114
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr "Ψάχνω τριγύρω ({secs})"
#: voice.py:121
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgstr ""
"Εε!\n"
"{what},\n"
"ας γίνουμε φίλοι!"
#: voice.py:122
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
"Συνδέομαι με το\n"
"{what}"
#: voice.py:123
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
"Που'σ ρε τρελέ\n"
"{what}!"
#: voice.py:128
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr ""
"Μόλις αποφάσισα ότι η\n"
"{mac}\n"
"δε χρείαζεται WiFi!"
#: voice.py:129
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
"Πετάω έξω την\n"
"{mac}"
#: voice.py:130
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
"Μπανάρω την\n"
"{mac}!"
#: voice.py:135
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
"Τέλεια δικέ μου, πήραμε {num}\n"
"νέες χειραψίες{plural}!"
#: voice.py:139
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
"Ουπς, κάτι\n"
"πήγε λάθος ...\n"
"Επανεκκινούμαι ..."
#: voice.py:143
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "Έριξα {num} σταθμούς\n"
#: voice.py:144
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "Έκανα {num} νέους φίλους\n"
#: voice.py:145
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "Πήρα {num} χειραψίες\n"
#: voice.py:147
msgid "Met 1 peer"
msgstr "Γνώρισα 1 φίλο"
#: voice.py:149
#, python-brace-format
msgid "Met {num} peers"
msgstr "Γνώρισα {num} φίλους"
#: voice.py:154
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi #pwnlog "
"#pwnlife #hacktheplanet #skynet"
msgstr ""
"Pwnαρα για {duration} και έριξα {deauthed} πελάτες! Επίσης γνώρισα "
"{associated} νέους φίλους και καταβρόχθισα {handshakes} χειραψίες! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-10-02 16:38+0000\n"
"POT-Creation-Date: 2019-10-03 13:10+0200\n"
"PO-Revision-Date: 2019-10-02 17:20+0000\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: italian\n"
@ -19,330 +19,215 @@ msgstr ""
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:22
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "Ciao! Piacere Pwnagotchi! Caricamento ..."
#: voice.py:23
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
"Ciao!\n"
"Piacere Pwnagotchi!\n"
"Caricamento ..."
#, fuzzy
msgid "New day, new hunt, new pwns!"
msgstr "Nuovo giorno...nuovi handshakes!!!"
#: voice.py:24
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgstr ""
"Nuovo giorno...\n"
"nuovi handshakes!!!"
#: voice.py:25
msgid "Hack the Planet!"
msgstr ""
#: voice.py:30
#: voice.py:28
msgid "AI ready."
msgstr "IA pronta."
#: voice.py:31
msgid ""
"The neural network\n"
"is ready."
msgstr ""
"La rete neurale\n"
"è pronta."
#: voice.py:29
msgid "The neural network is ready."
msgstr "La rete neurale è pronta."
#: voice.py:37
#, python-brace-format
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr "Hey, il canale {channel} è libero! Il tuo AP ringrazia."
#: voice.py:41
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgstr ""
"Hey, il canale {channel} è\n"
"libero! Il tuo AP\n"
"ringrazia."
#: voice.py:46
msgid "I'm bored ..."
msgstr "Che noia ..."
#: voice.py:47
#: voice.py:42
msgid "Let's go for a walk!"
msgstr ""
"Andiamo a fare una\n"
"passeggiata!"
"Andiamo a fare una passeggiata!"
#: voice.py:51
msgid ""
"This is the best\n"
"day of my life!"
msgstr ""
"Questo è il più bel\n"
"giorno della mia\n"
"vita!!!!"
#: voice.py:45
msgid "This is the best day of my life!"
msgstr "Questo è il più bel giorno della mia vita!!!!"
#: voice.py:55
#: voice.py:48
msgid "Shitty day :/"
msgstr "Giorno di merda :/"
#: voice.py:60
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr ""
"Sono estremamente\n"
"annoiato ..."
msgstr "Sono estremamente annoiato ..."
#: voice.py:61
#: voice.py:53
msgid "I'm very sad ..."
msgstr "Sono molto triste..."
#: voice.py:62
#: voice.py:54
msgid "I'm sad"
msgstr "Sono triste"
#: voice.py:68
#: voice.py:59
msgid "I'm living the life!"
msgstr "Mi sento vivo!"
#: voice.py:69
#: voice.py:60
msgid "I pwn therefore I am."
msgstr "Pwn ergo sum."
#: voice.py:70
#: voice.py:61
msgid "So many networks!!!"
msgstr "Qui è pieno di reti!"
#: voice.py:71
msgid ""
"I'm having so much\n"
"fun!"
#: voice.py:62
msgid "I'm having so much fun!"
msgstr "Mi sto divertendo tantissimo!"
#: voice.py:63
msgid "My crime is that of curiosity ..."
msgstr ""
"Mi sto divertendo\n"
"tantissimo!"
#: voice.py:67
#, python-brace-format
msgid "Hello {name}! Nice to meet you. {name}"
msgstr "Ciao {name}! E' un piacere. {name}"
#: voice.py:68
#, python-brace-format
msgid "Unit {name} is nearby! {name}"
msgstr "L'Unità {name} è vicina! {name}"
#: voice.py:72
msgid ""
"My crime is that of\n"
"curiosity ..."
msgstr ""
#, python-brace-format
msgid "Uhm ... goodbye {name}"
msgstr "Uhm ... addio {name}, mi mancherai..."
#: voice.py:73
#, python-brace-format
msgid "{name} is gone ..."
msgstr "{name} se n'è andato ..."
#: voice.py:77
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgstr ""
"Ciao\n"
"{name}!\n"
"E' un piacere. {name}"
msgid "Whoops ... {name} is gone."
msgstr "Whoops ...{name} se n'è andato."
#: voice.py:78
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgstr ""
"L'Unità\n"
"{name}\n"
"è vicina! {name}"
msgid "{name} missed!"
msgstr "{name} è scomparso..."
#: voice.py:79
msgid "Missed!"
msgstr "Ehi! Dove sei andato!?"
#: voice.py:83
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgstr ""
"Uhm ...\n"
"addio\n"
"{name},\n"
"mi mancherai..."
msgid "Nobody wants to play with me ..."
msgstr "Nessuno vuole giocare con me..."
#: voice.py:84
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgstr ""
"{name}\n"
"se n'è andato ..."
#: voice.py:89
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgstr ""
"Whoops ...\n"
"{name}\n"
"se n'è andato."
#: voice.py:90
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgstr ""
"{name}\n"
"è scomparso..."
#: voice.py:91
msgid "Missed!"
msgstr ""
"Ehi!\n"
"Dove sei andato!?"
#: voice.py:96
msgid ""
"Nobody wants to\n"
"play with me ..."
msgstr ""
"Nessuno vuole\n"
"giocare con me..."
#: voice.py:97
msgid "I feel so alone ..."
msgstr "Mi sento così solo..."
#: voice.py:98
#: voice.py:85
msgid "Where's everybody?!"
msgstr "Dove sono tutti?!"
#: voice.py:103
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr ""
"Schiaccio un \n"
"pisolino per {secs}s ..."
msgstr "Schiaccio un pisolino per {secs}s ..."
#: voice.py:104
#: voice.py:90
msgid "Zzzzz"
msgstr ""
#: voice.py:105
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:114
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Aspetto {secs}s ..."
#: voice.py:116
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr ""
"Do uno sguardo\n"
"qui intorno...\n"
"({secs}s)"
msgstr "Do uno sguardo qui intorno... ({secs}s)"
#: voice.py:123
#: voice.py:106
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgid "Hey {what} let's be friends!"
msgstr "Hey {what}! Diventiamo amici!"
#: voice.py:107
#, python-brace-format
msgid "Associating to {what}"
msgstr "Collegamento con {what} in corso..."
#: voice.py:108
#, python-brace-format
msgid "Yo {what}!"
msgstr "Yo {what}!"
#: voice.py:112
#, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr "Ho appena deciso che {mac} non necessita di WiFi!"
#: voice.py:113
#, python-brace-format
msgid "Deauthenticating {mac}"
msgstr ""
"Hey\n"
"{what}\n"
"Diventiamo amici!"
#: voice.py:114
#, python-brace-format
msgid "Kickbanning {mac}!"
msgstr "Sto prendendo a calci {mac}!"
#: voice.py:118
#, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr "Bene, abbiamo {num} handshake{plural} in più!"
#: voice.py:121
msgid "Ops, something went wrong ... Rebooting ..."
msgstr "Ops, qualcosa è andato storto ... Riavvio ..."
#: voice.py:124
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
"Collegamento con\n"
"{what}\n"
"in corso..."
#: voice.py:125
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
"Yo\n"
"{what}!"
#: voice.py:130
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr ""
"Ho appena deciso che\n"
"{mac}\n"
"non necessita di\n"
"WiFi!"
#: voice.py:131
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
#: voice.py:132
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
"Sto prendendo\n"
"a calci\n"
"{mac}!"
#: voice.py:137
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
"Bene, abbiamo {num}\n"
"handshake{plural} in più!"
#: voice.py:141
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
"Ops, qualcosa\n"
"è andato storto ...\n"
"Riavvio ..."
#: voice.py:145
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "{num} stazioni pestate\n"
#: voice.py:146
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "{num} nuovi amici\n"
#: voice.py:147
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "{num} handshakes presi\n"
#: voice.py:149
#: voice.py:128
msgid "Met 1 peer"
msgstr "1 peer incontrato"
#: voice.py:151
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr "{num} peers incontrati"
#: voice.py:156
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "

@ -4,11 +4,11 @@
# FIRST AUTHOR <33197631+dadav@users.noreply.github.com>, 2019.
# kovach <2214005+kovachwt@users.noreply.github.com>, 2019.
#
#, fuzzymsgid ""
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-29 13:42+0200\n"
"POT-Creation-Date: 2019-10-03 12:44+0200\n"
"PO-Revision-Date: 2019-09-30 23:53+0200\n"
"Last-Translator: kovach <2214005+kovachwt@users.noreply.github.com>\n"
"Language-Team: \n"
@ -17,27 +17,21 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:16
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr "ДреееММмммМммм"
#: voice.py:21
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
"Здраво, јас сум Pwnagotchi!\n"
"Почнувам ..."
#: voice.py:22
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgstr ""
"Нов ден, нов лов,\n"
"ќе си газиме!"
#, fuzzy
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "Здраво, јас сум Pwnagotchi!Почнувам ..."
#: voice.py:23
#, fuzzy
msgid "New day, new hunt, new pwns!"
msgstr "Нов ден, нов лов,ќе си газиме!"
#: voice.py:24
msgid "Hack the Planet!"
msgstr "Хак д Планет!"
@ -46,290 +40,202 @@ msgid "AI ready."
msgstr "AI спремно."
#: voice.py:29
msgid ""
"The neural network\n"
"is ready."
msgstr ""
"Невронската мрежа\n"
"е спремна."
#, fuzzy
msgid "The neural network is ready."
msgstr "Невронската мрежае спремна."
#: voice.py:39
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgstr ""
"Еј, каналот {channel} е\n"
"слободен! APто ќе ти\n"
"каже фала."
#: voice.py:37
#, fuzzy, python-brace-format
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr "Еј, каналот {channel} еслободен! APто ќе тикаже фала."
#: voice.py:44
#: voice.py:41
msgid "I'm bored ..."
msgstr "Досаднооо ..."
#: voice.py:45
#: voice.py:42
msgid "Let's go for a walk!"
msgstr "Ајде да шетнеме!"
#: voice.py:49
msgid ""
"This is the best\n"
"day of my life!"
msgstr ""
"Ова ми е најдобриот \n"
"ден во животот!"
#: voice.py:45
#, fuzzy
msgid "This is the best day of my life!"
msgstr "Ова ми е најдобриот ден во животот!"
#: voice.py:53
#: voice.py:48
msgid "Shitty day :/"
msgstr "Срање ден :/"
#: voice.py:58
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr "Ултра досадно ..."
#: voice.py:59
#: voice.py:53
msgid "I'm very sad ..."
msgstr "Многу тажно ..."
#: voice.py:60
#: voice.py:54
msgid "I'm sad"
msgstr "Тажно"
#: voice.py:66
#: voice.py:59
msgid "I'm living the life!"
msgstr "Ммхх животче!"
#: voice.py:67
#: voice.py:60
msgid "I pwn therefore I am."
msgstr "Си газам значи постојам."
#: voice.py:68
#: voice.py:61
msgid "So many networks!!!"
msgstr "Мммм колку мрежи!!!"
#: voice.py:69
msgid ""
"I'm having so much\n"
"fun!"
#: voice.py:62
#, fuzzy
msgid "I'm having so much fun!"
msgstr "Јухуу забавноо ее!"
#: voice.py:70
msgid ""
"My crime is that of\n"
"curiosity ..."
msgstr ""
"Виновен сум само за\n"
"љубопитност ..."
#: voice.py:63
#, fuzzy
msgid "My crime is that of curiosity ..."
msgstr "Виновен сум само заљубопитност ..."
#: voice.py:75
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgstr ""
"Здраво\n"
"{name}!\n"
"Мило ми е. {name}"
#: voice.py:67
#, fuzzy, python-brace-format
msgid "Hello {name}! Nice to meet you. {name}"
msgstr "Здраво{name}!Мило ми е. {name}"
#: voice.py:76
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgstr ""
"Опаа\n"
"{name}\n"
"е во близина! {name}"
#: voice.py:68
#, fuzzy, python-brace-format
msgid "Unit {name} is nearby! {name}"
msgstr "Опаа{name}е во близина! {name}"
#: voice.py:81
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgstr ""
"Хмм ...\n"
"чао\n"
"{name}"
#: voice.py:72
#, fuzzy, python-brace-format
msgid "Uhm ... goodbye {name}"
msgstr "Хмм ...чао{name}"
#: voice.py:82
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgstr ""
"{name}\n"
"го снема ..."
#: voice.py:73
#, fuzzy, python-brace-format
msgid "{name} is gone ..."
msgstr "{name}го снема ..."
#: voice.py:87
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgstr ""
"Уупс ...\n"
"{name}\n"
"го снема."
#: voice.py:77
#, fuzzy, python-brace-format
msgid "Whoops ... {name} is gone."
msgstr "Уупс ...{name}го снема."
#: voice.py:88
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgstr ""
"{name}\n"
"промаши!"
#: voice.py:78
#, fuzzy, python-brace-format
msgid "{name} missed!"
msgstr "{name}промаши!"
#: voice.py:89
#: voice.py:79
msgid "Missed!"
msgstr "Промаши!"
#: voice.py:94
msgid ""
"Nobody wants to\n"
"play with me ..."
msgstr ""
"Никој не сака да\n"
"си игра со мене ..."
#: voice.py:83
#, fuzzy
msgid "Nobody wants to play with me ..."
msgstr "Никој не сака даси игра со мене ..."
#: voice.py:95
#: voice.py:84
msgid "I feel so alone ..."
msgstr "Толку сам ..."
#: voice.py:96
#: voice.py:85
msgid "Where's everybody?!"
msgstr "Каде се сите?!"
#: voice.py:101
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr "Ќе дремнам {secs}с ..."
#: voice.py:102
#: voice.py:90
msgid "Zzzzz"
msgstr "Дреммм"
#: voice.py:103
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr "Дремммм ({secs}с)"
#: voice.py:112
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Чекам {secs}с ..."
#: voice.py:114
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr "Шарам наоколу ({secs}с)"
#: voice.py:106
#, fuzzy, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr "Еј{what}ајде да се дружиме!"
#: voice.py:107
#, fuzzy, python-brace-format
msgid "Associating to {what}"
msgstr "Се закачувам на{what}"
#: voice.py:108
#, fuzzy, python-brace-format
msgid "Yo {what}!"
msgstr "Јо{what}!"
#: voice.py:112
#, fuzzy, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr "Знаеш што, на{mac}не му треба WiFi!"
#: voice.py:113
#, fuzzy, python-brace-format
msgid "Deauthenticating {mac}"
msgstr "Го деавтентицирам{mac}"
#: voice.py:114
#, fuzzy, python-brace-format
msgid "Kickbanning {mac}!"
msgstr "Кикбан{mac}!"
#: voice.py:118
#, fuzzy, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr "Кул, фативме {num}нови ракувања!"
#: voice.py:121
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgstr ""
"Еј\n"
"{what}\n"
"ајде да се дружиме!"
#, fuzzy
msgid "Ops, something went wrong ... Rebooting ..."
msgstr "Упс, нешто не еко што треба ...Рестартирам ..."
#: voice.py:122
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
"Се закачувам на\n"
"{what}"
#: voice.py:123
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
"Јо\n"
"{what}!"
#: voice.py:128
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr ""
"Знаеш што, на\n"
"{mac}\n"
"не му треба WiFi!"
#: voice.py:129
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
"Го деавтентицирам\n"
"{mac}"
#: voice.py:130
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
"Кикбан\n"
"{mac}!"
#: voice.py:135
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
"Кул, фативме {num}\n"
"нови ракувања!"
#: voice.py:139
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
"Упс, нешто не е\n"
"ко што треба ...\n"
"Рестартирам ..."
#: voice.py:143
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "Избацив {num} станици"
msgstr "Избацив {num} станици\n"
#: voice.py:144
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "{num} нови другарчиња"
msgstr "{num} нови другарчиња\n"
#: voice.py:145
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "Фатив {num} ракувања"
msgstr "Фатив {num} ракувања\n"
#: voice.py:147
#: voice.py:128
msgid "Met 1 peer"
msgstr "Запознав 1 пријател"
#: voice.py:149
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr "Запознав {num} пријатели"
#: voice.py:154
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
@ -337,5 +243,5 @@ msgid ""
"#pwnlog #pwnlife #hacktheplanet #skynet"
msgstr ""
"Си газам веќе {duration} и избацив {deauthed} клиенти! Запознав {associated} "
"нови другарчиња и лапнав {handshakes} ракувања! #pwnagotchi #pwnlog "
"#pwnlife #hacktheplanet #skynet"
"нови другарчиња и лапнав {handshakes} ракувања! #pwnagotchi #pwnlog #pwnlife "
"#hacktheplanet #skynet"

@ -3,43 +3,32 @@
# This file is distributed under the same license as the pwnagotchi package.
# FIRST AUTHOR justin-p@users.noreply.github.com, 2019.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-29 13:42+0200\n"
"POT-Creation-Date: 2019-10-03 12:44+0200\n"
"PO-Revision-Date: 2019-09-29 14:00+0200\n"
"Last-Translator: Justin-P <justin-p@users.noreply.github.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: english\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:16
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr "ZzzzZZzzzzZzzz"
#: voice.py:21
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
"Hoi, Ik ben\n"
"Pwnagotchi!\n"
"Opstarten ..."
#: voice.py:22
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgstr ""
"Nieuwe dag,\n"
"nieuwe jacht,\n"
"nieuwe pwns!"
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr "Hoi, Ik ben Pwnagotchi! Opstarten ..."
#: voice.py:23
msgid "New day, new hunt, new pwns!"
msgstr "Nieuwe dag, nieuwe jacht, nieuwe pwns!"
#: voice.py:24
msgid "Hack the Planet!"
msgstr "Hack de Wereld!"
@ -48,301 +37,203 @@ msgid "AI ready."
msgstr "AI is klaar."
#: voice.py:29
msgid ""
"The neural network\n"
"is ready."
msgstr ""
"Neuronen netwerk\n"
"is klaar voor gebruik."
msgid "The neural network is ready."
msgstr "Neuronen netwerkis klaar voor gebruik."
#: voice.py:39
#: voice.py:37
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgstr ""
"Hey, kanaal {channel} is\n"
"vrij! Je AP zal je\n"
"bedanken."
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr "Hey, kanaal {channel} is vrij! Je AP zal je bedanken."
#: voice.py:44
#: voice.py:41
msgid "I'm bored ..."
msgstr "Ik verveel me ..."
#: voice.py:45
#: voice.py:42
msgid "Let's go for a walk!"
msgstr "Laten we een rondje lopen!"
#: voice.py:49
msgid ""
"This is the best\n"
"day of my life!"
msgstr ""
"Dit is de beste\n"
"dag van mijn leven!"
#: voice.py:45
msgid "This is the best day of my life!"
msgstr "Dit is de beste dag van mijn leven!"
#: voice.py:53
#: voice.py:48
msgid "Shitty day :/"
msgstr "Ruk dag :/"
#: voice.py:58
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr "Ik verveel me \n"
"kapot ..."
msgstr "Ik verveel me kapot ..."
#: voice.py:59
#: voice.py:53
msgid "I'm very sad ..."
msgstr "Ik ben erg\n"
"verdrietig ..."
msgstr "Ik ben ergverdrietig ..."
#: voice.py:60
#: voice.py:54
msgid "I'm sad"
msgstr "Ik ben verdrietig"
#: voice.py:66
#: voice.py:59
msgid "I'm living the life!"
msgstr "Beter kan het leven\n"
"niet worden!"
msgstr "Beter kan het levenniet worden!"
#: voice.py:67
#: voice.py:60
msgid "I pwn therefore I am."
msgstr "Ik pwn daarom besta ik."
#: voice.py:68
#: voice.py:61
msgid "So many networks!!!"
msgstr "Zo veel netwerken!!!"
#: voice.py:69
msgid ""
"I'm having so much\n"
"fun!"
#: voice.py:62
msgid "I'm having so much fun!"
msgstr "Dit is zo leuk!"
#: voice.py:70
msgid ""
"My crime is that of\n"
"curiosity ..."
msgstr ""
"Mijn enige misdrijf\n"
"is mijn \n"
"nieuwsgierigheid ..."
#: voice.py:63
#, fuzzy
msgid "My crime is that of curiosity ..."
msgstr "Mijn enige misdrijfis mijn nieuwsgierigheid ..."
#: voice.py:75
#: voice.py:67
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgstr ""
"Hallo\n"
"{name}!\n"
"Leuk je te ontmoeten. {name}"
msgid "Hello {name}! Nice to meet you. {name}"
msgstr "Hallo {name}! Leuk je te ontmoeten. {name}"
#: voice.py:76
#: voice.py:68
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgstr ""
"Unit\n"
"{name}\n"
"is dichtbij! {name}"
msgid "Unit {name} is nearby! {name}"
msgstr "Unit {name} is dichtbij! {name}"
#: voice.py:81
#: voice.py:72
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgstr ""
"Uhm ...\n"
"tot ziens\n"
"{name}"
msgid "Uhm ... goodbye {name}"
msgstr "Uhm ...tot ziens {name}"
#: voice.py:82
#: voice.py:73
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgstr ""
"{name}\n"
"is weg"
msgid "{name} is gone ..."
msgstr "{name} is weg"
#: voice.py:87
#: voice.py:77
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgstr ""
"Whoopsie ...\n"
"{name}\n"
"is weg"
msgid "Whoops ... {name} is gone."
msgstr "Whoopsie ...{name} is weg"
#: voice.py:88
#: voice.py:78
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgstr ""
"{name}\n"
"gemist!"
msgid "{name} missed!"
msgstr "{name} gemist!"
#: voice.py:89
#: voice.py:79
msgid "Missed!"
msgstr "Gemist!"
#: voice.py:94
msgid ""
"Nobody wants to\n"
"play with me ..."
msgstr ""
"Niemand wil met\n"
"mij spelen ..."
#: voice.py:83
msgid "Nobody wants to play with me ..."
msgstr "Niemand wil metmij spelen ..."
#: voice.py:95
#: voice.py:84
msgid "I feel so alone ..."
msgstr "Zo alleen ..."
#: voice.py:96
#: voice.py:85
msgid "Where's everybody?!"
msgstr "Waar is iedereen?!"
#: voice.py:101
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr "Dutje doen voor {secs}s ..."
#: voice.py:102
#: voice.py:90
msgid "Zzzzz"
msgstr "Zzzzz"
#: voice.py:103
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:112
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr "Even {secs}s wachten ..."
#: voice.py:114
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr "Rond kijken ({secs}s)"
#: voice.py:106
#, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr "Hey {what}, laten we vriendenworden!"
#: voice.py:107
#, python-brace-format
msgid "Associating to {what}"
msgstr "Verbinden met {what}"
#: voice.py:108
#, python-brace-format
msgid "Yo {what}!"
msgstr ""
#: voice.py:112
#, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr "Ik vind dat {mac} genoeg WiFiheeft gehad!"
#: voice.py:113
#, python-brace-format
msgid "Deauthenticating {mac}"
msgstr "De-autoriseren {mac}"
#: voice.py:114
#, python-brace-format
msgid "Kickbanning {mac}!"
msgstr "Ik ga {mac} even kicken!"
#: voice.py:118
#, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr "Gaaf, we hebben {num} nieuwe handshake{plural}!"
#: voice.py:121
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgstr ""
"Hey\n"
"{what}\n"
"Laten we vrienden\n"
"worden!"
msgid "Ops, something went wrong ... Rebooting ..."
msgstr "Oops, iets ging fout ...Rebooting ..."
#: voice.py:122
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
"Verbinden met\n"
"{what}"
#: voice.py:123
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
#: voice.py:128
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr "Ik vind dat\n"
"{mac}\n"
"genoeg WiFi\n"
"heeft gehad!"
#: voice.py:129
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
"De-autoriseren\n"
"{mac}"
#: voice.py:130
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
"Ik ga\n"
"{mac}\n"
"even kicken!"
#: voice.py:135
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
"Gaaf, we hebben {num}\n"
"nieuwe handshake{plural}!"
#: voice.py:139
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
"Oops, iets"
"ging fout ...\n"
"Rebooting ..."
#: voice.py:143
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr "{num} stations gekicked\n"
#: voice.py:144
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr "{num} nieuwe vrienden\n"
#: voice.py:145
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr "{num} nieuwe handshakes\n"
#: voice.py:147
#: voice.py:128
msgid "Met 1 peer"
msgstr "1 peer ontmoet"
#: voice.py:149
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr "{num} peers ontmoet"
#: voice.py:154
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "
"{associated} new friends and ate {handshakes} handshakes! #pwnagotchi "
"#pwnlog #pwnlife #hacktheplanet #skynet"
msgstr ""
"Ik heb gepwned voor {duration} and heb {deauthed} clients gekicked! Ik heb ook "
"{associated} nieuwe vrienden gevonden en heb {handshakes} handshakes gegeten! "
"#pwnagotchi #pwnlog #pwnlife #hacktheplanet #skynet"
"Ik heb gepwned voor {duration} and heb {deauthed} clients gekicked! Ik heb "
"ook {associated} nieuwe vrienden gevonden en heb {handshakes} handshakes "
"gegeten! #pwnagotchi #pwnlog #pwnlife #hacktheplanet #skynet"

@ -1,39 +1,35 @@
# pwnigotchi voice data
# Copyright (C) 2019
# This file is distributed under the same license as the pwnagotchi package.
# FIRST AUTHOR <33197631+dadav@users.noreply.github.com>, 2019.
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-29 13:42+0200\n"
"PO-Revision-Date: 2019-09-29 14:00+0200\n"
"Last-Translator: dadav <33197631+dadav@users.noreply.github.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
"Language: english\n"
"POT-Creation-Date: 2019-10-03 13:10+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: voice.py:16
#: voice.py:18
msgid "ZzzzZZzzzzZzzz"
msgstr ""
#: voice.py:21
msgid ""
"Hi, I'm Pwnagotchi!\n"
"Starting ..."
msgstr ""
#: voice.py:22
msgid ""
"New day, new hunt,\n"
"new pwns!"
msgid "Hi, I'm Pwnagotchi! Starting ..."
msgstr ""
#: voice.py:23
msgid "New day, new hunt, new pwns!"
msgstr ""
#: voice.py:24
msgid "Hack the Planet!"
msgstr ""
@ -42,244 +38,196 @@ msgid "AI ready."
msgstr ""
#: voice.py:29
msgid ""
"The neural network\n"
"is ready."
msgid "The neural network is ready."
msgstr ""
#: voice.py:39
#: voice.py:37
#, python-brace-format
msgid ""
"Hey, channel {channel} is\n"
"free! Your AP will\n"
"say thanks."
msgid "Hey, channel {channel} is free! Your AP will say thanks."
msgstr ""
#: voice.py:44
#: voice.py:41
msgid "I'm bored ..."
msgstr ""
#: voice.py:45
#: voice.py:42
msgid "Let's go for a walk!"
msgstr ""
#: voice.py:49
msgid ""
"This is the best\n"
"day of my life!"
#: voice.py:45
msgid "This is the best day of my life!"
msgstr ""
#: voice.py:53
#: voice.py:48
msgid "Shitty day :/"
msgstr ""
#: voice.py:58
#: voice.py:52
msgid "I'm extremely bored ..."
msgstr ""
#: voice.py:59
#: voice.py:53
msgid "I'm very sad ..."
msgstr ""
#: voice.py:60
#: voice.py:54
msgid "I'm sad"
msgstr ""
#: voice.py:66
#: voice.py:59
msgid "I'm living the life!"
msgstr ""
#: voice.py:67
#: voice.py:60
msgid "I pwn therefore I am."
msgstr ""
#: voice.py:68
#: voice.py:61
msgid "So many networks!!!"
msgstr ""
#: voice.py:69
msgid ""
"I'm having so much\n"
"fun!"
#: voice.py:62
msgid "I'm having so much fun!"
msgstr ""
#: voice.py:70
msgid ""
"My crime is that of\n"
"curiosity ..."
#: voice.py:63
msgid "My crime is that of curiosity ..."
msgstr ""
#: voice.py:75
#: voice.py:67
#, python-brace-format
msgid ""
"Hello\n"
"{name}!\n"
"Nice to meet you. {name}"
msgid "Hello {name}! Nice to meet you. {name}"
msgstr ""
#: voice.py:76
#: voice.py:68
#, python-brace-format
msgid ""
"Unit\n"
"{name}\n"
"is nearby! {name}"
msgid "Unit {name} is nearby! {name}"
msgstr ""
#: voice.py:81
#: voice.py:72
#, python-brace-format
msgid ""
"Uhm ...\n"
"goodbye\n"
"{name}"
msgid "Uhm ... goodbye {name}"
msgstr ""
#: voice.py:82
#: voice.py:73
#, python-brace-format
msgid ""
"{name}\n"
"is gone ..."
msgid "{name} is gone ..."
msgstr ""
#: voice.py:87
#: voice.py:77
#, python-brace-format
msgid ""
"Whoops ...\n"
"{name}\n"
"is gone."
msgid "Whoops ... {name} is gone."
msgstr ""
#: voice.py:88
#: voice.py:78
#, python-brace-format
msgid ""
"{name}\n"
"missed!"
msgid "{name} missed!"
msgstr ""
#: voice.py:89
#: voice.py:79
msgid "Missed!"
msgstr ""
#: voice.py:94
msgid ""
"Nobody wants to\n"
"play with me ..."
#: voice.py:83
msgid "Nobody wants to play with me ..."
msgstr ""
#: voice.py:95
#: voice.py:84
msgid "I feel so alone ..."
msgstr ""
#: voice.py:96
#: voice.py:85
msgid "Where's everybody?!"
msgstr ""
#: voice.py:101
#: voice.py:89
#, python-brace-format
msgid "Napping for {secs}s ..."
msgstr ""
#: voice.py:102
#: voice.py:90
msgid "Zzzzz"
msgstr ""
#: voice.py:103
#: voice.py:91
#, python-brace-format
msgid "ZzzZzzz ({secs}s)"
msgstr ""
#: voice.py:112
#: voice.py:98
#, python-brace-format
msgid "Waiting for {secs}s ..."
msgstr ""
#: voice.py:114
#: voice.py:100
#, python-brace-format
msgid "Looking around ({secs}s)"
msgstr ""
#: voice.py:106
#, python-brace-format
msgid "Hey {what} let's be friends!"
msgstr ""
#: voice.py:107
#, python-brace-format
msgid "Associating to {what}"
msgstr ""
#: voice.py:108
#, python-brace-format
msgid "Yo {what}!"
msgstr ""
#: voice.py:112
#, python-brace-format
msgid "Just decided that {mac} needs no WiFi!"
msgstr ""
#: voice.py:113
#, python-brace-format
msgid "Deauthenticating {mac}"
msgstr ""
#: voice.py:114
#, python-brace-format
msgid "Kickbanning {mac}!"
msgstr ""
#: voice.py:118
#, python-brace-format
msgid "Cool, we got {num} new handshake{plural}!"
msgstr ""
#: voice.py:121
#, python-brace-format
msgid ""
"Hey\n"
"{what}\n"
"let's be friends!"
msgid "Ops, something went wrong ... Rebooting ..."
msgstr ""
#: voice.py:122
#, python-brace-format
msgid ""
"Associating to\n"
"{what}"
msgstr ""
#: voice.py:123
#, python-brace-format
msgid ""
"Yo\n"
"{what}!"
msgstr ""
#: voice.py:128
#, python-brace-format
msgid ""
"Just decided that\n"
"{mac}\n"
"needs no WiFi!"
msgstr ""
#: voice.py:129
#, python-brace-format
msgid ""
"Deauthenticating\n"
"{mac}"
msgstr ""
#: voice.py:130
#, python-brace-format
msgid ""
"Kickbanning\n"
"{mac}!"
msgstr ""
#: voice.py:135
#, python-brace-format
msgid ""
"Cool, we got {num}\n"
"new handshake{plural}!"
msgstr ""
#: voice.py:139
msgid ""
"Ops, something\n"
"went wrong ...\n"
"Rebooting ..."
msgstr ""
#: voice.py:143
#: voice.py:124
#, python-brace-format
msgid "Kicked {num} stations\n"
msgstr ""
#: voice.py:144
#: voice.py:125
#, python-brace-format
msgid "Made {num} new friends\n"
msgstr ""
#: voice.py:145
#: voice.py:126
#, python-brace-format
msgid "Got {num} handshakes\n"
msgstr ""
#: voice.py:147
#: voice.py:128
msgid "Met 1 peer"
msgstr ""
#: voice.py:149
#: voice.py:130
#, python-brace-format
msgid "Met {num} peers"
msgstr ""
#: voice.py:154
#: voice.py:135
#, python-brace-format
msgid ""
"I've been pwning for {duration} and kicked {deauthed} clients! I've also met "

@ -2,8 +2,6 @@ import os
import glob
import importlib, importlib.util
# import core
default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default")
loaded = {}

@ -1,4 +1,5 @@
from PIL import Image
from textwrap import TextWrapper
class Widget(object):
@ -39,14 +40,21 @@ class FilledRect(Widget):
class Text(Widget):
def __init__(self, value="", position=(0, 0), font=None, color=0):
def __init__(self, value="", position=(0, 0), font=None, color=0, wrap=False, max_length=0):
super().__init__(position, color)
self.value = value
self.font = font
self.wrap = wrap
self.max_length = max_length
self.wrapper = TextWrapper(width=self.max_length, replace_whitespace=False) if wrap else None
def draw(self, canvas, drawer):
if self.value is not None:
drawer.text(self.xy, self.value, font=self.font, fill=self.color)
if self.wrap:
text = '\n'.join(self.wrapper.wrap(self.value))
else:
text = self.value
drawer.text(self.xy, text, font=self.font, fill=self.color)
class LabeledValue(Widget):

@ -15,3 +15,4 @@ LONELY = '(ب__ب)'
SAD = '(╥☁╥ )'
FRIEND = '(♥‿‿♥)'
BROKEN = '(☓‿‿☓)'
DEBUG = '(#__#)'

@ -6,9 +6,11 @@ class State(object):
self._state = state
self._lock = Lock()
self._listeners = {}
self._changes = {}
def add_element(self, key, elem):
self._state[key] = elem
self._changes[key] = True
def add_listener(self, key, cb):
with self._lock:
@ -22,10 +24,29 @@ class State(object):
with self._lock:
return self._state[key].value if key in self._state else None
def reset(self):
with self._lock:
self._changes = {}
def changes(self, ignore=()):
with self._lock:
changes = []
for change in self._changes.keys():
if change not in ignore:
changes.append(change)
return changes
def has_changes(self):
with self._lock:
return len(self._changes) > 0
def set(self, key, value):
with self._lock:
if key in self._state:
prev = self._state[key].value
self._state[key].value = value
if key in self._listeners and self._listeners[key] is not None and prev != value:
self._listeners[key](prev, value)
if prev != value:
self._changes[key] = True
if key in self._listeners and self._listeners[key] is not None:
self._listeners[key](prev, value)

@ -78,22 +78,25 @@ class View(object):
label_font=fonts.Bold,
text_font=fonts.Medium),
# 'square': Rect([1, 11, 124, 111]),
'line1': Line([0, int(self._height * .12), self._width, int(self._height * .12)], color=BLACK),
'line2': Line(
[0, self._height - int(self._height * .12), self._width, self._height - int(self._height * .12)],
color=BLACK),
# 'histogram': Histogram([4, 94], color = BLACK),
'face': Text(value=faces.SLEEP, position=face_pos, color=BLACK, font=fonts.Huge),
'friend_face': Text(value=None, position=(0, 90), font=fonts.Bold, color=BLACK),
'friend_name': Text(value=None, position=(40, 93), font=fonts.BoldSmall, color=BLACK),
'name': Text(value='%s>' % 'pwnagotchi', position=name_pos, color=BLACK, font=fonts.Bold),
# 'face2': Bitmap( '/root/pwnagotchi/data/images/face_happy.bmp', (0, 20)),
'status': Text(value=self._voice.default(), position=status_pos, color=BLACK, font=fonts.Medium),
'status': Text(value=self._voice.default(),
position=status_pos,
color=BLACK,
font=fonts.Medium,
wrap=True,
# the current maximum number of characters per line, assuming each character is 6 pixels wide
max_length=(self._width - status_pos[0]) // 6),
'shakes': LabeledValue(label='PWND ', value='0 (00)', color=BLACK,
position=(0, self._height - int(self._height * .12) + 1), label_font=fonts.Bold,
@ -107,7 +110,12 @@ class View(object):
plugins.on('ui_setup', self)
_thread.start_new_thread(self._refresh_handler, ())
if config['ui']['fps'] > 0.0:
_thread.start_new_thread(self._refresh_handler, ())
self._ignore_changes = ()
else:
core.log("ui.fps is 0, the display will only update for major changes")
self._ignore_changes = ('uptime', 'name')
def add_element(self, key, elem):
self._state.add_element(key, elem)
@ -229,12 +237,12 @@ class View(object):
if sleeping:
if secs > 1:
self.set('face', faces.SLEEP)
self.set('status', self._voice.on_napping(secs))
self.set('status', self._voice.on_napping(int(secs)))
else:
self.set('face', faces.SLEEP2)
self.set('status', self._voice.on_awakening())
else:
self.set('status', self._voice.on_waiting(secs))
self.set('status', self._voice.on_waiting(int(secs)))
if step % 2 == 0:
self.set('face', faces.LOOK_R)
else:
@ -300,15 +308,24 @@ class View(object):
self.set('status', self._voice.on_rebooting())
self.update()
def on_custom(self, text):
self.set('face', faces.DEBUG)
self.set('status', self._voice.custom(text))
self.update()
def update(self):
with self._lock:
self._canvas = Image.new('1', (self._width, self._height), WHITE)
drawer = ImageDraw.Draw(self._canvas)
changes = self._state.changes(ignore=self._ignore_changes)
if len(changes):
self._canvas = Image.new('1', (self._width, self._height), WHITE)
drawer = ImageDraw.Draw(self._canvas)
plugins.on('ui_update', self)
plugins.on('ui_update', self)
for key, lv in self._state.items():
lv.draw(self._canvas, drawer)
for key, lv in self._state.items():
lv.draw(self._canvas, drawer)
for cb in self._render_cbs:
cb(self._canvas)
for cb in self._render_cbs:
cb(self._canvas)
self._state.reset()

@ -0,0 +1 @@
version = '1.0.0travistest'

@ -18,74 +18,74 @@ class Voice:
return self._('ZzzzZZzzzzZzzz')
def on_starting(self):
return random.choice([ \
self._('Hi, I\'m Pwnagotchi!\nStarting ...'),
self._('New day, new hunt,\nnew pwns!'),
return random.choice([
self._('Hi, I\'m Pwnagotchi! Starting ...'),
self._('New day, new hunt, new pwns!'),
self._('Hack the Planet!')])
def on_ai_ready(self):
return random.choice([
self._('AI ready.'),
self._('The neural network\nis ready.')])
self._('The neural network is ready.')])
def on_normal(self):
return random.choice([ \
return random.choice([
'',
'...'])
def on_free_channel(self, channel):
return self._('Hey, channel {channel} is\nfree! Your AP will\nsay thanks.').format(channel=channel)
return self._('Hey, channel {channel} is free! Your AP will say thanks.').format(channel=channel)
def on_bored(self):
return random.choice([ \
return random.choice([
self._('I\'m bored ...'),
self._('Let\'s go for a walk!')])
def on_motivated(self, reward):
return self._('This is the best\nday of my life!')
return self._('This is the best day of my life!')
def on_demotivated(self, reward):
return self._('Shitty day :/')
def on_sad(self):
return random.choice([ \
return random.choice([
self._('I\'m extremely bored ...'),
self._('I\'m very sad ...'),
self._('I\'m sad'),
'...'])
def on_excited(self):
return random.choice([ \
return random.choice([
self._('I\'m living the life!'),
self._('I pwn therefore I am.'),
self._('So many networks!!!'),
self._('I\'m having so much\nfun!'),
self._('My crime is that of\ncuriosity ...')])
self._('I\'m having so much fun!'),
self._('My crime is that of curiosity ...')])
def on_new_peer(self, peer):
return random.choice([ \
self._('Hello\n{name}!\nNice to meet you. {name}').format(name=peer.name()),
self._('Unit\n{name}\nis nearby! {name}').format(name=peer.name())])
return random.choice([
self._('Hello {name}! Nice to meet you. {name}').format(name=peer.name()),
self._('Unit {name} is nearby! {name}').format(name=peer.name())])
def on_lost_peer(self, peer):
return random.choice([ \
self._('Uhm ...\ngoodbye\n{name}').format(name=peer.name()),
self._('{name}\nis gone ...').format(name=peer.name())])
return random.choice([
self._('Uhm ... goodbye {name}').format(name=peer.name()),
self._('{name} is gone ...').format(name=peer.name())])
def on_miss(self, who):
return random.choice([ \
self._('Whoops ...\n{name}\nis gone.').format(name=who),
self._('{name}\nmissed!').format(name=who),
return random.choice([
self._('Whoops ... {name} is gone.').format(name=who),
self._('{name} missed!').format(name=who),
self._('Missed!')])
def on_lonely(self):
return random.choice([ \
self._('Nobody wants to\nplay with me ...'),
return random.choice([
self._('Nobody wants to play with me ...'),
self._('I feel so alone ...'),
self._('Where\'s everybody?!')])
def on_napping(self, secs):
return random.choice([ \
return random.choice([
self._('Napping for {secs}s ...').format(secs=secs),
self._('Zzzzz'),
self._('ZzzZzzz ({secs}s)').format(secs=secs)])
@ -94,7 +94,7 @@ class Voice:
return random.choice(['...', '!'])
def on_waiting(self, secs):
return random.choice([ \
return random.choice([
self._('Waiting for {secs}s ...').format(secs=secs),
'...',
self._('Looking around ({secs}s)').format(secs=secs)])
@ -102,23 +102,23 @@ class Voice:
def on_assoc(self, ap):
ssid, bssid = ap['hostname'], ap['mac']
what = ssid if ssid != '' and ssid != '<hidden>' else bssid
return random.choice([ \
self._('Hey\n{what}\nlet\'s be friends!').format(what=what),
self._('Associating to\n{what}').format(what=what),
self._('Yo\n{what}!').format(what=what)])
return random.choice([
self._('Hey {what} let\'s be friends!').format(what=what),
self._('Associating to {what}').format(what=what),
self._('Yo {what}!').format(what=what)])
def on_deauth(self, sta):
return random.choice([ \
self._('Just decided that\n{mac}\nneeds no WiFi!').format(mac=sta['mac']),
self._('Deauthenticating\n{mac}').format(mac=sta['mac']),
self._('Kickbanning\n{mac}!').format(mac=sta['mac'])])
return random.choice([
self._('Just decided that {mac} needs no WiFi!').format(mac=sta['mac']),
self._('Deauthenticating {mac}').format(mac=sta['mac']),
self._('Kickbanning {mac}!').format(mac=sta['mac'])])
def on_handshakes(self, new_shakes):
s = 's' if new_shakes > 1 else ''
return self._('Cool, we got {num}\nnew handshake{plural}!').format(num=new_shakes, plural=s)
return self._('Cool, we got {num} new handshake{plural}!').format(num=new_shakes, plural=s)
def on_rebooting(self):
return self._("Ops, something\nwent wrong ...\nRebooting ...")
return self._("Ops, something went wrong ... Rebooting ...")
def on_log(self, log):
status = self._('Kicked {num} stations\n').format(num=log.deauthed)
@ -137,3 +137,6 @@ class Voice:
deauthed=log.deauthed,
associated=log.associated,
handshakes=log.handshakes)
def custom(self, text):
return self._(text)

@ -10,3 +10,4 @@ file_read_backwards
numpy
inky
smbus
pillow

@ -9,5 +9,3 @@ if ifconfig | grep usb0 | grep RUNNING; then
else
sudo -H -u root /usr/bin/screen -dmS pwnagotchi -c /root/pwnagotchi/data/screenrc.auto
fi