私はチャットアプリケーションのためにEjabberdサーバーを使用しています。それはarhieveテーブルにメッセージを保存するために働くが、メッセージが送信されるときにテーブルに追加のフィールドを保存したい。このフィールドはメッセージごとに表示されます。Ejabberd mod_mam(メッセージアーカイブ管理、XEP-0313)を使用してアーカイブテーブルに余分なフィールドを保存する方法は?
0
A
答えて
0
イゴール、あなたの答えをありがとう、有望に見えるが、私はここで共有したい何かをした。 このリンクの助けを借りてソースコードからejabberdをインストールしましたhttp://www.blikoon.com/networking/how-to-install-ejabberd-on-linux-ubuntu 次に、srcフォルダのmod_mam_sql.erlファイルを変更しました。 変更されたコードは次のとおりです。私はモジュールを再コンパイルし、うまくいった。
Body = fxml:get_subtag_cdata(Pkt, <<"body">>),
Resid = fxml:get_subtag_cdata(Pkt, <<"resid">>),
Ownuid = fxml:get_subtag_cdata(Pkt, <<"ownuid">>),
SType = jlib:atom_to_binary(Type),
case ejabberd_sql:sql_query(
LServer,
?SQL("insert into archive (username, timestamp,"
" peer, bare_peer, xml, txt, kind, nick,resid,Ownuid) values ("
\t "%(SUser)s, "
\t "%(TSinteger)d, "
\t "%(LPeer)s, "
\t "%(BarePeer)s, "
\t "%(XML)s, "
\t "%(Body)s, "
\t "%(SType)s, "
\t "%(Nick)s, "
\t "%(Resid)s, "
\t "%(Ownuid)s)")) of
{updated, _} ->
{ok, ID};
0
これを達成する方法がいくつかあります。 最初の最も簡単な方法(ただし、 'アーカイブ'テーブルの 'xml'フィールドにのみ影響します)は、カスタムモジュールの 'store_mam_message'フックの実装です。そのフックの中でパケットを修正し、DBに保存されるべき新しいパケットを返すことができます。あなたは「アーカイブ」テーブルを変更した場合、このフックは(新しい列が追加されました)v16.09
以降で使用可能です、そして、第二の方法は役立ちます:
カスタムモジュールを作成し、それを呼び出します"mod_mam _sql2"
コピーカスタムモジュール
に "SRC/mod_mam_sql.erl" の内容は、機能ストア/ 7を検索します。
store(Pkt, LServer, {LUser, LHost}, Type, Peer, Nick, _Dir) -> TSinteger = p1_time_compat:system_time(micro_seconds), ID = jlib:integer_to_binary(TSinteger), SUser = case Type of chat -> LUser; groupchat -> jid:to_string({LUser, LHost, >}) end, BarePeer = jid:to_string( jid:tolower( jid:remove_resource(Peer))), LPeer = jid:to_string( jid:tolower(Peer)), XML = fxml:element_to_binary(Pkt), Body = fxml:get_subtag_cdata(Pkt, >), SType = jlib:atom_to_binary(Type), case ejabberd_sql:sql_query( LServer, ?SQL("insert into archive (username, timestamp," " peer, bare_peer, xml, txt, kind, nick) values (" "%(SUser)s, " "%(TSinteger)d, " "%(LPeer)s, " "%(BarePeer)s, " "%(XML)s, " "%(Body)s, " "%(SType)s, " "%(Nick)s)")) of {updated, _} -> {ok, ID}; Err -> Err end.
変更SQLクエリあなたは
を必要とするよう、カスタムモジュールをコンパイルしますejabberdctl module_install mod_mam_sql2
更新ejabberd.yml設定ファイル
mod_mam: db_type: sql2
再起動ejabberdサーバ:ejabberdctl restart
私はあなたの問題を解決するのに役立つことを願っています。
関連する問題
- 1. Ejabberdのメッセージアーカイブ管理(mod_mam)データベースにCassandraを使用する16.09
- 2. Ejabberd mod_mamエラー
- 3. ubuntuでejabberd用mod_mamを追加12.04
- 4. Djangoモデル;保存時にManyToManyフィールドに余分な項目を保存する
- 5. 大きなファイルを保存して管理する方法
- 6. Djangoサインアップでデータベースに余分なフィールドを保存しません
- 7. 管理者がフォームに余分なマッピングされていないフィールドをリアルタイムで追加する方法(symfony3)
- 8. TFSパッケージ管理に保存ポリシーを適用する方法
- 9. ejabberd:ストリーム管理
- 10. ASP.NET MVC余分なテーブルを使用してユーザープロファイルを保存できますか?
- 11. Ejabberdのアーカイブテーブル(mod_archive)に重複しているエントリ
- 12. ejabberdはオフラインチャットをスプールテーブルに保存する方法
- 13. ejabberd 16.04でmod_mamのバックエンドとしてRiakを使用するにはどうすればよいですか?
- 14. Wordpress Custom Taxonomy余分なフィールドが保存されない
- 15. Kerberosを使用してスタンドアロンインストールでSolr管理パネルを保護する方法は?
- 16. mod_mamにcassandraを使用するようにejabberdを設定してください
- 17. Magento管理パネルにカスタムフィールドを保存する方法
- 18. 管理者でファイルを開く方法、バットを使用して編集して保存する
- 19. カスタム管理テーブルを使用して管理ページにリダイレクトする方法
- 20. java.util.Listを使用して余分なテーブルに@ManyToManyをマッピングする方法
- 21. クエリを使用してmysqlに余分な時間を追加する方法
- 22. mysqlデータベースを使用してシングルスレッドジョブを管理する方法は?
- 23. Trelloを使用して容量を管理する方法は?
- 24. Pythonは余分な改行でcsvデータを保存します
- 25. fileuploadを使用してasp.netで自分のディレクトリを管理する方法
- 26. Java Streamsで余分な値を処理する方法は?
- 27. Facebookの検索APIを使用して余分なフィールドを元に戻す
- 28. 分度器を使用してローカルストレージデータを保存する方法は?
- 29. Magentoで注文した余分なデータを保存する
- 30. ピボットテーブルから余分なフィールドを取得する方法 - laravel
あなたはmod_mamモジュールを使用していますか? –
はいmod_mamを使用してデータベース(mysql)にメッセージを記録します。 – user1820017