Как сохранять историю Skype

Мне сильно не нравится, когда собеседник удаляет в «Скайпе» свои сообщения. Бывает, что я их не успеваю прочитать, это печально. Я подумал, что было бы неплохо научиться их куда-то логировать, попробовал несколько модулей для «Пайтона», все они на «Маке» падают.

К счастью, «Скайп» хранит свою историю в SQLite, а там, как оказалось, есть триггеры. В общем, простой способ сохранять историю — создать ещё одну таблицу и триггер, который будет висеть на операции INSERT и копировать все новые сообщения в нашу таблицу:
CREATE TABLE Messages_backup (timestamp int, author text, body_xml text); -- таблица, где будут храниться сообщения

-- А вот и наш триггер, причём посмотрите, после WHEN у меня идёт условие, я сохраняю только сообщения
-- от пользователя megadestroyer, это условие можно убрать (вместе с WHEN)
-- или написать туда через OR несколько логинов  
CREATE TRIGGER Messages_insert INSERT ON Messages WHEN new.author='megadestroyer'
  BEGIN
    INSERT INTO Messages_backup VALUES(new.timestamp, new.author, new.body_xml);
  END;
Создать таблицу и тригер очень просто, база SQLite — это просто файл (вам нужен файл «main.db»), который лежит где-то у вас на диске (можно в интренете поискать, гуглится элементарно), у меня на «Маке» он лежит в папке «~/Library/Application Support/Skype/bolknote.#». Его надо открыть утилитой sqlite3 (на «Маке» она уже есть) и выполнить эти команды.

После чего, если захочется прочитать что же удалил собеседник, там же, в sqlite3, можно будет выполнять команду
select * from Messages_backup;
и видеть весь лог сообщений, включая удалённые пользователем.
23 октября 2012 09:53

KAndy (инкогнито)
23 октября 2012, 11:04

Первое что пришло в голову: Почему триггер для удаленных записей на поставлен на добавление, а не на удаление записи?

bolk (bolknote.ru)
23 октября 2012, 11:09, ответ предназначен KAndy

Т.е. чтобы сохранять только удалённые? Мне удобнее видеть остальные сообщения этого диалога, хотя это тоже способ, да.

bolk (bolknote.ru)
23 октября 2012, 11:10, ответ предназначен KAndy

После обеда и его добавлю тоже.

http://platosha-ru.livejourna.com (инкогнито)
23 октября 2012, 11:42

На «Маке» есть ещё способ без хитрых команд — настроить Skype на показ уведомлений при помощи Growl. В Growl есть своя история уведомлений, из которой Skype уже не сможет удалить сообщение.

Также в Growl есть много способов отображения уведомлений вплоть до отправки сообщения по эл. почте и sms.

bolk (bolknote.ru)
23 октября 2012, 12:24, ответ предназначен http://platosha-ru.livejourna.com

Для меня мой способ проще :)

bolk (bolknote.ru)
23 октября 2012, 13:42, ответ предназначен KAndy

Удаления как такового, оказывается, нет. Делается это через UPDATE, а этих апдейтов там куча на всякий чих.

Михаил Иванов (m-ivanov.livejournal.com)
23 октября 2012, 17:52

А как догадаться, что сообщения вообще были, но теперь удалены? Скайп об этом пишет?

Vladimir (инкогнито)
23 октября 2012, 17:53

В Windows7 Skype удаляет новую таблицу после старта.

LaFut (инкогнито)
23 октября 2012, 19:34, ответ предназначен Vladimir

Подозреваю стоит попробовать сделать это от администратора.

bolk (bolknote.ru)
23 октября 2012, 19:40, ответ предназначен Михаил Иванов (m-ivanov.livejournal.com):

А как догадаться, что сообщения вообще были, но теперь удалены? Скайп об этом пишет?
Да.

bolk (bolknote.ru)
23 октября 2012, 19:42, ответ предназначен Vladimir

Запуск от админа не поможет, у SQLite нет авторизации. Тогда можно сунуть скрипт создания таблицы и тригера после запуска skype.exe, т.е. сделать батник с запуском в фоне skype, а после — создания таблицы.

Agonych (agonych.livejournal.com)
24 октября 2012, 03:34, ответ предназначен bolk (bolknote.ru):

Забавно. Но зачем заморачиваться с удаленными сообщениями? По моему если человек хотел удалть свое сообщение - ну значит пусть удаляет.

bolk (bolknote.ru)
24 октября 2012, 06:04, ответ предназначен Agonych (agonych.livejournal.com):

Пусть удаляет, но мне хочется его прочитать :)

Николай (инкогнито)
24 октября 2012, 20:47

Извини что здесь, но - продолжение.

http://www.gazeta.ru/social/2012/10/24/4823121.shtml

Это то, о чем я говорил. Жизнь в Казани - опасна.

bolk (bolknote.ru)
25 октября 2012, 08:15, ответ предназначен Николаю

По сравнению с каким городом опасна?

Николай (инкогнито)
25 октября 2012, 14:21

А с каким городом ты сравнивал Казань пару-тройку постов назад?

bolk (bolknote.ru)
25 октября 2012, 14:55, ответ предназначен Николаю

Ты про Москву что ли? Ты серьёзно сейчас? Я просто поверить не могу. С чего, интересно, ты взял, что в Москве безопаснее? Пару-тройку постов назад, ты, кстати, ничего мне не ответил на мой комментарий тебе: http://bolknote.ru/2012/10/14/~3774#n36695

Николай (инкогнито)
25 октября 2012, 17:06

не ответил, потому что ты спросил очевидную глупость. Вероятность ТАКОГО (тупых идиотов в центре города) в Москве минимальна, в разы меньше чем в Казани.

Я тебе приведу пример - моему брату зам. министра МВД Татарстана под микрофон сказал - "Да, действия сотрудников МВД в отношении вас - незаконный досмотр, фальсификация протокола, и тп - следствие приказа по МВД - требовать выполнения требований любой ценой. За законность требуемых действий рядовые исполнители не отвечают и не могут отвечать, т.к. они получили приказ от своего командира. А что делать... Кстати, раз ты такой законник, иди к нам в штат, нам такие нужны!"

Ты вдумайся - зам министра МВД (!) в открытую (!!) говорит, что рядовые исполнители - сотрудники полиции - не гарантируют законности своих требований (!!!). А полиции в Казани оооочень много. Одна вчерашняя стрельба чего стоит.

Дикость. Что было в 1995 году, то и осталось сейчас. В этом отношении Москва - оплот страны.

ps: думал, писать или нет, но все же напишу. Даже на митингах поведение полиции в Москве и в других городах - да том же Татарстане - отличается в разы. В десятки раз.

bolk (bolknote.ru)
25 октября 2012, 19:16, ответ предназначен Николаю

Ох, Николай, честно сказать, не понимаю вообще ничего из того что ты говоришь. Давай закончим.

Werdn (werdn666.ya.ru)
26 октября 2012, 19:31

Я установил плагин для Pidgin, тоже ведет неудаляемый лог, записывает все модификации сообщений, кроме того, имеется более удобный поиск

bolk (bolknote.ru)
27 октября 2012, 07:29, ответ предназначен Werdn (werdn666.ya.ru):

Ну он страшненький же (сам клиент).

Михаил (инкогнито)
9 ноября 2012, 16:14

а почему может так быть что в директории «~/Library/Application Support» нету директории Skype, хотя он установлен.

bolk (bolknote.ru)
9 ноября 2012, 20:28, ответ предназначен Михаилу

Вот уж не знаю. Попробуйте найти директорию Skype командой

find / -type d -name Skype 2>&-

Михаил (инкогнито)
20 ноября 2012, 12:28

Долго, но допендрил, есть две папки Library видимо.
Та которая нужна почему-то скрыта, в нее надо входить через открытый фаиндр с «cmd+shift+G» и дальше ~/Library/ И там будет, то что нужно.
Извините если это слишком очевидная вещь, пишу, вдруг кому-то пригодится. Я недавно OS X использую поэтому на каждом шагу пока натыкаюсь на такие «необъяснимые» штуки.

bolk (bolknote.ru)
20 ноября 2012, 16:38, ответ предназначен Михаилу

Я, когда пишу, подразумеваю, что все эти действия в консоли будут делаться :)

PROger4ever (инкогнито)
14 марта 2014, 23:31

Указанный скрипт не работает. Написал свой. Он просто отменяет удаление, добавляет (AntiDeleteMessageTechnology) перед сообщением и оставляет его пометку "отредактировано". Сообщение можно увидеть в базе или после пару перезапусков skype:
CREATE TRIGGER AntiDeleteMessageTechnology AFTER UPDATE ON Messages WHEN new.body_xml='' BEGIN
UPDATE Messages SET body_xml = ('(AntiDeleteMessageTechnology)' || COALESCE(OLD.body_xml, ''))
WHERE id = NEW.id;
END;

PROger4ever (инкогнито)
15 марта 2014, 00:37

Поправил:
CREATE TRIGGER AntiDeleteMessageTechnology AFTER UPDATE OF body_xml ON Messages WHEN NEW.body_xml=''
BEGIN
  UPDATE Messages
  SET body_xml = ('(AntiDeleteMessageTechnology)' || COALESCE(OLD.body_xml, ''))
  WHERE id = NEW.id;
END;

Сообщение видно либо в базе, либо после написания нескольких следующих и последующего перезапуска skype

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)