Пишем плагины сами! - Плагины - Talisman bot - Jabber - Форум
Четверг, 09.09.2010, 00:55
Приветствую Вас Гость | RSS
Главная | Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 121231112»
Форум » Jabber » Плагины - Talisman bot » Пишем плагины сами! (Для тех кто хочет научиться писать плагины)
Пишем плагины сами!
Gigabyte Дата: Понедельник, 02.03.2009, 02:08 | Сообщение # 1
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Чем смогу - помогу. А пока советую почитать АПИ бота вот тут, собственно тут можно задать любой вопрос о плагинописании.
Так же вам понадобиться инструмент для работы с питоном, взять его можно тут.

Чуть не забыл, приаттачил знаменитый HELLO WORLD!

Прикрепления: helloworld_plug.py(0Kb)



 
Leok Дата: Понедельник, 02.03.2009, 12:13 | Сообщение # 2
Помощник владельца
Группа: Проверенные
Сообщений: 21
Репутация: 0
Статус: Offline
Серег.. не зна даж как понятно объяснить.. вот я решила сама все набрать, и у меня не закрывается после def hello_world(type, source, parametrs):
res = random.choice([u'Привет, мир!', u'', u'', u''])
reply(type, source, res)
(должно закрыться) а у меня так и идет, как будто входит в эту команду, хотела скрин прилепить, но не поняла как
 
Gigabyte Дата: Понедельник, 02.03.2009, 22:39 | Сообщение # 3
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Так сказать урок номер два, реализация просмотра всех сообщений идущих через бота и срабатывание на слово "привет" давая ответ рандомной фразой.

В аттаче исходник

Прикрепления: helloworld2_plu.py(1Kb)



 
Leok Дата: Вторник, 03.03.2009, 00:57 | Сообщение # 4
Помощник владельца
Группа: Проверенные
Сообщений: 21
Репутация: 0
Статус: Offline
Щас щас)) посмотрю)) ты мои мысли опережаешь))) Еще ведь можно его и прощаться научиться)) на команду пока)

Добавлено (03.03.2009, 00:44)
---------------------------------------------
Блин, не работает((( глянь пож, что не так?

Code
#===istalismanplugin===
# -*- coding: utf-8 -*-

def hello_world(type, source, parameters):
  res = random.choice([u'Приветик!', u'Здравствуйте!', u'Доброго дня', u'И вам привет', u'Привет! Рад, что ты здесь!', u'Ооо..Какие люди.. <img src="http://s4.ucoz.net/sm/23/smile.gif" border="0" align="absmiddle" alt="smile"> Привет-привет!'])
  body = parameters.lower()
  if (body.count(u'привет') > 0) & (source[2] != get_bot_nick(source[1])):  
   reply(type, source, res)  

register_command_handler(hello_world, 'привет', ['все'], 0, 'просто привет', 'привет', ['привет'])

Добавлено (03.03.2009, 00:57)
---------------------------------------------
нашла ошибку

 
ezenomera Дата: Вторник, 03.03.2009, 03:23 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
А как сделать, чтобы он отвечал и на различные вариации "привет"?
 
Gigabyte Дата: Вторник, 03.03.2009, 08:26 | Сообщение # 6
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Leok, обрати внимание на последнюю строку, в моем примере мы регисрируем не тот момент когда пользователь сам вызовет команду, а регистрируем абсолютно все сообщения функцией register_message_handler(hello_world3) а не register_command_handler(hello_world, 'привет', ['все'], 0, 'просто привет', 'привет', ['привет'])


 
Gigabyte Дата: Вторник, 03.03.2009, 08:27 | Сообщение # 7
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
ezenomera, конкретнее? собственно он будет отвечать на привет, приветы, приветик, приветище и на любые другие слова с "корнем" привет


 
Leok Дата: Вторник, 03.03.2009, 11:00 | Сообщение # 8
Помощник владельца
Группа: Проверенные
Сообщений: 21
Репутация: 0
Статус: Offline
Gigabyte, ага.. исправила))) там и был косяк)) Терь такая мысль- можно ли в if еще добавить чтоб он здоровался, напр, не только на привет, но и на здравствуй? (как вариант)
И я хоч сделать, чтоб он прощался, это надо отдельный плаг или в этом можно функцию добавить?
 
virus Дата: Вторник, 03.03.2009, 11:33 | Сообщение # 9
Рядовой
Группа: Проверенные
Сообщений: 13
Репутация: 0
Статус: Offline
Gigabyte, интересные примеры;) продолжай в томже духе!!!
 
Gigabyte Дата: Вторник, 03.03.2009, 17:01 | Сообщение # 10
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Quote (Leok)
Терь такая мысль- можно ли в if еще добавить чтоб он здоровался, напр, не только на привет, но и на здравствуй? (как вариант)

Окружаем скобками первое условие до логической операции "и" и внутри скобок добавляем условия на каждое слово разделяя условия логическим "или"
if ( (body.count(u'привет') > 0) | (body.count(u'здравствуй') > 0) | (body.count(u'здарова') > 0) ) & (source[2] != get_bot_nick(source[1])):

Quote (Leok)
И я хоч сделать, чтоб он прощался, это надо отдельный плаг или в этом можно функцию добавить?

Добавляем кострукцию ниже подобную
Code
  if (body.count(u'привет') > 0) & (source[2] != get_bot_nick(source[1])):   
    reply(type, source, res)

только для "пока", можно использовать модификацию этой конструкции описанную выше в посте



 
Leok Дата: Среда, 04.03.2009, 03:00 | Сообщение # 11
Помощник владельца
Группа: Проверенные
Сообщений: 21
Репутация: 0
Статус: Offline
С трудом и твой помощью сделала.. Спасиб.. Как "Пока" сделать в этом же плаге, пока не понима..
 
Gigabyte Дата: Среда, 04.03.2009, 09:00 | Сообщение # 12
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Leok, не понимаю в чем проблемы. В аттаче мод на 3 действия: привет, пока и пиво happy tongue
Прикрепления: helloworld2_plu.py(2Kb)



 
Gigabyte Дата: Среда, 04.03.2009, 09:59 | Сообщение # 13
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
Ещё один урок! Учим бота понимать к нему ли обращаются или нет!

Пример в аттаче, а делаем буквадьно следущее:

Code
        botnick = get_bot_nick(source[1])
           if parameters.split(' ')[0].count(botnick) > 0:
                   forme = 1
           else:
                   forme = 0

Здесь в строке botnick = get_bot_nick(source[1]) присваиваем текущий ник бота ля конференции в переменную botnick
if parameters.split(' ')[0].count(botnick) > 0:,
тут сначала parameters разбивается на массив слов конструкцией parameters.split(' '),
затем берем первый элемент массива (не забываем что нумерация с нуля) конструкцией parameters.split(' ')[0] как правило первый элемент это ник (если обращение по нику идет), в противном случае это не обращение вовсе smile
Затем ищем в первом элементе массива ник бота конструкцией parameters.split(' ')[0].count(botnick) и проверяем условием найдено ли больше нуля или нет if parameters.split(' ')[0].count(botnick) > 0:

Ну а дальше дело технии, а вернее дело IF, если условие верно, то есть найден ник в первом элементе массива, то forme получит значение 1, если ложно то 0.
Теперь в дальнейших условиях где необходимо чтобы обратились именно к боту просто проверим равна ли forme единице?

Пример:

Code
        if ( (body.count(u'как дела') > 0) | (body.count(u'как ты') > 0) ) & (source[2] != botnick ) & (forme == 1):
                   res = random.choice([u'Я отлично! Сам как?', u'Фсегда не позитиве!!!'])
                   reply(type, source, res)
Прикрепления: helloworld3_plu.py(4Kb)



 
Leok Дата: Четверг, 05.03.2009, 20:09 | Сообщение # 14
Помощник владельца
Группа: Проверенные
Сообщений: 21
Репутация: 0
Статус: Offline
Серег.. еле еле сделала... Ошибки в словах делаю(((
Щас работает)) Мне нравиться)) Щас с ником буду разбираться

Добавлено (05.03.2009, 15:34)
---------------------------------------------
Серег.. Пока распознавание ника не прописывала, просто добавила

Code
if ( (body.count(u'как дела') > 0) | (body.count(u'как настроение') > 0) | (body.count(u'') > 0) ) & (source[2] != get_bot_nick(source[1])):
   res = random.choice([u'Отлично! Как ты?', u'Позитифф!', u'Я счастлив :-D', u'Измучен тяжелой неволей :(',u'Я огорчен.. меня никто не любит ;(', u'Ну так... Если б вы не обзывались, был бы счастлив', u'Замечательно! Я люблю вас, друзья'])
   reply(type, source, res)

в общий плаг, и он мне отвечает после любого поста..
вот типа-
12:20:46] Нектария: как ты?
[12:20:46] Cronchik: Нектария: Измучен тяжелой неволей
[12:21:00] Нектария: как дела?
[12:21:01] Cronchik: Нектария: Я огорчен.. меня никто не любит
[12:21:45] Нектария: крон, как ты поживаешь:
[12:21:46] Cronchik: Нектария: Измучен тяжелой неволей
[12:21:48] Zhenyak: нек
[12:21:49] Cronchik: Zhenyak: Ну так... Если б вы не обзывались, был бы счастлив
[12:22:14] Нектария: хм
[12:22:15] Cronchik: Нектария: Позитифф!
[12:22:19] Нектария: куку
[12:22:20] Cronchik: Нектария: Я огорчен.. меня никто не любит
[12:22:25] Нектария: мда
[12:22:25] Cronchik: Нектария: Позитифф!
[12:22:30] Нектария: стоп
[12:22:30] Cronchik: Нектария: Ну так... Если б вы не обзывались, был бы счастлив
_____________
почему так?

Добавлено (05.03.2009, 15:36)
---------------------------------------------
интересно, почему он на каждый пост отвечает?

Добавлено (05.03.2009, 15:37)
---------------------------------------------
и даже сам себе отвечает-
Нектария: привет!
[12:35:44] Cronchik: Нектария: Приветик!
[12:35:45] Cronchik: Нектария: Ну так... Если б вы не обзывались, был бы счастлив

Добавлено (05.03.2009, 15:55)
---------------------------------------------
Серега.. поняла в чем проблема.. я в одном условии не написала ничего)) (body.count(u'') > 0) гг..
щас функцию распознавания ника буду писать.. (вернее, списывать wacko )

Добавлено (05.03.2009, 20:09)
---------------------------------------------
Серега))))) Все, сделала, все работает, Урок усвоен))))

 
Gigabyte Дата: Пятница, 06.03.2009, 11:56 | Сообщение # 15
Owner
Группа: Администраторы
Сообщений: 331
Репутация: 141
Статус: Offline
%) Как многа информации. Я сёдня бухаю, так что новый урок напишу уже.. ммм... в понедельник наверна :D


 
Форум » Jabber » Плагины - Talisman bot » Пишем плагины сами! (Для тех кто хочет научиться писать плагины)
Страница 1 из 121231112»
Поиск:

Copyright Gigabyte © 2010