To use lua with client you should write lua script. You can specify it from config ("lua_script" option) or from command_line [-s].

It should have several functions:
  on_binlog_replay_end() - it is called when replay of old events end. Any updates prior this call were already received by this client
                           some time ago. 
  
  on_get_difference_end() - it is called after first get_difference call. So we received all updates after last client execute.

  on_our_id(our_id) - Informs about id of currently logged in user.

  on_msg_receive(msg) - it is called when we receive new msg (!! may be called before on_binlog_replay_end, than it is old msg).

  on_user_update(user,what_changed) - updated info about user. what_changed is array of strings.
  on_chat_update(user,what_changed) - updated info about user. what_changed is array of strings.
  on_secret_chat_update(user,what_changed) - updated info about user. what_changed is array of strings.



Also, you can call several functions. Each this function last two arguments, are cb_function and cb_extra.
These functions may return false immidiately if something is bad with args, or return true and call cb_function in future.
cb_function would have two or three arguments: first cb_extra, second success (1 or 0), third result (if applicable).

If you want to pass msg to function, you should pass it's id.
If you want to pass peer to function, you should pass it's print_name.
Or, you can pass string user#id<id> chat#id<id> and secret_chat#id<id> as peer. It is in some cases better. For example if you want to postpone and you are afraid, that print_name would be changed in the meantime. 

Function_list (arguments are listed aside from cb_function and cb_extra, :
  get_contact_list ()
  get_dialog_list ()
  
  rename_chat (chat, new_name)
  chat_set_photo (chat, file)
  
  send_typing (peer)
  send_typing_abort (peer)
  
  send_msg (peer, text)
  fwd_msg (peer, msg)
  
  send_photo (peer, file)
  send_video (peer, file)
  send_audio (peer, file)
  send_document (peer, file)
  send_text (peer, file)

  load_photo(msg)
  load_video(msg)
  load_video_thumb(msg)
  load_audio(msg)
  load_document(msg)
  load_document_thumb(msg)

  chat_info (chat)
  channel_info (channel)
  user_info (user)

  get_history (peer, limit)
  
  chat_add_user (chat, user)
  chat_del_user (chat, user)
  
  add_contact (phone, first_name, last_name)
  rename_contact (phone, first_name, last_name) 
  
  msg_search (peer, text)
  msg_global_search (text)

  mark_read (peer)

  set_profile_photo (file)
  
  create_secret_chat (user)
  create_group_chat (user, name)
  
  delete_msg (msg)
  restore_msg (number)

  status_online ()
  status_offline ()

  send_location (peer, latitude, longitude)

Also, you have function 
  postpone (cb_function, cb_extra, timeout). It will call your cb_function in specified number of seconds (number of seconds may be double).
  register_interface_function (name, cb_function, cb_arg, description, arg1_type, arg2_type, ...) adds function to CLI interface
